EMCCV

Documentation

Everything you need to know about the EMCCV

Quick Start

New to EMCCV? Here's how to create your first character in under a minute:

  1. Launch the app — open the web app in your browser.
  2. Pick a character — select a module from the dashboard (currently featuring SailorXv3).
  3. Customize — use the set tabs and sidebar to toggle features on and off and change their colors.
  4. Get inspired — click Random and Random Color in the toolbar to generate random combinations.
  5. Export — click Capture or press Cmd/Ctrl+E to save a PNG of your design.

Core Concepts

Understanding these terms will help you get the most out of EMCCV. Everything in the app is built on a simple hierarchy:

Modules

A module is a self-contained character template. It defines the canvas size, the available visual elements, and how they relate to one another. Think of it as a complete art kit for a specific character type. Each module is loaded from an XML configuration file that describes its structure and points to the image assets.

Currently available: SailorXv3 (magical girl theme). More modules are in development.

Sets

Within a module, elements are organized into sets — the top-level grouping categories that appear as tabs above the canvas. For example, a character module might have sets named Body, Hair, Clothing, Accessories, and so on. Each set contains one or more aspects.

Aspects

An aspect represents a single customizable feature within a set — for instance, Hair Front, Left Eye, or Skirt. Each aspect has:

  • Visibility — toggled with the checkbox in the sidebar. Controls whether this feature is shown on the canvas.
  • Color — the tint applied to this feature's images. Click the color swatch in the sidebar to change it.
  • Style groups & styles — visual variations of the feature (see below).

Some aspects have special properties:

  • Always On — the aspect is always visible and its checkbox cannot be unchecked.
  • Color Controlled — the aspect's color is controlled by another aspect (via a colormaster attribute). Its color swatch is hidden because the color changes automatically when the controlling aspect's color changes.
  • Parent Conditions — some aspects (and styles) have prerequisites that must be met before they become available. For example, a Hair Bow aspect might require the Long Hair style to be active. When a parent condition is not met, the aspect appears disabled (grayed out) in the sidebar. See also Collapse View, which can hide these unavailable aspects entirely.

Style Groups & Styles

Each aspect can contain one or more style groups. A style group holds a set of mutually exclusive styles — visual variations of the same feature. For example, a Hair aspect might have two style groups: one for length (with styles like Short and Long) and another for texture (with styles like Wavy and Straight).

Click the Settings icon next to an aspect in the sidebar to expand it and reveal its available styles. Selecting a different style within a group immediately replaces the currently active one on the canvas.

If an aspect has multiple style groups, each group is listed separately and each one can have its own selected style. This allows for complex combinations — e.g., a Shirt aspect could have one style group for the shirt design and another for the collar style.

Entities

An entity is a saved character design. It stores all of your customization choices — which aspects are visible, their colors, and which styles are selected — in an XML file. You can save an entity and load it later to continue editing, or share it with others who have the same module installed.

Entities are module-specific: loading an entity requires the module it was created with to be available.

The Interface

The EMCCV interface is composed of several areas that work together. Here's a tour from top to bottom:

Menu Bar

The very top of the app features a traditional menu bar with File, Edit, View, Window, and Help menus. This is where you'll find all available actions and settings, including those not exposed in the toolbar. See the Menu Reference for a complete breakdown.

On the right side of the menu bar, you'll see the EMCCV branding: five colored squares representing the app's identity. Click them to open the EMCCV.com homepage.

Toolbar

