Silent vertical reaction clip: one character, tight framing, an exaggerated expression that keeps MOVING (brow pops, mouth drops, eye darts, head tilts), and the hook text burned as a static caption. No speech, no lip-sync, no music — creators layer trending sounds in their editor. This is the high-volume TikTok creative-testing format: same hook, many looks, one recurring face.
The one rule: a series begins with a character sheet
Run create_character ONCE (description, or description + photo). The saved sheet + pinned seed is what keeps the SAME face across every clip. Passing an inline description to the video call invents a NEW person each time — fine for a one-off test, wrong for a series.
The look is the identity — and it starts at frame one
Two guarantees you can rely on: (1) the clip OPENS at peak expression — at 0.0 seconds the face is already fully committed, never a neutral face easing into it; (2) a saved character keeps the SAME signature look on every clip, derived from its character_id, so a series reads as one recognisable person. Pass look explicitly only when you deliberately want to break that consistency for one clip.
How to call it
Preferred path: MCP tools mcp__agent-media__create_character then mcp__agent-media__create_crazy_look. Schemas are auto-published via tools/list — trust the server.
Fallback path: REST.
POST https://api.agent-media.ai/v2/crazy-look
Authorization: Bearer $AGENT_MEDIA_API_KEY
Content-Type: application/json
{
"character_id": "char_XXXXXXXXXX",
"caption": "WAIT there's an app that LOCKS your phone until you PRAY???",
"duration": 5
}
Poll GET https://api.agent-media.ai/v1/videos/<job_id> until completed → video_url.
Inputs that matter
caption(required) — the hook, burned over the full clip. Deliberate typos read as authentic. Use\nfor forced line breaks.look(optional) — preset (bug-eyed-shock, jaw-drop, unhinged-grin, deadpan-stare, eyes-rolled-up, suspicious-squint, crying-smile, lean-in-conspiracy, guilty-pout, slow-realization, sweet-smile, giggle-fit) orcustom:<freetext>. OMIT to sample per call.framing(optional) — full-face | eyes-only | mouth-only | nose-up | medium. OMIT to rotate crop levels automatically.chaos(optional, 0-1, default 0.6) — how wildly the expression evolves: 0 = one held look, 1 = fast unhinged morphing.duration— 5 (default) or 10 seconds.engine—seedance-2.0(default) orseedance-2.5. 2.5 is the newer, sharper model and is a premium tier; only pass it when the user explicitly asks for the best possible quality.
The volume workflow
Same character_id + same caption, submitted N times → N different performances (look, framing and beat sequence are re-sampled per job). Mix in sweet-smile / giggle-fit clips as warm contrast beats between the shocked faces so the feed never reads as one note.
House rules
- Do NOT add subtitles on top — the caption IS the text layer.
- See reference/auth.md for first-time install and
agent-media login.
Source of truth
Auto-generated by scripts/generate-public-skill.ts; the generator contract lives in packages/schema/src/v2/generators.ts (V2_GENERATORS.crazy_look). Do not hand-edit; CI rejects drift.