Story to Script Rewriter - Viral Short-Form Scripts
Pricing
from $19.40 / 1,000 script rewrittens
Story to Script Rewriter - Viral Short-Form Scripts
Rewrite an article or any story into a short-form video script. Each row holds a hook, the narration, a title, two spare hooks, the word count and seconds. Set the tone, platform, point of view, language and length. Runs on your own OpenAI key. $20.00 per 1,000 scripts ($0.02 each).
Pricing
from $19.40 / 1,000 script rewrittens
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Rewrite an article or any story into a short-form video script: paste the text and get back a script written to be read out loud, with a hook that opens it, the narration itself, a title, two alternate hooks, the word count and roughly how many seconds it runs. You choose the tone, the platform, the point of view, the language and the target length.
It runs on your own OpenAI key, which you paste into the input. Without one the run still finishes, but it writes a clearly labelled canned sample instead of a real rewrite, so you can see the shape of the output before committing anything.
| Input | A story, article or post. One, or a batch |
| Output | One row per source: the script, its hook, two spare hooks, a title and the length in seconds |
| Ceiling | Each source is read up to 8,000 characters |
| Account needed | Your own OpenAI key for real output |
| Price | $20.00 per 1,000 scripts, so 2 cents a script on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 250. OpenAI bills your key separately |
🔍 What Story to Script Rewriter does
Reading well and holding a viewer are different jobs. A Reddit post can be a great read and still open with three sentences of setup that nobody watches past. This rewrites the same story so the turn lands in the first line and the rest earns its seconds.
Each source becomes one model call and one row. tone picks the voice: dramatic, casual,
funny, emotional, educational or hype. platform shifts the pacing and the hook style for
tiktok, youtube shorts, instagram reels or youtube. targetSeconds sets the length, worked
as roughly 150 spoken words a minute. pov keeps the original voice or moves it to first or third
person. language writes the output in whatever you name.
sources takes a batch: plain strings, or objects, in which case it reads selftext, then
scriptText, then body, then text, then title. That last part matters because it means a
scraper's rows go straight in with no reshaping.
📋 What data you get from each script
| What you get | Field |
|---|---|
| The whole narration, hook included, ready to voice | script |
| The opening line on its own | hook |
| Two more openings for the same story | altHooks |
| A title for the piece | title |
| The real length, in words and in seconds at 150 words a minute | wordCount, estSeconds |
| The first 2,000 characters of what you sent | source |
| The tone and platform it was written for | tone, platform |
▶️ How to rewrite a story into a short-form script
- Open Story to Script Rewriter and click Try for free.
- Paste your key into OpenAI API key (BYO).
- Put your story into Text / story, or a batch into Sources (batch).
- Set the tone, platform and target length, then click Start.
- Read the dataset or export it as JSON, CSV or Excel.
Run it once with no key and look at SAMPLE_AND_NOTICES in the key-value store to see the output
shape for free.
💰 How much does it cost to rewrite a story into a script?
$0.02 per script on the Free plan. Paid plans pay a little less: $0.0198 on Starter, $0.0196 on Scale and $0.0194 on Business. On the free plan, the $5 Apify gives you each month covers about 250 scripts.
You pay per script row that reaches the dataset. Keyless samples and sources that failed go to the key-value store instead and are not charged as scripts. Your OpenAI usage is billed by OpenAI on your own key, separately from this.
📥 What you give it
{"text": "My neighbor kept parking in my spot. I asked nicely three times.","tone": "dramatic","platform": "tiktok","targetSeconds": 45,"openaiApiKey": "sk-..."}
| Field | Default | What it is |
|---|---|---|
text | none | One story. The Console prefills an example, but that is a prefill, so an API call has to send its own. |
sources | none | A batch. Strings, or objects read in the order above. Added before text, so you can use both. |
tone | dramatic | dramatic, casual, funny, emotional, educational or hype. |
platform | tiktok | tiktok, youtube shorts, instagram reels or youtube. |
targetSeconds | 45 | Aimed at, not enforced. It has no floor or ceiling, so a silly number gets a silly script. |
pov | keep | keep, first or third. |
language | English | Free text. The prompt wording is tuned for English, so other languages vary. |
openaiApiKey | none | Your key. Secret field, never written to the log. Without it you get samples. |
model | gpt-4o-mini | Any chat model your key can reach. |
baseUrl | none | An OpenAI-compatible endpoint, if you are not using OpenAI's own. |
Send something. With a key set and both text and sources empty, the run rewrites a built-in
example story and that row is charged like any other. It is the one way to pay for a script you did
not ask for.
Never paste your key into a published Apify task. Task inputs are readable by anyone who opens the page. Put it in the run input, or supply it per call.
📤 What you get back
Every run of this actor on record has been keyless, so what follows is the real labelled sample row
a keyless run wrote on 3 October 2026, trimmed for length. With your key set, the same fields are
filled by the model instead of the canned text, and _sample, _notice and requestedSeconds are
not there.
{"ok": true,"source": "My neighbor kept parking in my spot. I asked nicely three times. ...","title": "Sample Viral Short Script","hook": "I thought this tiny mistake was over, but then the twist hit.","script": "I thought this tiny mistake was over, but then the twist hit. My neighbor kept parking in my spot. I asked nicely three times. ...","altHooks": ["This looked like a normal day until one detail changed everything.","Nobody expected the ending to come from such a small mistake."],"wordCount": 57,"estSeconds": 23,"_sample": true,"_notice": "SAMPLE OUTPUT - provide openaiApiKey for a real AI rewrite.","tone": "dramatic","platform": "tiktok","requestedSeconds": 45}
| Field | How to read it |
|---|---|
script | The whole narration, hook included. Read it top to bottom and you have the voiceover. |
hook | The opening line on its own, so you can test openings without splitting the script. |
wordCount, estSeconds | The actual length, worked at 150 words a minute. Compare it against what you asked for. |
source | What you sent, cut to 2,000 characters, so a batch row can be traced back. |
🧾 Reading the output
Rows land in two places, and which one tells you what happened.
| Where | What it is | Charged |
|---|---|---|
| The dataset | A real script, ok: true | yes |
Key-value store, SAMPLE_AND_NOTICES | A keyless sample, _sample: true with a _notice | no |
Key-value store, SAMPLE_AND_NOTICES | A source that failed, ok: false with an error | no |
So an empty dataset after a run with a key means every source failed. Open the key-value store tab
and read the error on each one: it carries the status your provider returned, or a note that the
model's answer could not be read as JSON.
One source failing does not stop the others, and the run still finishes green either way, so check the dataset row count rather than the run status.
💡 What people use it for
- Piping a scraper's rows straight into
sourcesand getting a week of narration in one run. - Testing three tones on the same story, then picking the one that reads best out loud.
- Turning a long blog post into a 45-second version for Shorts without rewriting it by hand.
- Building an A/B test out of
hookand the twoaltHookson a piece that underperformed.
From your own stories to voiceover files, in three steps:
- Collect the stories you have the right to adapt, as plain text or as objects carrying
selftext. - Put them into Sources (batch) here.
- Put these rows into Texts (batch) on
AI Text to Speech Voiceover, which reads
scriptoff each one and returns an audio file per script.
🚧 What it does not do
- No voiceover, no video, no images. It writes text. The routing table below points at the rest.
- No fact checking. It rewrites what you gave it, including anything wrong in the source.
- No length guarantee.
targetSecondsis an instruction to the model, not a limit, so checkestSecondson the row. - Long sources are cut at 8,000 characters. Anything past that is not seen, so trim a long article to the part that matters.
- No retry. If your provider refuses one source, that source fails and the run moves on.
- No scraping. It does not fetch a URL. Send the text.
- The prompt is tuned for English. Other languages work, but the pacing advice is written for English rhythm.
- It is not an official tool of any platform or company named on this page. Dami's Studio is independent and is not affiliated with or endorsed by any of them.
🧭 Which short-form video tool do you need?
| If you want | Use |
|---|---|
| A story rewritten into a spoken script | This one |
| The script read out loud as an audio file | AI Text to Speech Voiceover |
| A finished faceless short from a story, topic or subreddit | AI Faceless Video Generator |
| Your hooks and titles scored and ranked | Hook & Virality Scorer |
| Titles, descriptions and hashtags for the post | Social Metadata Generator |
| A Reddit post cleaned for narration, with no rewriting | Reddit Text Cleaner |
❓ Questions people ask
Do I need my own OpenAI key to rewrite stories?
For real output, yes. Your key, your OpenAI bill.
Can I use a different provider?
Yes, if it speaks the OpenAI chat format. Put its address in baseUrl and its model name in
model.
Can I batch a whole list of stories?
Yes. Put the stories into sources and every one becomes its own row.
Why is my script shorter than I asked for?
targetSeconds steers the model, it does not bind it. Raise it, or send a richer source.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made
code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/story-to-script-rewriter. Either way
the run happens on your Apify account at the same price, and OpenAI bills your key as usual.
🆘 If something breaks
Open the Issues tab on the actor page. Send the run ID and the tone, platform and target length
you used. Never send your key. The error text in SAMPLE_AND_NOTICES usually names the problem by
itself.


