| name | Make Crazy Look |
| description | Silent 5-10s extreme close-up reaction clip with a static caption overlay ("the crazy look"). One recurring character opens on an exaggerated look and keeps morphing through randomized silent beats — no speech, no subtitles, ambient room tone only. A SERIES MUST START WITH A CHARACTER (create_character first; the saved sheet + pinned seed keeps the SAME face on every clip). Volume workflow: same caption + same character, N calls, N different performances. |
| allowed-tools | ["mcp__agent-media__create_crazy_look","mcp__agent-media__create_character"] |
| x-skill-slug | make-crazy-look |
| x-skill-version | 1.0.0 |
| x-mcp-tool | mcp__agent-media__create_crazy_look |
Make Crazy Look
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 \n for 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) or custom:<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.
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.