#What you'll learn
- Which Pixx app produces each piece of game data, and how it travels to Pixxizi.
- Exactly what Pixxizi writes for each engine: sprites, hitboxes, shadows, levels, UI, fonts, sound and dialogue.
- Where the coordinate systems differ between engines.
- How to set up a pipeline that you can re-export in one click when art changes.
#Before you start
- You know Pixxizi's basics from the Pixxizi guide.
- You're comfortable moving work between apps; see Working across apps — Intermediate.
- You know which engine (and version) you're targeting. Pixxizi writes Godot 4, Unity, GameMaker, Phaser 3, LÖVE, Defold and a Generic set.
#Where the data comes from
| Data | Made in | Library kind | Arrives in the engine as |
|---|---|---|---|
| Animations and sheets | Pixxivi, Pixxani, Pixxifo, Pixxava, Pixxula | frames, sheet | Each engine's animated sprite format |
| Hitboxes, pivots, attach points, frame events | Pixxeta | meta on frames/sheet | Engine scripts and data files (below) |
| Shadows | Pixxado (shadow layer only) | frames, sheet | A separate <name>_shadow sprite |
| Levels | Pixxori | tilemap | Engine levels with collision and objects |
| UI panels and buttons | Pixxico | ui-frame | Nine-slice resources |
| Bitmap fonts | Pixxypo, the Pixx font library | font | BMFont (.fnt) and font strips |
| Music and sound effects | Pixxune, Pixxibu | sound (with loop points) | WAV files with loop settings |
| Conversations | Pixxara | dialogue | JSON + Yarn Spinner (+ Ren'Py in Generic) |
| Palettes | Pixxulo and others | palette | .hex, .gpl or .json |
Send each of these to Pixxizi (it accepts every kind), or add them from its own Library button.
#What each engine gets
| Engine | Sprites | Hitboxes and events | Levels | Fonts, sound, dialogue |
|---|---|---|---|---|
| Godot 4 | SpriteFrames (.tres) + a ready AnimatedSprite2D scene (.tscn); one shared atlas per group | <name>_gameplay.json applied each frame by pixx/pixx_sprite.gd: Area2D children named hit, hurt, collide and trigger, and a frame_event signal | A scene with TileMap layers, merged collision shapes and object markers, plus a TileSet | .fnt (imports as a font), WAV with loop import settings, dialogue as .json + .yarn. Also a runnable project.godot |
| Unity | Sliced sprites with .meta files (pivots, point filter, uncompressed), one sheet per sprite; .anim clips | <name>_gameplay.json + Scripts/PixxGameplay.cs, which builds BoxCollider2D per frame; frame events call OnPixxEvent(string) | Tiled .tmx + .tsx (import with SuperTiled2Unity) | BMFont .fnt + PNG, WAV + audio_loops.json, .json + .yarn for Yarn Spinner |
| GameMaker | A folder per sprite: numbered frame PNGs, a _stripN strip and a JSON with origin, size, speed and bounding box | scripts/scr_pixx_gameplay.gml → pixx_gameplay(sprite_name, frame) | Tiled .tmj + per-layer grids as JSON | Font strips for font_add_sprite_ext, WAV + sounds/loops.json, dialogue .json + Yarn |
| Phaser 3 | A multi-atlas (assets/atlas.json) + assets/animations.json; a runnable index.html | assets/gameplay.json | Tiled JSON | BMFont XML (bitmapFont), an audio sprite (audioSprite), dialogue files |
| LÖVE | One atlas + assets.lua (quads, animations in seconds, pivots, hitboxes) + a pixx.lua helper and sample main.lua | Included in assets.lua | A Tiled-format Lua map for STI | Included alongside |
| Defold | An .atlas per sprite with its animations (separate frame PNGs; Defold packs them) | pixx/gameplay.json | A .tilemap + .tilesource, with collision and objects in a JSON file | .fnt + .font, .wav + .sound |
| Generic | A packed PNG per sprite + a JSON with frames, animations and durations, pivots, hitboxes, sockets and events | In the same JSON | Tiled .tmj and .tmx + the original map | BMFont .fnt, WAV + loops.json, palettes (.hex, .gpl, .json), dialogue (.json, .yarn, .rpy) |
Every export also contains pixx_manifest.json (what's in the package and where it came from), README.txt (how to bring it into that engine) and CREDITS.txt.
#How-tos
#How to carry hitboxes from Pixxeta into your engine
- In Pixxeta, add boxes, the pivot, attach points and frame events to your animation.
- Send to App → Pixxizi (or to Pixxula first to pack a sheet; the data travels with the frames).
- In Pixxizi, click Export, choose your engine(s) and click Build.
- In the engine, use the script or data file from the table above. For Unity, add PixxGameplay.cs next to the SpriteRenderer and assign the gameplay JSON; for Godot, the generated scene already has the hitbox script attached.
#How to add Pixxado shadows as their own sprite
- In Pixxado, send your animation's Shadow layer only to Pixxizi, along with the sprite itself (plain, or Lit art only).
- Pixxizi pairs the shadow with its sprite (same frame count and size, preferring the same name). If it can't tell, choose the sprite in the shadow's Shadow of setting.
- Export. The shadow becomes <name>_shadow with the same animations, frames and pivot. In Godot it's already a Shadow node behind the sprite; elsewhere, draw it at the sprite's position, behind it.
#How to export a level from Pixxori
- In Pixxori, Send to App → Pixxizi. The level arrives as a tilemap with its tile layers, collision and objects.
- Check it in Pixxizi's preview, which overlays collision and objects.
- Export. Each engine gets the level format in the table above. Object positions are in pixels, and collision is merged into as few rectangles as possible.
#How to ship bitmap fonts and UI frames
- Send a font from Pixxypo (or pick one from the Pixx font library) and UI frames from Pixxico to Pixxizi.
- Export. Fonts become BMFont files (with kerning pairs) and font strips; nine-slice frames keep their margins, for example as a Godot StyleBoxTexture plus a NinePatchRect scene.
#How to loop music correctly
- Set loop points in Pixxune (or Pixxibu) before you send the sound.
- In Pixxizi, check the loop in the sound's preview. Music of 8 seconds or longer without loop points loops end to end by default, marked "auto".
- Export. Sound is always WAV, with the loop settings each engine uses (for example Godot's import settings, or a loops JSON file).
#Workflows
#One-click rebuilds as art changes
- Build your package in Pixxizi once, with all your engines ticked.
- When an artist updates a sprite, send the new version to Pixxizi and remove the old copy from the package (a second copy gets a number added to its name).
- Open the Builds tab to see what changed since the last export, then export only what changed; see the Pixxizi guide.
#A Flow pipeline that ends in the engine
- In Flow, start from the Game character or Game level template. Both end in Pixxizi.
- Each step opens its app with the previous result loaded, and the final step builds the engine files.
- See Pixx Flow — Advanced for gates that stop bad art before it's packaged.
#Dialogue scene end to end
- Animate portraits in Pixxara, write the conversation with voice blips and music cues, and send the dialogue to Pixxizi.
- Export: JSON for every engine, Yarn Spinner files for the engine targets, and Ren'Py in Generic.
#Tips and shortcuts
- Ctrl+S in Pixxizi exports engine-ready projects.
- Unity gets untrimmed frames, so the pivot in the .meta is exact.
- GameMaker and Defold get separate frame PNGs because those engines pack atlases themselves.
- Pixxizi runs Pixxoku's art rules on every sprite before export. Art findings are warnings, never blockers.
- Godot's TileMap node imports fine in Godot 4.3 and later, which converts it to TileMapLayer.
- For the exact files inside a .pxasset (gameplay fields, loop points, dialogue script), see Pixx asset files.
#Troubleshooting
- Hitboxes are upside down in Unity or Defold. Use the generated scripts and data as they are; they're already converted to y-up. Don't flip them again.
- The shadow appears in front of the character. Draw the _shadow sprite before (behind) the main sprite, at the same position.
- A level's tiles are shifted by one. Tile numbers count from 1 (0 is empty), which matches Tiled. Make sure your own loader does the same.
- Music doesn't loop. Set loop points in Pixxune, or check that your engine reads the loop settings Pixxizi wrote.
- The engine can't find a font. Keep the .fnt and its PNG together in the same folder; the .fnt refers to the PNG by name.