How ESKEES works
Based on the ESKEES Studio alpha (September 2026). Screens and features may change without notice. The app is currently in Japanese; labels are quoted with translations. For step-by-step use, see the getting-started guide; for scripting, the script language page.
ESKEES and EMG
ESKEES is a product; EMG is a file format — they are different things. EMG is an open format published under Apache 2.0 (specification). ESKEES is a tool for making and exporting EMG works.
- ESKEES can do more than the EMG spec. Nulls, crops, scenes, meshes and scripts have no direct EMG equivalent; on export they are converted to EMG fields, baked into images, or carried as ESKEES extension data.
- The reverse doesn't hold: what works in the editor may not survive export. Rotating an asset, for example, is baked into the image, so it can't be rotated at play time.
File types
| Extension | What it is | Contents |
|---|---|---|
.emg | An EMG file | Parts and layers (data.json), texture images, blink/lip-sync mapping (mapping.json) |
.eskx | ESKEES export (EMG + extension data) | Everything in .emg plus mesh, logic, UI, scenes, sounds, stages and other extension data |
.espj | Project | The whole editing state with asset images and sounds — enough on its own to carry on editing |
.estpl.json | Template | Part assignments to reuse on another asset |
- The export format follows the content:
.eskxif anything needs extension data (such as logic), otherwise.emg. Exporting as.emgwithout extension data lists what will be dropped. - The EMG part of an
.eskxfollows the spec. Rename it to.emgand EMG-compatible software will display the artwork, ignoring the extension data.
How edits are exported
| What you edit | On export |
|---|---|
| Asset rotation / scale, 9-slice, objects (text + images) | Baked into the image (9-slice also writes its edges, EMG 0.5.6) |
| Nulls, crops, states, timeline and easing, atlas groups | Converted to EMG fields (states become presets; easing is baked into keys) |
| Mesh and wind, click areas, masks, logic, UI, scenes, sounds, grid data, stages, camera and world, character settings, save-data layout | Extension data (.eskx only) |
| Components, library assets and categories, guides, grid, preview background, frame rate | Saved in the project (.espj) only |
| Snap strength, position origin, shortcuts | Stored on your device as personal preferences |
Saving and undo
- Edits that affect the export can be undone (Ctrl+Z / Ctrl+Shift+Z). Guides and grids are saved in the project but aren't part of undo.
- ESKEES Studio runs entirely in your browser and never uploads your work. Save often with 「ファイル ▾」→「プロジェクトを保存」 (Ctrl+S).
The screen
| Area | Contents |
|---|---|
| Top bar | File, undo, scenes, Canvas / Logic, Test play, Export |
| Library (top left) | Imported assets, components, stages, data and sounds. Nothing shows on the canvas until you place it |
| Hierarchy (bottom left) | Three views: parts, stacking order, and layers (the PSD tree — the only place to regroup parts) |
| Inspector (right) | Changes with the selection: null, instance, part or UI; with nothing selected, project settings and export |
| Bottom panel | Timeline, states (including the scene list), logic, UI and log |
Library and instances
- Imported assets and placed instances are separate. Place an asset as many times as you like; only instances are exported. Deleting an asset asks first, because its placed instances go with it.
- Sounds (effects / BGM / voice), grid data painted cell by cell, and atlases split by purpose (characters, backgrounds…) also live here.
Components
Components combine layers from several assets with text. Unlike objects, each element stays its own layer, editing a component updates every placed instance, and each instance can override its text. If the script has class ComponentName, placed instances become actors when play starts. Double-click a component to edit it on the canvas.
Scenes
Scenes switch the whole screen (title → game → result). Unlike states, only one scene is active at a time, and it switches the UI too. Anything in no scene is "common" and always shown. If a part seems missing, switch scenes in the top bar. Scripts use scene name, on scene name and in scene name.
Nulls
Nulls move several parts together. A null has its own animation, members keep theirs, and nulls can be nested. The pivot is fixed when you first set a key. On export, nulls are folded into their members' animation.
Animation and easing
- Set keys for position, rotation, scale and opacity on the timeline; use the graph view for rows with many keys.
- Easing doesn't add keys, so you can change curves later: 4 basic curves plus the 30 from easings.net, including Elastic and Bounce. EMG has no easing, so curves are baked into keys on export.
- Shortcuts: K play / stop, J / L step one frame (Shift for one second), hold Space to pan. Shortcuts can be remapped.
Mesh, click areas and masks
- Mesh sways hair and cloth, with pinned areas, wind and click response per region. Wind depends only on time, so replays look the same.
- Click areas switch frames, apply presets, toggle visibility or play animations when pressed, reverting after 2 seconds by default.
- Masks clip with rectangles or ellipses that can change with variables or time — shown clipped in the editor too.
Logic and test play
「ロジック」 (Logic) in the top bar switches to the script workspace: an outline on the left, the script as blocks, text or a diagram in the middle (all three edit the same script), and problems on the right — lines that don't parse and names that don't exist, found without running. Test play (Ctrl+Enter) runs the work on the same engine as the Player and showcase.
Script language
A small Lua-like language with blocks closed by end: values and tables, var / globals / local, the usual control flow plus wait, functions, class and actors, triggers such as on start / on frame / on key / on press, keyboard, gamepad and virtual pad input, tween, sound and music, camera and stages, save and score. See Script language.
Game features
- Character settings — control (8 directions, left/right, left/right and jump), hitbox (image rect, rectangle, circle) and class variables in the inspector, without writing a script.
- Stages — paint tile layers with collision, place objects and set the camera's start in 「+ ステージ」.
- Camera and world — a world larger than the canvas, camera follow and shake, and parts pinned to the screen.
- UI — overlay panels with text, buttons, images and variable-driven gauges (HP bars).
- Sound, grid data, saves — and the Player resumes where you left off.
The six samples on showcase are built with these features and open in Studio (Remix a sample).
Export
.emg/.eskx— one texture by default (split only if it won't fit in 8192px, with a notice).- GIF (one level of transparency), APNG (keeps semi-transparency) and WebM, with presets for Discord stickers (320×320, 512KiB, 5 s) and LINE stickers (320×270, 1MB, 4 s, APNG only).
Publishing and playback
- showcase — post an
.eskxand anyone can play it in the browser, with ratings and leaderboards. - Leaderboards — emit a value with
score; boards are readable by anyone through api.eskees.com. - ESKEES Screen — run it as your Windows desktop wallpaper.
- ESKEES Editor (desktop) — coming soon, opening
.espj/.eskx/.emgby double-click.
Using EMG elsewhere
.emg loads in Unity, Godot, Ren'Py, YMM4 and web players. To keep it looking right:
- Static vs Switch decides how every player draws a part. Static draws all layers of the part; Switch draws exactly one. Use Switch for expression and outfit variants, Static for things built from several layers. Mistakes don't raise errors — variants pile up, or only one layer shows.
- Hidden layers matter. In a Switch part, hidden PSD variants are exported as options; in a Static part, only visible layers are.
- Stacking order is one order across the whole file. Blend modes are the 16 CSS modes plus additive (
plus-lighter). - Logic, mesh and UI run only on the ESKEES engine (showcase, Player, Screen); elsewhere the work shows as still artwork.