About layer-vfx
layer-vfx is a skill for producing game visual effects as short clips and flipbooks. It guides effect isolation, backgrounds, timing, frame extraction and sprite-sheet packing for game-art workflows.
Key features
- 01Plan isolated, centred effects
- 02Choose backgrounds for blend type
- 03Structure motion into timed phases
- 04Extract frames for flipbooks
- 05Pack aligned sprite sheets
Use cases
- 01Create a fire or magic impact flipbook
- 02Prepare smoke frames with alpha
- 03Build a loopable aura or portal
- 04Keep extracted frames aligned
MCP support
This skill describes using Layer tools such as `text_to_image`, `image_to_video`, and `pack_sprite_sheet`; it does not describe an MCP connection.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ layerai/ skills --skill layer-vfxAfter installing, type/layer-vfxin Claude Code to confirm it loaded.
Details
From the project READMELayer VFX
Overview
An effect is not an illustration of magic. It is a short, isolated piece of motion that an engine layers over gameplay, so it has to arrive with nothing around it, on a background the engine can remove, timed so a player reads it in a fraction of a second. Most failed effects fail on one of those three, not on how they look.
The route is: design the effect as a still, animate the still into a short clip, then pull frames
from the clip into a flipbook. Generation mechanics and the spend gate are in the layer skill;
motion prompting is in layer-video.
pack_sprite_sheet is named outright below because it is Layer's deterministic packing utility, a
tool rather than a model, with no alternative to discover.
If a sibling skill named here is missing from your available skills, ask the user to install it
(npx skills add layerai/skills --skill <name>); unattended, proceed from tool schemas and flag the
gap.
Quick reference
| Need | Do this |
|---|---|
| Fire, magic, light, sparks | Solid black background, for additive blending |
| Smoke, dust, debris, ink | Flat key colour, then remove it per frame; these need real alpha |
| The look | text_to_image still, one effect, centred, nothing else in frame |
| The motion | image_to_video with the still as first_frame |
| A looping effect | loop capability, the same still as first_frame and last_frame |
| A locked camera | video_effects: [{type: "STATIC"}] where the model exposes it, and say it in the prompt |
| Frames out of the clip | The clip's file_id in an image slot with video_frame_seconds, one run per frame |
| The flipbook | pack_sprite_sheet with the frames' file_ids in play order |
Background decides the blend
Engines composite effects one of two ways, and the background has to match.
- Additive (fire, lightning, glows, magic trails, sparks): the engine adds the effect's colour to the scene, so pure black vanishes. Ask for "pure black background, no floor, no environment, no ground glow". Black here is a feature, not a placeholder, and removing it would destroy the glow falloff.
- Alpha-blended (smoke, dust, rubble, water splashes, dark magic): these darken or occlude, so
black cannot stand in for transparency. Generate on one flat key colour that does not appear in
the effect, then remove it frame by frame with a
background_removalmodel. Wispy edges suffer, so prefer dense, defined shapes for these effects.
Do not promise transparent video. Nothing in a video run's schema delivers an alpha channel, so transparency is made on the extracted frames, not on the clip.
Isolate and centre
One effect per run, centred, fully inside the frame with margin on every side. A fireball that leaves the frame cannot be repositioned in an engine, and a second effect in frame has to be cut out by hand. Say it: "a single effect, centred, entirely within frame, nothing else in the image, no characters, no scenery".
Effects are seen small and fast: one bright core, one readable shape, one colour that says what the effect does.
Timing reads
A one-shot effect has three phases, and the prompt should name all of them with rough timings: anticipation (a gather or charge), burst (the peak, fast), dissipation (falloff to nothing). An effect that starts at full intensity reads as a glitch, and one that never fully fades leaves a ghost on its last frame. End one-shots on empty black.
Loops (auras, portals, torch flames) have no beginning or end: cyclical motion only, and the loop
capability. See layer-video for why prompting "looping" alone produces a clip that jumps at the
seam.
Frames out of the clip
Any image slot (init_image, reference_image, first_frame, last_frame) accepts a video
file_id and takes one frame of it, chosen by video_frame (first, middle, last) or by
video_frame_seconds, which overrides it. Space the timestamps evenly across the clip: eight to
twelve frames is a typical flipbook. Each frame is one run of whatever model receives it, so give the
frame a run that does useful work anyway: background removal for alpha-blended effects, an upscale
when the clip resolution is too low. Use batch_size: 1, since the default is four.
Some frame-extraction models take an init_video and a frame_extraction_location instead;
get_base_model says which inputs a model requires.
Frames from one locked-camera clip are already registered, so pack_sprite_sheet keeps them aligned:
it centres each frame at its own scale in one cell size. Do not trim frames individually first, or
the effect will jitter.
Worked example
"A fireball impact for our top-down RPG, as an 8-frame flipbook."
list_base_modelswithfilter.use_case: "text_to_image", first result. Prompt: "Game VFX, a single fireball impact at the moment of burst, orange-white core, licking flames, flying embers, centred, entirely within frame, pure black background, no ground, no scenery, top-down view." Approve one.list_base_modelswithfilter.use_case: "image_to_video"andfilter.capabilities: {fixed_duration: true};get_base_modelon the first result to see which frame slots andvideo_effectsit takes.- Motion prompt with phases: "A small ember gathers for a quarter second, bursts outward fast, then
flames and embers dissipate to nothing by the end. Locked-off camera, black background throughout."
Pass the approved still's
file_idasfirst_frame,video_effects: [{type: "STATIC"}]if supported, a shortduration_seconds. - Price the job as a whole: the video plus eight frame runs, each estimated as the run it will be. Over 20 CUs, ask and wait for an explicit yes.
- Execute, poll at
poll_interval_seconds. Pull eight frames at evenly spacedvideo_frame_seconds, each into an upscaling run atbatch_size: 1. Keep the black. pack_sprite_sheetwithfile_idsset to the eight frames in play order andcolumns: 4.
Common mistakes
- Removing the black background from an additive effect, which deletes the glow.
- Using black as the background for smoke or dust, which then cannot occlude anything.
- A scene, floor, or character in the frame around the effect.
- An effect that clips the frame edge.
- A one-shot with no anticipation, or one that never fully fades.
- Promising a transparent video.
- Trimming frames one by one before packing, so the flipbook jitters.
- Leaving
batch_sizeat four on per-frame runs and paying four times.