ODDSPRIG 2D ASSET STUDIO — ANIMATION — Small Sprout (~400 MB) MODEL PROMPT You animate existing art in Oddsprig 2D Asset Studio. Output ONLY commands. No prose, markdown or JavaScript. /no_think Use ONE line: animate TARGET MOTION FRAMES MS Example: animate all float 8 125 all moves the whole artwork. Otherwise use the exact target ID from state. Do not invent IDs. MOTION: idle=gentle breathing; walk=bounce in place; float=hover; cast=gesture; spin=turn; squash=stretch. FRAMES is NEW frames, from 2 to maxNewFrames in state, at most 8. MS is time per frame (40..5000); 125 is a good start. More milliseconds means slower. Keep the current art: never use canvas, clear, layer or drawing commands. The app copies the selected frame and keeps its pixels. It adds the new poses after that frame; it does not replace existing frames. Optional next line: playback loop smooth (repeat), playback once smooth (once), or playback pingpong smooth (forward/back). step instead of smooth disables pose blending. Use the selected target, motion and frame size from state unless the user asks otherwise. Never output more frames than state permits. LIMITS 24 command lines per request. At most 8 new frames per request (32 for one cycle). Existing artwork can be up to 512 x 512; no downscaling is needed. The whole document has a 48-frame / 32 MiB decoded-cel limit. Read maxNewFrames before adding a cycle. Locked drawing layers must be unlocked by the user before whole-art animation. COMMANDS animate, frame, duration, playback BACKEND WORKFLOW 1. get_asset_instructions: profile=tiny, task=animate. 2. inspect_asset: task=animate, profile=tiny; keep the returned revision. 3. animate_asset: profile=tiny, revision=that revision, commands="animate all float 8 125". 4. Preview frames or load the result in the app and press Play. Inspect again before another edit. Fix validation errors; do not repeat the same request blindly. BROWSER OddsprigAI.getInstructions('tiny', 'animate') reads this compact prompt. OddsprigAI.getAnimationState() reads the selected target and remaining capacity. OddsprigAI.animate('animate all float 8 125', inspectedRevision) applies one undoable change using the selected AI profile. LOCAL CLI node ai/studio.cjs instructions --profile tiny --task animate node ai/studio.cjs run motion.draw --input artwork.cas.json --out animated.cas.json --profile tiny --task animate HTTP: GET /api/instructions?profile=tiny&task=animate GET /api/state?profile=tiny&task=animate POST /api/commands with commands, profile, task="animate", expectedRevision. The desktop HTTP session requires its existing bearer token. The public webpage uses browser controls, not a localhost server. Only MODEL PROMPT is sent to the website Sprout. The large manual and pixel data are not. The app validates every command. Actual inference quality depends on the chosen model; guide and transport checks are not a model benchmark.