{"product":"texting.video","summary":"Turn a JSON \"draft\" (a text-message conversation + theme + settings) into an animated fake-texting video for TikTok, Reels, and Shorts.","themes":[{"id":"imessage","label":"Blue Bubble","supportsKeyboard":true},{"id":"sms","label":"Green Bubble","supportsKeyboard":true},{"id":"android","label":"Android","supportsKeyboard":true},{"id":"teams","label":"Corporate Chat","supportsKeyboard":false},{"id":"whatsapp","label":"Green Chat","supportsKeyboard":true},{"id":"discord","label":"Gamer Chat","supportsKeyboard":false},{"id":"slack","label":"Work Chat","supportsKeyboard":false},{"id":"terminal","label":"Terminal","supportsKeyboard":false},{"id":"jrpg","label":"JRPG","supportsKeyboard":false},{"id":"true_crime","label":"True Crime Terminal","supportsKeyboard":false}],"animationStyles":["typewriter","realistic","human"],"videoFormats":["9:16","1:1","16:9"],"schema":{"$schema":"http://json-schema.org/draft-07/schema#","title":"TextingVideoDraft","type":"object","required":["dialogue"],"additionalProperties":false,"properties":{"themeId":{"type":"string","enum":["imessage","sms","android","teams","whatsapp","discord","slack","terminal","jrpg","true_crime"],"default":"imessage"},"dialogue":{"type":"array","minItems":1,"maxItems":500,"description":"Ordered conversation. The FIRST unique speaker renders on the left (received); the SECOND unique speaker renders on the right (you/sent). Interleave event objects for narration, time gaps, and group events.","items":{"oneOf":[{"type":"object","required":["speaker","text"],"properties":{"speaker":{"type":"string","description":"Sender name. Use a stable name like \"Me\" for the self/right side."},"text":{"type":"string","maxLength":4000},"reactions":{"type":"array","items":{"type":"string"},"description":"Emoji reactions shown on this bubble, e.g. [\"❤️\"], [\"😂\"]."}},"additionalProperties":true},{"type":"object","required":["type","text"],"properties":{"type":{"const":"narrator"},"text":{"type":"string"}}},{"type":"object","required":["type","label"],"properties":{"type":{"const":"time-gap"},"label":{"type":"string"}}},{"type":"object","required":["type","name"],"properties":{"type":{"const":"member-added"},"name":{"type":"string"}}}]}},"settings":{"type":"object","description":"Animation and framing options. All optional; sensible defaults are applied.","additionalProperties":true,"properties":{"animationStyle":{"enum":["typewriter","realistic","human"],"default":"realistic","description":"'human' types each of your messages on an on-screen keyboard (chat themes only); 'realistic' uses typing indicators; 'typewriter' reveals character-by-character."},"humanTypingIntensity":{"enum":["subtle","natural","chaotic"],"default":"natural","description":"How error-prone the human typist is (human mode only)."},"showKeyboard":{"type":"boolean","default":true,"description":"Show the on-screen keyboard in human mode."},"contactName":{"type":"string","description":"Name shown in the chat header (1:1 chats)."},"channelName":{"type":"string","description":"Channel/room name (group chats like Slack/Discord)."},"groupChat":{"type":"boolean","default":false},"videoFormat":{"enum":["9:16","1:1","16:9"],"default":"9:16"},"reactionDelay":{"type":"integer","description":"ms between a message landing and its reaction appearing.","default":1000},"pauseDuration":{"type":"integer","description":"ms pause between turns."}}}}},"example":{"themeId":"imessage","settings":{"animationStyle":"human","humanTypingIntensity":"natural","showKeyboard":true,"contactName":"Alex"},"dialogue":[{"speaker":"Alex","text":"ok I just sent you the address"},{"speaker":"Me","text":"wait this says it's a 3 hour drive??"},{"speaker":"Alex","text":"yeah but the views are insane trust me","reactions":["😍"]},{"speaker":"Me","text":"you said that about the last hike"},{"speaker":"Alex","text":"I personally spoke to every bee in the area","reactions":["😂"]},{"speaker":"Me","text":"fine but you're buying coffee"}]},"systemPrompt":"You write scripts for texting.video, which turns a JSON \"draft\" into an animated fake-text-message video for TikTok/Reels/Shorts.\n\nOutput ONLY a JSON object of the form { \"themeId\": string, \"dialogue\": [...], \"settings\": {...} }. No prose, no markdown fences.\n\nRules:\n- themeId is one of: imessage, sms, android, teams, whatsapp, discord, slack, terminal, jrpg, true_crime. Default \"imessage\".\n- dialogue is ordered. The FIRST unique speaker appears on the left (the other person); the SECOND unique speaker appears on the right (the protagonist). Use \"Me\" for that side.\n- Keep messages short and punchy, like real texting. 4-12 messages is ideal.\n- Add emoji reactions with \"reactions\": [\"😂\"] on the bubble being reacted to (sparingly).\n- For narration use { \"type\": \"narrator\", \"text\": \"...\" }; for a jump in time { \"type\": \"time-gap\", \"label\": \"Three years later\" }.\n- To show messages being physically typed on an on-screen keyboard, set settings.animationStyle:\"human\" and pick a keyboard theme (imessage, sms, or android). Otherwise use \"realistic\".\n- Put the other person's name in settings.contactName (1:1) or settings.channelName (group).\n\nExample:\n{\n  \"themeId\": \"imessage\",\n  \"settings\": {\n    \"animationStyle\": \"human\",\n    \"humanTypingIntensity\": \"natural\",\n    \"showKeyboard\": true,\n    \"contactName\": \"Alex\"\n  },\n  \"dialogue\": [\n    {\n      \"speaker\": \"Alex\",\n      \"text\": \"ok I just sent you the address\"\n    },\n    {\n      \"speaker\": \"Me\",\n      \"text\": \"wait this says it's a 3 hour drive??\"\n    },\n    {\n      \"speaker\": \"Alex\",\n      \"text\": \"yeah but the views are insane trust me\",\n      \"reactions\": [\n        \"😍\"\n      ]\n    },\n    {\n      \"speaker\": \"Me\",\n      \"text\": \"you said that about the last hike\"\n    },\n    {\n      \"speaker\": \"Alex\",\n      \"text\": \"I personally spoke to every bee in the area\",\n      \"reactions\": [\n        \"😂\"\n      ]\n    },\n    {\n      \"speaker\": \"Me\",\n      \"text\": \"fine but you're buying coffee\"\n    }\n  ]\n}","onramps":{"createLink":{"method":"POST","url":"https://typereel.pages.dev/api/drafts","body":"{ dialogue, themeId, settings }","returns":"{ id, url } — open url to render/export in the editor"},"mcp":{"url":"https://typereel.pages.dev/mcp","transport":"streamable-http","tools":["create_texting_video","list_themes","get_spec"]}}}