Screenshot a txtreel conversation
chat_screenshotRender a single frame of a txtreel conversation (script or messages) to a PNG and return it as an image. Defaults to the last frame — pass "frame" to capture an earlier moment (30 fps).
Returns the PNG as image content, plus a text line with the PNG's URL (expires after 24 hours).
Conversation script format (one event per line):
them: hey, you up? me: yeah why [pause 1.5] wait 1.5 s --- Today 9:41 PM date/time separator me: [photo URL] caption a photo (URL, local file path, or an uploaded photo's number) [them reacts ❤️] reaction on my last message [read] they read my messages === everything above is already on screen at the start === scroll 3 same, but open on the oldest message and skim down in 3 s
comment
"Name: text" also means "them" when Name matches contact.name (e.g. contact.name "Sam" lets you write "Sam: omg" instead of "them: omg"). A literal "\n" inside a message becomes a line break. Lines starting with # are comments.
Guidance: one short message per line, like real texting — split up what a real person would send as separate texts rather than one long paragraph. A typical reel is 8-16 messages and 15-30 seconds. Use "[pause N]" to hold a beat before a reply lands (dramatic timing). Use "===" to start the video with everything above it already on screen, e.g. for a "catch up on this conversation" reel. Photos: "me: [photo https://example.com/image.jpg] optional caption" (https URLs only; local file paths are not available). Use "=== scroll 3" instead to open on the oldest message of a longer history and skim down to the live part in 3 s — too fast to read, so viewers pause and rewind (good for comments: hide a detail in the history). Leave keyboard at its default (true) so the newest messages stay above where the Reels caption/UI usually sits.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| frame | No | Frame index to capture, at 30 fps (e.g. 30 = one second in). Omit to capture the final frame of the conversation. | |
| speed | No | Pacing multiplier; 2 = twice as fast, 0.5 = half speed. Default: 1. | |
| theme | No | Color theme, "light" or "dark". Default: light. | |
| script | No | Conversation as a plain-text script. Use this OR messages, not both. Conversation script format (one event per line): them: hey, you up? me: yeah why [pause 1.5] wait 1.5 s --- Today 9:41 PM date/time separator me: [photo URL] caption a photo (URL, local file path, or an uploaded photo's number) [them reacts ❤️] reaction on my last message [read] they read my messages === everything above is already on screen at the start === scroll 3 same, but open on the oldest message and skim down in 3 s # comment "Name: text" also means "them" when Name matches contact.name (e.g. contact.name "Sam" lets you write "Sam: omg" instead of "them: omg"). A literal "\n" inside a message becomes a line break. Lines starting with # are comments. Guidance: one short message per line, like real texting — split up what a real person would send as separate texts rather than one long paragraph. A typical reel is 8-16 messages and 15-30 seconds. Use "[pause N]" to hold a beat before a reply lands (dramatic timing). Use "===" to start the video with everything above it already on screen, e.g. for a "catch up on this conversation" reel. Photos: "me: [photo https://example.com/image.jpg] optional caption" (https URLs only; local file paths are not available). Use "=== scroll 3" instead to open on the oldest message of a longer history and skim down to the live part in 3 s — too fast to read, so viewers pause and rewind (good for comments: hide a detail in the history). Leave keyboard at its default (true) so the newest messages stay above where the Reels caption/UI usually sits. | |
| sounds | No | Real UI sounds: iOS key clicks while typing, the app's send and receive sounds. Default: true. | |
| contact | No | Contact header info. | |
| endHold | No | Seconds to hold on the final frame before the video ends. Default: 2. | |
| autoRead | No | Mark "me" messages as read as soon as the other person starts typing. Default: true. | |
| keyboard | No | Show the iOS keyboard, which keeps the latest messages above the Reels caption area. Default: true. | |
| messages | No | Conversation as an array of event objects instead of a script string (use this OR script, not both). Passed through to the txtreel API as-is; each item is one of: {from:"me"|"them", text, delay?, typing?, hold?, time?, instant?} (type "message" is the default and can be omitted), {type:"pause", seconds}, {type:"timestamp", text, instant?}, {type:"read", time?}, {type:"react", from:"me"|"them", emoji}. | |
| platform | No | Chat app to render: "imessage", "whatsapp", or "instagram". Default: imessage. | |
| startTime | No | Clock used for messages, read receipts, and WhatsApp bubble times, e.g. "9:41 PM". Default: 9:41 PM. | |
| statusBar | No | Phone status bar shown at the top of the frame. | |
| composerTyping | No | Type "me" messages into the input bar before sending them. Default: true. |