Everything you need to know about the EMCCV
New to EMCCV? Here's how to create your first character in under a minute:
Understanding these terms will help you get the most out of EMCCV. Everything in the app is built on a simple hierarchy:
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.
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.
An aspect represents a single customizable feature within a set — for instance, Hair Front, Left Eye, or Skirt. Each aspect has:
Some aspects have special properties:
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 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.
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 EMCCV interface is composed of several areas that work together. Here's a tour from top to bottom:
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.
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:
The toolbar can be hidden via Window → Show Toolbar (Cmd/Ctrl+Shift+T). Its size is configurable in the View menu (Small / Normal / Large).
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.
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:
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).
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).
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:
This is primarily a debugging and troubleshooting tool. It can also be useful for understanding how the module's internal logic works.
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.
Click any color swatch in the sidebar to open the color picker. The picker provides several ways to choose a color:
Each palette section has a 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.
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:
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.
In the color picker, click the 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.
Link tools let you keep colors synchronized across multiple aspects. There are three link tools, each with a different strategy. They can be used individually or combined for powerful workflows.
Shortcut: Cmd/Ctrl+Shift+L · Default: On
When Color Link is active, aspects that share the same color are linked. Changing the color of one aspect will automatically update all other aspects (in the current set, or all sets if Global Mode is on) that had the same color.
This is useful for maintaining color harmony: if your character's hair and eyebrows share the same brown, changing one changes both. The linkage is based on matching the old color, so only aspects that actually matched before the change are updated.
Shortcut: Cmd/Ctrl+Shift+H · Default: Off
Chain Link is a manual linking tool. When activated, a small link icon appears next to each eligible aspect in the sidebar. Click the link icon on any aspects you want to connect into a chain group.
Once chained, those aspects will all update together when any one of them has its color changed. Unlike Color Link (which links by shared color), Chain Link lets you connect aspects that currently have different colors.
Chain selections persist even when Chain Link mode is turned off — so you can set up your chains once and toggle the mode on and off as needed. The link icons are only visible while the mode is active, but the underlying connections remain. Toggle the icon on an aspect to add or remove it from the chain group.
Shortcut: Cmd/Ctrl+Shift+M · Default: On
Mirror Link synchronizes aspects that are defined as mirrors of each other in the module configuration — typically left/right pairs like Left Eye and Right Eye, or Left Earring and Right Earring.
When Mirror Link is active, changing the visibility, color, or style of one mirrored aspect automatically applies the same change to its counterpart. This ensures symmetrical designs stay symmetrical.
Turn Mirror Link off if you want to customize left and right sides independently.
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):
When Global Mode is OFF, the above tools only operate on the aspects within the currently selected set tab.
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.
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.
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:
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.
To save your current character design:
To load a previously saved entity:
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).
.txt entity files from the original Java version. A one-time warning will inform you of the legacy format.
To export a PNG image of your character:
The exported image is a high-quality PNG with a transparent background at the module's native resolution — perfect for use in other projects.
You can zoom and pan the canvas to inspect details or get an overview:
Open Preferences via File → Preferences (Cmd/Ctrl+,). The dialog has four tabs:
Configure dashboard behavior and warning dialogs:
.txt entities, warn before global reset, and warn when loading an entity into a potentially mismatched module.Fine-grained control over the debug log output. Also accessible from Help → Logging Configuration or the button in the log panel. Options include:
Manage which palettes appear in the color picker:
.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.
General application settings:
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:
Dashboard display settings can be configured in Preferences → Startup: thumbnail size, sort order (by date, title, or filename), and whether to group by module.
Customize the appearance of the interface via the View and Window menus:
Choose between Small, Normal, and Large toolbar icon sizes to suit your screen and preference.
Switch between Normal and Large text for the sidebar and other UI elements.
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.
Toggles between a spacious sidebar layout and a tighter, more condensed view with reduced spacing between elements.
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) Desktop | Cmd/Ctrl+S |
| Save Entity As… | Cmd/Ctrl+Shift+S (or Cmd/Ctrl+S on web) |
| Export Image | Cmd/Ctrl+E |
| Refresh Desktop | Cmd/Ctrl+R |
| Reset Module | Cmd/Ctrl+Shift+R |
| Close Module | Cmd/Ctrl+W |
| Preferences | Cmd/Ctrl+, |
| Quit Desktop | Cmd/Ctrl+Q |
| Edit | |
| Undo | Cmd/Ctrl+Z |
| Redo | Cmd/Ctrl+Y |
| Randomize Visibility | Cmd/Ctrl+Shift+V |
| Randomize Colors | Cmd/Ctrl+Shift+C |
| Shift Colors | Cmd/Ctrl+Shift+X |
| Toggle Tools | |
| Color Link | Cmd/Ctrl+Shift+L |
| Chain Link | Cmd/Ctrl+Shift+H |
| Mirror Link | Cmd/Ctrl+Shift+M |
| Global Mode | Cmd/Ctrl+Shift+G |
| Window | |
| Show/Hide Toolbar | Cmd/Ctrl+Shift+T |
| Show/Hide Sidebar | Cmd/Ctrl+Shift+B |
| Show/Hide Debug Log | Cmd/Ctrl+Shift+D |
| Navigate Set Tabs | ← / → |
| Canvas | |
| Zoom In | Cmd/Ctrl++ |
| Zoom Out | Cmd/Ctrl+− |
| Reset View | Cmd/Ctrl+0 |
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.
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:
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.stylegroup attribute (no <stylegroup> element) inherit straight from the aspect.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.
Aspects, styles, and files can have a parent attribute that defines conditions for their visibility. The condition syntax supports:
aAspectId — true if that aspect is active (visible or alwayson, with its own parent conditions met).aAspect.sStyle — true if the aspect is active AND the specific style is selected.!aAspectId — true if the condition is NOT met.A and B, A or B — boolean logic. AND binds tighter than OR.A, B — equivalent to AND.(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).
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.
Files can specify a blendmode attribute: blend (normal/default), multiply, screen, or add. These are applied via the Canvas2D globalCompositeOperation.
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.
Color Link, Chain Link and Mirror Link are runtime tools (toggle modes). The only related config attribute is mirror:
colorchain runtime flag); changing the colour of one changes all ticked aspects. Needs nothing in the config.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 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.
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.
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 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.
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.