{"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 · Classic","supportsKeyboard":true},{"id":"imessage_current","label":"Blue Bubble · Current","supportsKeyboard":true},{"id":"sms","label":"Green Bubble · Classic","supportsKeyboard":true},{"id":"sms_current","label":"Green Bubble · Current","supportsKeyboard":true},{"id":"android","label":"Google Messages","supportsKeyboard":true},{"id":"teams","label":"Corporate Chat","supportsKeyboard":false},{"id":"whatsapp","label":"Green Chat · Classic","supportsKeyboard":true},{"id":"whatsapp_current","label":"Green Chat · Current","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","4:5","3:4","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","imessage_current","sms","sms_current","android","teams","whatsapp","whatsapp_current","discord","slack","terminal","jrpg","true_crime"],"default":"imessage_current"},"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","4:5","3:4","1:1","16:9"],"default":"9:16"},"viewportMode":{"enum":["auto","liveEdge","conversationStart"],"default":"auto","description":"Authentic theme default, a composer-pinned live chat, or a channel/new-chat start."},"clockTime":{"type":"string","default":"9:41 AM","description":"Fixed phone clock or starting time for story-follow mode."},"deviceStatus":{"type":"object","description":"Creator Pro phone status-bar controls. Applied only to chat themes.","additionalProperties":false,"properties":{"timeMode":{"enum":["fixed","story"],"default":"fixed","description":"'story' follows visible message, read-receipt, and time-gap timestamps."},"batteryLevel":{"type":"integer","minimum":1,"maximum":100,"default":82},"charging":{"type":"boolean","default":false},"lowPower":{"type":"boolean","default":false},"showBatteryPercent":{"type":"boolean","default":false},"connection":{"enum":["wifi","5g","lte","offline","airplane"],"default":"wifi"},"signalStrength":{"type":"integer","minimum":0,"maximum":4,"default":4}}},"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_current","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, imessage_current, sms, sms_current, android, teams, whatsapp, whatsapp_current, discord, slack, terminal, jrpg, true_crime. Default \"imessage_current\".\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_current, sms_current, imessage, sms, whatsapp_current, whatsapp, or android). Otherwise use \"realistic\".\n- Put the other person's name in settings.contactName (1:1) or settings.channelName (group).\n- Set settings.videoFormat to prefill the aspect ratio: \"9:16\" (default vertical), \"4:5\", \"3:4\", \"1:1\", or \"16:9\".\n- settings.deviceStatus customizes the phone clock, battery, charging, and connection icons.\n- The create tool also returns autoExportUrl, a link that renders the MP4 as soon as it opens and asks for one click to save — offer it when the user just wants the finished file.\n\nExample:\n{\n  \"themeId\": \"imessage_current\",\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://texting.video/api/drafts","body":"{ dialogue, themeId, settings }","returns":"{ id, url } — open url to render/export in the editor"},"mcp":{"url":"https://texting.video/mcp","transport":"streamable-http","tools":["create_texting_video","list_themes","get_spec"]}}}