Story to Script Rewriter - Viral Short-Form Scripts
Pricing
from $20.00 / 1,000 script rewrittens
Story to Script Rewriter - Viral Short-Form Scripts
Feed it a Reddit post, an article or a raw story and get back a script engineered to hold attention: a scroll-stopping hook, tight narration in your tone and target length, a title and alternate hooks. $0.02 per dataset row, flat - one row per source, whatever comes back on it.
Pricing
from $20.00 / 1,000 script rewrittens
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
Story-to-Script Rewriter
Turns a story, article, or Reddit post into a short-form video script: a hook built to land in the first 3 seconds, narration written in the tone and length you ask for, plus a suggested title and a couple of alternate hooks. Built for people churning out TikTok, Reels, Shorts, and faceless-channel content who don't want to rewrite every source by hand.
How it works
Each source goes through one chat completion that returns structured JSON. The prompt forces a curiosity-gap hook (no greetings), tightens the narration toward your target length (it budgets roughly 150 spoken words per minute), and strips out stage directions, hashtags, and emoji so the text is ready to read aloud.
Input
You can pass a single text, an array of sources, or both. Sources can be plain strings or post objects, in which case it reads selftext, scriptText, body, text, or title in that order, so you can pipe a Reddit scraper's output straight in.
| Field | Required | Notes |
|---|---|---|
text | no* | The story/article/post to rewrite. |
sources | no* | Array of strings or post objects. Batched, one script per item. |
tone | no | dramatic (default), casual, funny, emotional, educational, hype. |
platform | no | tiktok (default), youtube shorts, instagram reels, youtube. Tunes pacing and hook style. |
targetSeconds | no | Approximate spoken length to aim for. Default 45. |
pov | no | keep (default), first, or third person. |
language | no | Output language. Default English. |
openaiApiKey | yes (at runtime) | Your OpenAI key. Stored as a secret. |
model | no | Chat model. Default gpt-4o-mini. |
baseUrl | no | OpenAI-compatible base URL if you're not using OpenAI directly. |
*No field is marked required in the schema. Provide either text or sources plus an OpenAI key for real output. Run it without a key and you get clearly labelled sample rows instead — one per source — so you can see the output shape first. Those rows are billed like real ones (see Pricing).
Output
One dataset record per source. The fields that matter are title, hook, script (the full narration, hook included), and altHooks (two alternates). Each record also carries wordCount and estSeconds so you can check the length came out close to your target, plus ok and, on failure, an error string.
Example
{"text": "My neighbor kept parking in my spot. I asked nicely three times. So I had his car towed, and it turned out the car wasn't even his.","tone": "dramatic","platform": "tiktok","targetSeconds": 40,"pov": "first","language": "English","openaiApiKey": "sk-..."}
Pricing
$0.02 per dataset row, plus $0.0000125 each time a run starts. Flat rate — no volume tiers, no plan gates, no subscription.
The charge is per row written to the dataset, and the actor writes one row per source you give it — whatever came back on that row. So a batch of 20 sources costs $0.40 plus the start fee, and it costs $0.40 whether all 20 rewrites land or two of them come back ok: false because the source failed to parse or the model refused it. Same for the keyless demo: it writes one labelled sample row per source, each charged $0.02, so previewing with one source costs $0.02 rather than nothing.
The run-start fee is charged once per gigabyte of run memory, so at this actor's default 4 GB it comes to $0.00005 a run. You bring your own OpenAI key, so model usage is billed to your OpenAI account separately.
Notes
A few sources will fail to parse or get refused by the model. Those are written to the dataset with ok: false and an error rather than stopping the whole run, so check that flag before you trust a batch — and note they occupy a row, so they are billed like a successful rewrite.