Below the menu bar sits the toolbar — a row of icon buttons for quick access to the most common actions. From left to right, the default toolbar includes:

  • Load Open — open a module or entity file (Cmd/Ctrl+O)
  • Save Save — save the current entity (Cmd/Ctrl+Shift+S)
  • Capture Export — export the canvas as a PNG image (Cmd/Ctrl+E)
  • Undo Undo (Cmd/Ctrl+Z) & Redo Redo (Cmd/Ctrl+Y)
  • Reset Reset — reset the module to its default state (Cmd/Ctrl+Shift+R)
  • Global Mode Global Mode — extends the scope of link and randomization tools to all sets (default: on)
  • Color Link Color Link — keeps aspects with matching colors in sync (default: on)
  • Chain Link Chain Link — manually link aspects into a chain group (default: off)
  • Mirror Link Mirror Link — synchronizes mirrored aspect pairs like left/right eyes (default: on)
  • Random Random Visibility (Cmd/Ctrl+Shift+V)
  • Random Color Random Colors (Cmd/Ctrl+Shift+C)
  • Shift Color Shift Colors (Cmd/Ctrl+Shift+X)
  • Zoom In Zoom In (Cmd/Ctrl++) & Zoom Out Zoom Out (Cmd/Ctrl+−)
  • Reset View Reset View — reset zoom and pan to default (Cmd/Ctrl+0)
  • Collapse Collapse View — hide aspects whose parent conditions aren't met (default: on)
  • Close Close — close the current module and return to the dashboard (Cmd/Ctrl+W)

The toolbar can be hidden via Window → Show Toolbar (Cmd/Ctrl+Shift+T). Its size is configurable in the View menu (Small / Normal / Large).

Set Tabs

Directly below the toolbar, you'll see the set tabs — one tab for each set in the current module. Click a tab to switch the sidebar to that set's aspects. You can also navigate between tabs with the ← and → arrow keys.

Set tabs remain visible even when the sidebar is hidden, so you always have access to navigation.

Sidebar

The sidebar on the left is your main editing panel. It shows all aspects for the currently selected set. For each aspect, you'll see:

  • Checkbox — toggles aspect visibility. Grayed out if the aspect is always-on or if a parent condition is not met.
  • Color swatch — a small colored square showing the aspect's current tint color. Click it to open the color picker. Hidden when a colormaster attribute is controlling the color from another aspect.
  • Title — the aspect name. Dimmed when the aspect is unavailable (parent condition not met).
  • Settings Expand button — reveals the style groups and styles for this aspect.
  • Link Link icon — appears only when Chain Link mode is active. Click to toggle this aspect into the chain group.

Aspects can be visually grouped by the module author. Groups are separated by subtle spacing in the sidebar.

The sidebar can be hidden via Window → Show Sidebar (Cmd/Ctrl+Shift+B).

Canvas

The large area to the right of the sidebar is the canvas — where your character is rendered in real time. What you see here is exactly what your exported image will look like. The canvas supports zooming and panning.

At the bottom of the app is a contextual footer bar. It shows helpful descriptions when you hover over toolbar buttons and other interactive elements. On the right side, it displays information about the currently loaded module (name, version, and author).

Debug Log Panel

Below the sidebar sits the debug log panel, hidden by default. When enabled via Window → Show Debug Log (Cmd/Ctrl+Shift+D), it shows real-time logging information about what the application is doing: parsing, rendering, color changes, parent condition evaluations, and more.

The log panel has its own set of controls:

  • Settings Settings — configure log level (All / Info / Warning / Error) and choose which element types and attributes to log.
  • Full Width / Full Screen — expand the log panel for easier reading.
  • Copy / Clear — copy log contents to clipboard or clear them.

This is primarily a debugging and troubleshooting tool. It can also be useful for understanding how the module's internal logic works.

Colors

Color is central to EMCCV. Every colorizable aspect has a tint color that is applied to its images on the canvas. This section covers how to pick, manage, and coordinate colors.

Color Picker

Click any color swatch in the sidebar to open the color picker. The picker provides several ways to choose a color:

  • HSB Sliders — three sliders for Hue (0–360°), Saturation (0–100%), and Brightness (0–100%). Each slider has a live gradient preview, and the current color is shown in a large preview area at the top.
  • Palette Swatches — pre-built color palettes appear as rows of clickable swatches. Click any swatch to apply that color instantly. The default palettes are Pure Colors, Precious Metals, and Skin Tones — plus any custom palettes you've added.
  • Colors In Use — a special section that automatically shows all colors currently in use across the module. This makes it easy to reuse colors from other aspects without remembering the exact HSB values. You can also export these colors as a palette file using the Download button.

