Particles for Spine

Spine has no particle system. Here is what people actually do about it.

If you animate in Spine and you need fire, smoke, sparks, dust or magic, you have already found the wall: there is no emitter, no particle module, and no plan for one. It has been asked for on the official forum for years.

This page explains the three routes people use, what each one costs you, and how to do the JSON route with a free tool. Nothing here needs an account.

The three routes

1. Image sequence on an attachment

Render the effect as a PNG sequence, bring the frames in as a sequence attachment, and play it back. Simple and predictable. The cost is that every frame is a full image, so the atlas grows quickly, and the effect can no longer be recoloured or retimed without re-rendering it.

2. Import it as a skeleton — JSON and atlas

Every particle becomes a bone and a slot, animated on the timeline, sharing one small atlas of sprite images. It stays editable in Spine — you can retime it, tint slots, parent it to a hand or a weapon, and mix it with your own animations. The cost is bone and slot count, so it suits shorter, sharper effects rather than a thousand-particle blizzard.

3. Spawn it in the engine at runtime

Put an event key in the Spine animation and let Unity, Godot or your own code fire its own particle system when it passes. Cheapest at runtime and infinitely tweakable, but the effect no longer lives with the animation — the animator cannot see it in Spine, and it has to be rebuilt for every engine you ship on.

Doing the JSON route with Ottomancer

Ottomancer is a free 2D particle editor that runs in a browser tab. It was built by an animator for exactly this problem, and its Spine export is the reason it exists.

  1. Open the editor. No install, no account, nothing uploaded — your work stays on your machine.
  2. Start from an effect or from scratch. There are 119 ready-made effects across nine categories; every one of them is an ordinary emitter after you apply it, so you can pull it apart and make it yours.
  3. Bring your own art if you want. Import a PNG and use it as a sprite, or set a tile grid and play it back as a flipbook sheet.
  4. Set the length and the loop. The timeline is a proper dope sheet with a frame ruler, a draggable loop region and a curve editor.
  5. Export → Spine (json + atlas + png). You get a skeleton JSON, an atlas and its page image. Import that in Spine next to your own skeleton.

If you would rather have frames, the same project exports a PNG sequence — and MP4, WebM, animated GIF, animated WebP and SVG, for when the effect is going in a trailer or a store page instead of a game.

Working on your own skeleton, not beside it

The route above builds the effect on its own and hands you a second skeleton to place next to yours. There is another way round, and it is the one people usually want once they have a rig: bring your skeleton into Ottomancer, hang the emitters off its own bones, and export the whole thing back.

  1. Import Spine — give it your skeleton JSON, its atlas and the page image. The bones and slots come in as a layer tree you can see and select.
  2. Add an emitter under the bone you want it to follow. A torch bone, a sword tip, a wheel. It inherits that bone’s movement, so the sparks go where the hand goes without a single keyframe.
  3. Export Spine again. Your original bones come back out with the effect baked in beside them.

Measured on a real 135-bone skeleton: it imports as 134 layers, an emitter parented to one of them emits correctly, and the bake returns 180 bones and 64 particle slots with the original skeleton intact. Two things to know — give the emitter a sprite before exporting, or it bakes to nothing to draw; and meshes, clipping and path attachments are not imported, so a rig that leans on those comes in incomplete and says so.

Honest limits

▶ Open the editor Free, in your browser, nothing to install. 💬 Something missing? Bug reports and requests, no account needed.