Write and produce stories told as text message conversations for short vertical video: chat thread arcs with a hook in the first exchange, typing and read timing that builds tension, readable bubble sizing and contrast, a JSON driven renderer, and privacy rules for anything based on real chats. Use when making, scripting, timing, or reviewing a chat story, fake text conversation video, or texting story for TikTok, Instagram Reels, or YouTube Shorts.
./install.sh text-message-story-videoname: text_message_story_video description: Write and produce stories told as text message conversations for short vertical video: chat thread arcs with a hook in the first exchange, typing and read timing that builds tension, readable bubble sizing and contrast, a JSON driven renderer, and privacy rules for anything based on real chats. Use when making, scripting, timing, or reviewing a chat story, fake text conversation video, or texting story for TikTok, Instagram Reels, or YouTube Shorts.
Turn a story into a finished chat thread video a viewer can read at feed speed: a structured arc told in message bubbles, typing and hold timing computed from reading speed, bubbles sized and coloured to stay readable on a phone, and a privacy pass that keeps real people's conversations out of published work. Ships with a working renderer, so the output is a video file and a timed plan, not advice about one.
references/privacy-and-rights.md. Never build a published video from screenshots of a real thread.references/story-arcs.md: stranger danger at 30 to 60 seconds, the slow reveal at 60 to 120, group chat pile-up for comedy, and the repair at 90 to 180 seconds for drama. The pattern sets the message count before a word is written.contact_name chosen as a story decision, messages with from, text, and a beat label, plus the fictional, based_on_real, consent_confirmed, and sponsored flags. Use typing_s, hold_mult, pause_after_s, gap_after_s, and read_receipt on individual messages to place the tension beats.python3 scripts/chat_video.py plan assets/example-short.json on the new story file. Check the hook lands at the start, the twist and payoff holds are the longest on the sheet, and the total runtime fits the pattern. Fix timing in the JSON, not in the render.python3 scripts/chat_video.py validate <story.json>. It checks bubble length, phone number and email patterns, the consent flags, the sponsored disclosure rule, bubble contrast against WCAG AA, and the YouTube Shorts duration ceiling. Errors stop the render unless forced, and forcing never ships.python3 scripts/chat_video.py render <story.json> --out <file>.mp4, with --audio <track> to mux licensed music instead of the silent track. Verify the output with ffprobe for 1080 x 1920 and the planned duration, extract one frame at a twist bubble, and read the frame at full size before posting.Deliver, at minimum:
yuv420p, faststart set, every bubble readable in a spot checked frame, duration inside the target platform ceiling in references/timing-and-readability.md.references/timing-and-readability.md. A bubble that needs more than 7 seconds gets split. Typing time varies on purpose: uniform typing reads as no typing.references/privacy-and-rights.md, with an honest fiction or dramatisation label. Extra care classes there, including minors and people in crisis, are hard stops, not judgement calls.publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e
No ratings yet — be the first to rate it.