{"skills":[{"slug":"make_subtitles","name":"Make Subtitles","version":"1.0.0","description":"Burn TikTok / Hormozi-style captions onto any vNext video (R2-hosted). Auto-transcribes via Whisper when transcript is omitted. Styles: hormozi (default), tiktok, minimal.","primitive":"subtitles_v2","workflowType":"subtitlesWorkflow","agentFacing":true,"input_schema":{"$ref":"#/definitions/make_subtitles","definitions":{"make_subtitles":{"type":"object","properties":{"video_url":{"type":"string","format":"uri","pattern":"^https:\\/\\/"},"transcript":{"type":"string","minLength":1,"maxLength":5000},"style":{"type":"string","enum":["hormozi","tiktok","minimal"],"default":"hormozi"},"language":{"type":"string","minLength":2,"maxLength":2},"aspect_ratio":{"type":"string","enum":["9:16","1:1","16:9"],"default":"9:16"}},"required":["video_url"],"additionalProperties":false}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"slug":"make_podcast","name":"Make Podcast","version":"1.0.0","description":"Two saved characters recording a podcast in ONE room — the camera cuts to whoever is speaking, and each actor stays in their IDENTICAL seat, desk and mic position across every cut. Provide character_a and character_b (saved char_… ids from list_characters, or https image URLs) and an ordered `script` of A/B dialogue turns (each { speaker: \"A\" | \"B\", line: \"…\" }). The pipeline renders ONE shared two-shot, locks a close-up per actor, animates every turn with native lip-synced Seedance voice (each actor keeps a consistent look AND voice across the whole episode), and hard-cuts the turns together as a 9:16 vertical video. Long turns auto-split into ≤15s takes. Captions are OPT-IN — ask the user first, then set subtitles:true.","primitive":"composed:make_podcast","workflowType":"makePodcastWorkflow","agentFacing":true,"input_schema":{"$ref":"#/definitions/make_podcast","definitions":{"make_podcast":{"type":"object","properties":{"character_a":{"type":"string","minLength":3,"maxLength":400,"description":"First speaker: a saved character_id (char_… from list_characters), OR an https image URL (portrait / character sheet)."},"character_b":{"type":"string","minLength":3,"maxLength":400,"description":"Second speaker: a DIFFERENT saved character_id (char_…) OR an https image URL."},"script":{"type":"array","items":{"type":"object","properties":{"speaker":{"type":"string","enum":["A","B"],"description":"Which of the two actors speaks this turn."},"line":{"type":"string","minLength":1,"maxLength":600,"description":"What they say (native lip-synced voice), at least 5 words. Long lines auto-split into ≤15s takes."}},"required":["speaker","line"],"additionalProperties":false},"minItems":1,"maxItems":24,"description":"Ordered dialogue turns, each { speaker: \"A\" | \"B\", line: \"…\" }. The camera cuts to whoever is speaking."},"room":{"type":"string","minLength":4,"maxLength":240,"description":"The shared studio look (desk, mics, lighting). Defaults to a warm modern podcast studio."},"aspect_ratio":{"type":"string","const":"9:16","default":"9:16"},"subtitles":{"type":"boolean","default":false,"description":"Burn TikTok/Hormozi captions. OPT-IN — ask the user whether they want captions before generating; leave off unless they say yes."},"subtitles_style":{"type":"string","enum":["hormozi","tiktok","minimal"],"default":"hormozi"}},"required":["character_a","character_b","script"],"additionalProperties":false}},"$schema":"http://json-schema.org/draft-07/schema#"}},{"slug":"make_ugc","name":"Agent-Media UGC Video","version":"1.0.0","description":"The ONE tool for UGC video. Give a `script` (any length) and optionally a `person` description, an `image` (photo), or a `character` (saved char_… or sheet URL); it returns the finished vertical video. Short script → one clip; long monologue → full multi-take (never trimmed); pass `broll_url` → narrated b-roll overlay. Captions are OPT-IN — ASK the user if they want them (and which style) before generating; set `captions:true` only if they say yes. You never pick a sub-tool.","primitive":"composed:make_ugc","workflowType":"makeUgcVideoWorkflow","agentFacing":true,"input_schema":{"$ref":"#/definitions/make_ugc","definitions":{"make_ugc":{"type":"object","properties":{"script":{"type":"string","minLength":1,"maxLength":1200,"description":"What the person SAYS (lip-synced) — any length. A one-liner makes one clip; a full monologue makes the full multi-take video automatically, never trimmed. Usually the only field you set."},"scene_action":{"type":"string","minLength":3,"maxLength":400,"description":"A silent action clip (dancing, b-roll, vibes), no dialogue. Use instead of script; needs a `character`."},"person":{"type":"string","minLength":8,"maxLength":400,"description":"Describe the person in words. Omit if you pass image or character."},"image":{"type":"string","description":"A photo of the person — public https URL OR base64 data URL / raw base64. The face is locked to it."},"character":{"type":"string","description":"Reuse a saved character: its character_id (char_…) OR its character_sheet_url from list_characters."},"product_image":{"type":"string","description":"A photo of a PRODUCT to show/hold/wear — public https URL OR base64 data URL / raw base64. Turns the video into a product ad; needs a `character` to hold it."},"name":{"type":"string","maxLength":80,"description":"Name/age/vibe hint, e.g. 'Sophia, 28'."},"broll_url":{"type":"string","format":"uri","pattern":"^https:\\/\\/","description":"A b-roll / gameplay / product video overlaid on the lower half while the person narrates."},"duration":{"type":"number","enum":[5,10,15,20,25,30],"description":"Leave blank — length is inferred from the script. Set only to force a short clip."},"captions":{"type":"boolean","description":"Burn in TikTok/Hormozi captions. OFF unless set true — ASK the user whether they want captions (and which caption_style) before generating; never add captions unprompted."},"caption_style":{"type":"string","enum":["hormozi","tiktok","minimal"],"default":"hormozi"},"look":{"type":"string","enum":["natural","commercial","raw_iphone"],"default":"natural"},"aspect_ratio":{"type":"string","enum":["9:16","1:1"],"default":"9:16"},"music":{"anyOf":[{"type":"boolean"},{"type":"string","maxLength":120}]}},"additionalProperties":false}},"$schema":"http://json-schema.org/draft-07/schema#"}}]}