AI Faceless Video Generator — Story to Short in 1 Run
Pricing
from $660.00 / 1,000 short videos
AI Faceless Video Generator — Story to Short in 1 Run
Make a faceless short from a subreddit, your own story or a topic. It writes the script, voices it, draws the scenes with a slow zoom and burns in word-by-word captions. You get a vertical MP4 plus the script and hooks. Runs on your own OpenAI key. $690.00 per 1,000 videos ($0.69 each).
Pricing
from $660.00 / 1,000 short videos
Rating
5.0
(2)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
16
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Make a faceless short video from a subreddit, your own story or a topic, in one run: it writes the script, reads it aloud, draws the scenes, moves them with a slow zoom and burns word-by-word captions over the top. What lands is one vertical MP4, plus the script, the hook and a few alternative hooks in the row next to it.
The thing to know before you start: it runs on your own OpenAI key. Every step, the script, the voice, the word timings and the images, goes through that key, so OpenAI bills you for the run on top of the charge here. Without a key you get a labelled sample record and no video.
| Input | A subreddit, your own story, or a topic |
| Output | One MP4, plus the script and hooks in a row |
| Ceiling | One video per run, with 3 to 12 scene images in it |
| Account needed | Your own OpenAI API key |
| Price | $690.00 per 1,000 videos, so $0.69 a finished video on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 7. OpenAI bills your key separately |
🔍 What AI Faceless Video Generator does
It gets the source first. story or topic wins if either is filled in. Otherwise it pulls the
subreddit's feed and takes the first post with a real body on it.
Then a chat model rewrites that into a script at roughly your targetSeconds, in the tone you
picked, and hands back a title, a hook and a few spare hooks. The script is cleaned up for reading
aloud, abbreviations included, then voiced with your chosen voice.
The finished voiceover decides the rest. Its length sets how many scene images get drawn, between 3
and 12, and each image is rendered with your style and characters notes in the prompt so the
look holds. The stills are given a slow push-in, cut together to the length of the voiceover, and
the captions are burned on in your captionPreset.
Everything runs one step at a time, so a run takes minutes rather than seconds.
📋 What data you get from each short
| What you get | Field |
|---|---|
| The finished MP4 in the run's key-value store, and a direct link to it | videoKey, videoUrl |
| The narration that was actually read aloud | script |
| The title the model wrote, the opening line, and spare openings | title, hook, altHooks |
| Where the story came from, with the post title and link when it was Reddit | source |
| How many scene images ended up in the video | scenes |
| The finished length, measured off the file | durationSeconds |
| The voice, the shape, and how long the run took | voice, aspectRatio, processingSeconds |
The raw voiceover is saved beside the video as voice-<timestamp>.mp3, which is handy if you want
to re-cut the video yourself.
▶️ How to make a faceless short from a Reddit story
- Open AI Faceless Video Generator and click Try for free.
- Paste your key into OpenAI API key (BYO).
- Pick a source: a name in Subreddit (source), your text in Story text, or a line in Topic.
- Set Tone, Voice, Caption style and Target length (seconds).
- Click Start, wait a few minutes, then take the MP4 from the run's Storage tab.
Start it with no key and you get the free sample record in the key-value store instead.
💰 How much does it cost to make a faceless short?
$0.69 per finished video on the Free plan. Paid plans pay a little less: $0.68 on Starter, $0.67 on Scale and $0.66 on Business. On the free plan, the $5 Apify gives you each month covers about 7 videos.
You pay when an MP4 exists. A run that stops partway delivers nothing and is not charged that $0.69, and the keyless sample is not charged either. Set a maximum cost on the run that cannot cover one video and it stops before the first paid step, with nothing made and nothing charged.
OpenAI bills your own key separately for the script, the voice, the word timings and every image, so
imageQuality and targetSeconds move that side of the bill more than anything else you can set.
📥 What you give it
{"subreddit": "tifu","sort": "top","time": "week","tone": "dramatic","voice": "onyx","targetSeconds": 50,"captionPreset": "karaoke"}
| Field | Default | What it is |
|---|---|---|
subreddit | none | Where to take the story from. r/tifu, tifu and a full Reddit link all work. The form prefills tifu, which is an example rather than a default: an API call with all three sources empty fails. |
story | none | Your own text. Overrides subreddit. Cut at 8,000 characters. |
topic | none | A subject to write about from scratch. Also overrides subreddit. |
sort | top | top, hot, new or rising, for the subreddit route. |
time | week | day, week, month, year or all. Only used with top. |
tone | dramatic | dramatic, casual, funny, emotional, educational or hype. |
voice | onyx | alloy, echo, fable, onyx, nova or shimmer. |
aspectRatio | 9:16 | 9:16, 16:9 or 1:1. |
style | cinematic, moody, highly detailed, dramatic lighting | The art direction in front of every image prompt. |
characters | none | Who keeps appearing, in a sentence, so they stay recognisable between scenes. |
captionPreset | karaoke | karaoke, hormozi, beast, tiktok or clean. |
targetSeconds | 50 | Roughly how long the short should be: the video is cut to the voiceover, so it lands close rather than exactly. It drives the word count, and through that the scene count and your own OpenAI spend. |
imageQuality | high | low, medium or high. The biggest lever on your OpenAI bill and on how long a run takes. |
openaiApiKey | none | Your own OpenAI key. Marked secret. |
baseUrl | none | Advanced. Any OpenAI-compatible host. Empty means https://api.openai.com/v1. |
📤 What you get back
One row, and the video itself in the run's key-value store under a key like short-1786411663909.mp4.
No run on record has made a video with a customer's key, so here is the real sample record a
keyless run wrote on 2 October 2026. Its title, hooks, script and numbers are fixed placeholders. A
delivered row has the same fields, written from your story, with videoKey and videoUrl filled in
and no _sample, _notice or reason.
{"ok": true,"_sample": true,"_notice": "SAMPLE OUTPUT - provide openaiApiKey for a real AI-generated faceless short video.","reason": "missing_api_key","source": { "type": "demo", "subreddit": "tifu" },"title": "Sample Faceless Short","hook": "I thought this story was over, but the final detail changed everything.","altHooks": ["This started as a normal story, then one detail flipped it.","The ending makes the whole setup feel completely different."],"script": "I thought this story was over, but the final detail changed everything. This sample row previews the generated-short output shape without spending API credits.","voice": "onyx","scenes": 3,"aspectRatio": "9:16","durationSeconds": 12,"videoKey": null,"videoUrl": null,"processingSeconds": 0}
| Field | How to read it |
|---|---|
source | type is story, topic or reddit, plus the subreddit, post title and link when it was Reddit. |
script | The cleaned narration, exactly as voiced. |
durationSeconds | The finished MP4's length, measured off the file and rounded. |
🧾 Reading the output
A run ends one of five ways, and there is one thing to check.
| Ending | What you see |
|---|---|
| A video was made | One dataset row, ok: true, with videoUrl on it |
| No key supplied | Zero dataset rows, a labelled sample in SAMPLE_AND_NOTICES in the key-value store |
| Your maximum cost was too low | Zero dataset rows, a max_cost_reached record in SAMPLE_AND_NOTICES, nothing made or charged |
| A step failed | The run stops and is marked failed, with the step named in the log. No row, no video, no $0.69 |
| The time limit came first | The run stops just before its time limit and is marked failed, with a TIME_LIMIT record in SAMPLE_AND_NOTICES naming the step it reached. No video, so no video charge |
There is no half-delivered row. If a chat call, the voice, the word timings or an image fails, the run stops there rather than shipping something incomplete.
The thing to check is captions. If the word timings come back empty, the video is built without captions and still delivered and charged. Play the MP4 before you schedule a hundred of them.
The Overview table shows title, hook, scenes, durationSeconds, voice and videoUrl. The
script, altHooks and source fields are in the row but not in that table, so open the JSON for
them.
💡 What people use it for
- Faceless story channels on TikTok, Reels and Shorts, written from your own text or a topic.
- Turning a newsletter paragraph or a support write-up into a short without opening an editor.
- Testing hooks: one run gives you the spoken hook plus spares, so the same video can be reposted with a different opening.
- Making a rough cut to show a client what a format would look like before anyone films anything.
From one run to a short with a matching cover:
- Run this with a name in Subreddit (source). The row carries
title,hookandaltHooks. - Paste the hook and the spares into Texts / variants on Hook & Virality Scorer and keep the top-ranked one.
- Put
titleand that hook into Title / headline and Hook text (optional override) on AI Thumbnail Generator.
🚧 What it does not do
- One video per run. There is no batch mode. Schedule it or start several runs.
- Reddit post bodies only. Comments are never read, and a subreddit whose top post is a link rather than text gives the model very little to work with.
- No music, no transitions, no stock footage. Still images with a slow push-in, hard cuts, one voice track.
- English. The script is written in English whatever the source language is.
- No editing afterwards. You get the MP4 as built. There is no re-render of a single scene.
- No images of your own. Scenes are drawn from the script.
- 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 AI video actor do you need?
| If you want | Use |
|---|---|
| A finished short written from a story, topic or subreddit | This one |
| A long video or podcast cut into ranked shorts | AI Viral Clip Cutter |
| Your own images and voiceover turned into a slideshow video | Storyboard Video Generator |
| Just the voiceover file, from text you already have | AI Text to Speech Voiceover |
| Captions burned onto a video you already have | Auto Caption Burner |
| A script rewritten for short-form, with no video | Story to Script Rewriter |
| A cover image with a face and the hook on it | AI Thumbnail Generator |
❓ Questions people ask
Do I need my own OpenAI key to make faceless videos?
Yes, and it needs to work for chat, speech, transcription and images. Without one you get the sample record.
Why did my run fail?
A step threw. The log names which one: the feed, the script call, the voice, the word timings or an image.
Is it legal to use a Reddit story?
Credit the source if your platform expects it, and check the subreddit's own rules before you build a channel on one. Apify's write-up on scraping and the law is a good start, and we are not lawyers.
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/ai-faceless-short-generator.
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. Include the run ID and which source you used, and say whether the MP4 came out with captions on it, since that narrows it down fast.