Each palette section has a Close button to hide it from the picker.

Changes are applied in real time as you adjust the sliders or click swatches. Click the close button in the picker header or press Esc to close it.

Palettes

A palette is a curated collection of colors stored in a simple text file. Colors are written as hex codes separated by semicolons (e.g., #FF5599;#33AA77;#0066CC;). The file can also include a title and description in the header lines. EMCCV ships with three default palettes:

  • Pure Colors — a set of bright, saturated hues.
  • Precious Metals — gold, silver, bronze, and copper tones.
  • Skin Tones — a range of natural skin colors.

You can add your own custom palettes via File → Preferences → Palettes. Custom palettes are imported from .txt files and appear alongside the default palettes in the color picker. Each palette can be shown or hidden, reordered, and removed.

Eyedropper

In the color picker, click the Eyedropper eyedropper button to pick a color directly from the canvas. Your cursor changes to a crosshair — click anywhere on the canvas to sample that pixel's color and apply it to the current aspect.

Global Mode Global Mode

Shortcut: Cmd/Ctrl+Shift+G · Default: On

Global Mode is a modifier that changes the scope of other tools. It doesn't do anything on its own — it extends the reach of the tools that respect it.

When Global Mode is ON, the following tools affect all sets in the module (not just the currently visible tab):

  • Randomize Visibility — randomizes features across all sets.
  • Randomize Colors — generates new colors across all sets.
  • Shift Colors — shuffles colors across all sets.
  • Color Link — links matching colors across all sets.
  • Chain Link — propagates chain color changes across all sets.
  • Mirror Link — syncs mirrors across all sets.

When Global Mode is OFF, the above tools only operate on the aspects within the currently selected set tab.

💡 Tip: Global Mode is perfect for sweeping changes. Turn it on, hit Random Color Randomize Colors, and your entire character gets a fresh color scheme in one click.

Randomization

EMCCV provides three randomization tools. Each one can operate on the current set or on all sets, depending on whether Global Mode is on. All three respect the link tools when active.

Randomize Visibility Random

Shortcut: Cmd/Ctrl+Shift+V

Randomly toggles the visibility of aspects and randomly selects styles within each visible aspect's style groups. Aspects that are always-on are not affected, and aspects with unmet parent conditions are skipped.

Each aspect has an internal probability value (set by the module author, defaulting to 75%) that controls how likely it is to appear during randomization. An aspect with 100% probability will always be shown; one with 30% will appear only about a third of the time.

Randomize Colors Random Color

Shortcut: Cmd/Ctrl+Shift+C

Assigns a new random color to every colorizable aspect (those whose color is not controlled by a colormaster).

The link tools affect how colors are distributed:

  • Color Link on: aspects that currently share a color will all receive the same new random color.
  • Chain Link on: aspects in the chain group all receive one shared random color.
  • Mirror Link on: mirrored aspects receive the same random color.

Shift Colors Shift Color

Shortcut: Cmd/Ctrl+Shift+X

Shuffles the existing colors among the visible, colorizable aspects. Unlike Randomize Colors, this doesn't generate new colors — it redistributes the ones already in use (the “Colors In Use” palette), producing a different look while keeping the same overall color scheme.

The link tools affect how the shuffle is grouped: linked aspects share one entry in the pool and move together.

Saving & Exporting

Save / Load Entities

To save your current character design:

  • Save Entity As… (Cmd/Ctrl+Shift+S) — enter a name and download the entity as an XML file. In the web version, a dialog also offers the entity's thumbnail image for separate download.
  • Save Entity Desktop (Cmd/Ctrl+S) — quick-save to the same file path used previously. This overwrites the file on disk without a dialog.

To load a previously saved entity:

  • File → Open Entity (Cmd/Ctrl+O) — select an XML entity file from your device.
  • File → Load recent Entity Desktop — pick from a list of recently loaded entities.

Entity files are module-specific. When loading an entity, EMCCV checks whether it matches the currently loaded module. If there is a mismatch, a warning is shown (this can be configured in Preferences → Startup).

📝 Note: EMCCV also supports loading legacy .txt entity files from the original Java version. A one-time warning will inform you of the legacy format.

Export Image

To export a PNG image of your character:

  • Click Capture in the toolbar, or press Cmd/Ctrl+E, or go to File → Export Image.

The exported image is a high-quality PNG with a transparent background at the module's native resolution — perfect for use in other projects.

Canvas Controls

You can zoom and pan the canvas to inspect details or get an overview:

  • Zoom in / out — use the scroll wheel, pinch-to-zoom on trackpad, or click Zoom In / Zoom Out in the toolbar (Cmd/Ctrl++ and Cmd/Ctrl+−). Zooming is centered on the mouse position.
  • Pan — click and drag on the canvas to move it around.
  • Reset View — click Reset View in the toolbar or press Cmd/Ctrl+0 to fit the canvas back to its default position and zoom level.
📝 Note: Zoom and pan are purely for navigation — they do not affect the exported image, which is always rendered at the module's native resolution.

Preferences

Open Preferences via File → Preferences (Cmd/Ctrl+,). The dialog has four tabs:

Startup

Configure dashboard behavior and warning dialogs:

  • Dashboard — set the thumbnail size (50–250px), choose whether to show info boxes on cards, group by module, and set the sort order (by date, title, or filename).
  • Warnings — toggle individual warning dialogs: warn when loading legacy .txt entities, warn before global reset, and warn when loading an entity into a potentially mismatched module.

Logging Configuration

Fine-grained control over the debug log output. Also accessible from Help → Logging Configuration or the Settings button in the log panel. Options include:

  • Log Level — All, Info, Warning, or Error.
  • Element Filters — choose which element types to log (sets, aspects, style groups, styles, files).
  • Attribute Filters — choose which attributes to log (visibility, parent conditions, color, opacity, position, randomize).
  • Special Options — Layer Order logging, Current Tab Only filter, Module Debug mode.

Palettes

Manage which palettes appear in the color picker:

  • Built-in palettes — toggle the visibility of Pure Colors, Precious Metals, and Skin Tones.
  • Custom palettes — import .txt palette files, give them a name and description, reorder them, toggle visibility, or remove them entirely.

Palette files use semicolons to separate hex color codes (e.g., #FF5599;#33AA77;#0066CC;). The file can include header lines for title and description.

Environment

General application settings:

  • Recent History Length — how many recent modules and entities to remember (1–50).
  • Directories Desktop — configure default directories for modules, entities, images, and palettes.

Dashboard

The dashboard is the landing screen when no module is loaded. It shows your recent entities as a grid of thumbnail cards, grouped by module. From here you can:

  • Click a card to load that entity and jump straight into editing.
  • Collapse / expand module groups by clicking the group header.
  • Open a module or entity via File → Open (Cmd/Ctrl+O).

Dashboard display settings can be configured in Preferences → Startup: thumbnail size, sort order (by date, title, or filename), and whether to group by module.

🖥 Desktop Only: The dashboard with thumbnail cards and recent history is fully functional in the desktop version. The web version shows a selection of sample entities for the module SailorXv3 to get you started.

View Options

Customize the appearance of the interface via the View and Window menus:

Toolbar Size (View menu)

Choose between Small, Normal, and Large toolbar icon sizes to suit your screen and preference.

Text Size (View menu)

Switch between Normal and Large text for the sidebar and other UI elements.

Collapse View (View menu)

When enabled, aspects whose parent conditions are not met (i.e., they are currently unavailable) are automatically hidden from the sidebar. This keeps the sidebar clean and focused on what's currently relevant. When disabled, all aspects are shown, but unavailable ones appear dimmed.

Compact View (View menu)

Toggles between a spacious sidebar layout and a tighter, more condensed view with reduced spacing between elements.

Show / Hide Panels (Window menu)

  • Show Toolbar (Cmd/Ctrl+Shift+T) — toggle toolbar visibility.
  • Show Sidebar (Cmd/Ctrl+Shift+B) — toggle sidebar visibility. Set tabs remain visible.
  • Show Debug Log (Cmd/Ctrl+Shift+D) — toggle the log panel below the sidebar.

Keyboard Shortcuts

All shortcuts use Cmd on macOS and Ctrl on Windows/Linux.

Action Shortcut
File
Open Entity (or Module/Entity on desktop)Cmd/Ctrl+O
Save Entity (quick-save) DesktopCmd/Ctrl+S
Save Entity As…Cmd/Ctrl+Shift+S (or Cmd/Ctrl+S on web)
Export ImageCmd/Ctrl+E
Refresh DesktopCmd/Ctrl+R
Reset ModuleCmd/Ctrl+Shift+R
Close ModuleCmd/Ctrl+W
PreferencesCmd/Ctrl+,
Quit DesktopCmd/Ctrl+Q
Edit
UndoCmd/Ctrl+Z
RedoCmd/Ctrl+Y
Randomize VisibilityCmd/Ctrl+Shift+V
Randomize ColorsCmd/Ctrl+Shift+C
Shift ColorsCmd/Ctrl+Shift+X
Toggle Tools
Color LinkCmd/Ctrl+Shift+L
Chain LinkCmd/Ctrl+Shift+H
Mirror LinkCmd/Ctrl+Shift+M
Global ModeCmd/Ctrl+Shift+G
Window
Show/Hide ToolbarCmd/Ctrl+Shift+T
Show/Hide SidebarCmd/Ctrl+Shift+B
Show/Hide Debug LogCmd/Ctrl+Shift+D
Navigate Set Tabs← / →
Canvas
Zoom InCmd/Ctrl++
Zoom OutCmd/Ctrl+−
Reset ViewCmd/Ctrl+0

Web vs Desktop

EMCCV is available as a free web app and as a desktop application (coming soon for macOS and Windows). The core creative tools are identical on both platforms, but there are some differences:

Feature Web Desktop
All creative tools (sidebar, colors, link tools, randomization)✓✓
Export image as PNG✓✓
Save Entity As… (download XML)✓✓
Load entity from file✓✓
Quick-save entity (overwrite on disk)—✓
Recent modules & entities history—✓
Refresh module from disk—✓
Custom directories (modules, entities, images, palettes)—✓
Works offline—✓

In the web version, desktop-only features are either hidden entirely or shown as disabled with a “Desktop Only” label in the menus.

Technical Reference (Developer Notes)

Data Hierarchy & Attribute Inheritance

The full hierarchy is: Module → Set → Aspect → StyleGroup → Style → File. Attributes cascade downward through this chain. The following attributes are inherited from parent to child if not explicitly set:

Special Aspect Properties (internal)

  • incognito — the aspect is not shown in the sidebar. It exists only to serve as a condition reference for other elements. Users never see incognito aspects.
  • colorLocked — internal flag set when an aspect's color is controlled by a colormaster. The color swatch is hidden.

Inherited Attributes

  • layer — rendering order (higher = drawn later = on top). Inherited: Set → Aspect → StyleGroup → Style → File.
  • colour — tint hex color. Set → Aspect (but not deeper; files use colormaster or their own colour).
  • colormaster — ID of another aspect to inherit color from. Inherited: Set → Aspect → StyleGroup → Style → File.
  • colorizable — whether tinting is applied. Inherited: Set → Aspect → StyleGroup → Style → File (default true). false on a set or aspect also hides the aspect's color swatch and overrides true on its files; on a stylegroup, style or file it only stops tinting those files.
  • opacity / opacitymaster — opacity value (0-255) or ID of aspect to inherit from. Set → Aspect → StyleGroup → Style → File.
  • x, y, w, h, relx, rely — position and size. Inherited: Set → Aspect → StyleGroup → Style → File. Styles defined with the stylegroup attribute (no <stylegroup> element) inherit straight from the aspect.
  • flipped — horizontal flip. Inherited: Set → Aspect → StyleGroup → Style → File.
  • visible / alwayson — Set → Aspect.
  • probability — randomization probability. Set → Aspect (default 75).

Style Groups

An aspect's children are read in XML order: each <stylegroup> element is a group; <style> elements directly in the aspect are grouped by their (older) stylegroup attribute, and styles without one form an untitled group. For those inline groups the ID is <aspect id>_<group name> and the title is the group name. Stylegroup IDs must be unique within the module; duplicates (or clashes with other element IDs) are logged as warnings when the module loads.

Parent Conditions

Aspects, styles, and files can have a parent attribute that defines conditions for their visibility. The condition syntax supports:

  • Single ID: aAspectId — true if that aspect is active (visible or alwayson, with its own parent conditions met).
  • Style check: aAspect.sStyle — true if the aspect is active AND the specific style is selected.
  • Negation: !aAspectId — true if the condition is NOT met.
  • AND / OR: A and B, A or B — boolean logic. AND binds tighter than OR.
  • Comma: A, B — equivalent to AND.
  • Parentheses: (A or B) and C — grouping.

Evaluation uses proper operator precedence: AND binds tighter than OR. Parent conditions are recursively checked (i.e., if A has a parent condition, that must also be met).

Layer Rendering Order

Files are rendered in order of their resolved layer value (lowest first, highest last/on top). When multiple files share the same layer, insertion sort (preserving XML document order) determines the tie-breaker — matching the original Java implementation's behavior.

Blend Modes

Files can specify a blendmode attribute: blend (normal/default), multiply, screen, or add. These are applied via the Canvas2D globalCompositeOperation.

Color Tinting

Color tinting uses a multiply approach: the image is drawn to an offscreen canvas, the tint color is applied as a multiply composite, then the alpha channel from the original image is restored. Brightness adjustments (bri attribute, -255 to +255) are applied as an additive offset to each RGB channel.

Link Tools and the mirror Attribute

Color Link, Chain Link and Mirror Link are runtime tools (toggle modes). The only related config attribute is mirror:

  • Color Link — changing a colour also changes every aspect that currently has the same colour. Needs nothing in the config.
  • Chain Link — the user ticks aspects via the link icons that appear while the tool is active (colorchain runtime flag); changing the colour of one changes all ticked aspects. Needs nothing in the config.
  • Mirror Link — uses the mirror attribute. Aspects with the same mirror value sync visibility and colour; styles with the same mirror value are selected together. Only active while the tool is on.

There are no link or chain config attributes, and no requires/conflicts style attributes (removed 2026-10-02; they were never used by any module). Dependencies between elements are expressed only with parent conditions.

Entity XML Format

Entity files store: the module ID, entity name, and for each aspect: its ID, visibility state, hex color, and selected style IDs. Legacy .txt format (from the original Java version) is also supported for backward compatibility.

Randomize Key System

The module XML can define randomize="keyName" on sets and aspects. This creates keyboard-triggered randomization shortcuts (the key letter maps to an element ID). When a user presses the corresponding key during editing, only that specific element (and its children) is randomized.

Platform Detection & File Operations

The app uses a FileOperationsFactory to create either BrowserFileOperations (web) or TauriFileOperations (desktop). The browser version uses HTML5 File API (input[type=file] for reading, Blob URLs + download links for writing). The Tauri version uses native dialog and fs plugins. The isWebVersion flag controls which menu items are available and how save/load flows work.

Rendering Pipeline

Rendering uses double-buffering: an offscreen canvas is drawn first, then copied to the visible canvas in one operation to prevent flicker. All visible files are collected, sorted by layer (insertion sort for stability), then drawn sequentially with their resolved color tint, opacity, blend mode, and position transforms.

State Management

The EMCCVManager is the single source of truth for application state. It maintains the current module, tool states (via ToolRegistry), and history stack for undo/redo. The history captures aspect visibility, colors, and style selections. UI components subscribe to update callbacks and receive dirty flags (canvas, sidebar, toolbar, menubar) to minimize unnecessary re-renders.