85 lines
4.3 KiB
Markdown
85 lines
4.3 KiB
Markdown
---
|
|
name: game-animation-frames
|
|
description: >
|
|
Deep guide for game ANIMATION assets: motion cycles, action keyframes,
|
|
effect sequences, and animation sprite sheets — built around a
|
|
video-first pipeline. In this app-builder sandbox, execute via the
|
|
video2dsprite / generate2dsprite skills (magenta + scripts), not ad-hoc
|
|
ffmpeg. Use whenever generating anything that moves: walk/run cycles,
|
|
attacks, idles, FX, flags, fire, animation sheets. Complements
|
|
game-asset-core.
|
|
metadata:
|
|
short-description: "Video-first animation frames that actually cycle"
|
|
user-invocable: false
|
|
---
|
|
|
|
# Animation Frames — video-first
|
|
|
|
The image generator draws poses; the VIDEO generator understands motion —
|
|
leg alternation, arc continuity, cloth and fire dynamics come free because
|
|
video must animate them. So don't ask the image model to imagine
|
|
mid-motion poses: animate the base and harvest real frames.
|
|
|
|
## App-builder execution (read first)
|
|
|
|
This skill is **doctrine** (motion laws, loop QC, when to use video). In the
|
|
app-builder sandbox, **do not** run a freeform `ffmpeg` harvest or invent a
|
|
random keyable `#hex` background.
|
|
|
|
| Step | Do this |
|
|
| --- | --- |
|
|
| Production sprites / fixed grids | **`generate2dsprite`** — solid **`#FF00FF`** magenta sheets + chroma scripts |
|
|
| Denser locomotion from video | **`video2dsprite`** — base still on **`#FF00FF`** → `imagine_image_to_video` → skill scripts (ffmpeg + chroma) |
|
|
| Keyable background | Always **`#FF00FF`** when using either pipeline (required for chroma) |
|
|
| This skill | Loop / flip-test / motion laws below — apply after the pipeline runs |
|
|
|
|
Open `.grok/skills/video2dsprite/SKILL.md` or `.grok/skills/generate2dsprite/SKILL.md`
|
|
and follow their workflows for generation and postprocess. Then apply the
|
|
laws and flip test here before shipping frames into the game.
|
|
|
|
## Default pipeline (intent)
|
|
|
|
1. **Base frame.** Subject in neutral/starting pose, full style words, side /
|
|
game-appropriate view, **solid `#FF00FF` background** (app-builder chroma
|
|
key). game-asset-core defaults apply.
|
|
2. **Animate.** `imagine_image_to_video` from the base: one clear motion, in place,
|
|
static camera ("the knight walks in place, side view, camera locked",
|
|
6s). Keep the shot simple — one subject, one motion. Prefer running this
|
|
through **`video2dsprite`** so harvest + chroma are consistent.
|
|
3. **Harvest + clean.** Use **`video2dsprite`** scripts (not ad-hoc
|
|
`ffmpeg -i … fps=12` alone). Magenta flood-fill / despill lives there;
|
|
do not re-key with a different flat `#hex` unless you leave the magenta
|
|
pipeline entirely.
|
|
4. **Select.** Pick frames that (a) capture the motion's distinct phases and
|
|
(b) LOOP — the sequence's end must flow back into its start. Don't force
|
|
a count: if the motion reads best with 8, 10, or 12 frames, deliver that
|
|
many (more frames = smoother in-engine). For a cycle, select one full
|
|
period using motion landmarks (foot contacts, wing extremes, flame peaks).
|
|
5. **Package.** Deliver frames in play order (zero-padded names) and/or a
|
|
sheet per game-asset-core rules (uniform cells, no dividers) — or the
|
|
transparent strips/grids emitted by **`video2dsprite`** /
|
|
**`generate2dsprite`**. State the intended fps.
|
|
|
|
Fall back to keyframe-by-keyframe `imagine_text_to_image` (still on `#FF00FF` when
|
|
postprocessing with the sprite scripts) only when video fails the motion
|
|
(rare: very stylized poses, single dramatic keyframes) — and then plan
|
|
phases yourself and obey the laws below. Prefer **`generate2dsprite`** for
|
|
crisp production multi-frame grids.
|
|
|
|
## Motion laws (verify against these, whatever the pipeline)
|
|
|
|
- Cycles loop; alternating gaits spend half the period mirrored.
|
|
- Continuity: limbs, props, anatomy, effects move on continuous paths —
|
|
nothing teleports, vanishes, or duplicates between adjacent frames.
|
|
- Physics reads in stills: airborne shows air, anticipation compresses,
|
|
follow-through overshoots; effects stay anchored to their origin unless
|
|
the request moves them.
|
|
- Energy matches the ask: idle/subtle means barely-different frames.
|
|
|
|
## Verify — the flip test
|
|
|
|
View the final frames strictly in order and narrate the motion; check
|
|
loop closure explicitly (last→first). A hedge in your narration is a
|
|
failed frame. The video pipeline usually passes this on the first try —
|
|
that's why it's the default.
|