AI Faceless Video Generator
Make a faceless short video from a subreddit, story or topic. You get a 9:16 MP4 with script, voiceover, AI scenes and captions.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
subreddit,story,topic(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.69 per short video = $690 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Short video generated | Charged once per finished vertical video (script, AI voiceover, images, burned-in captions). You supply your own OpenAI key, so no AI cost is resold to you. | $0.69 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-26, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
subreddit | Pull the top story from this subreddit (e.g. tifu, AmItheAsshole, nosleep). Leave empty to use 'story' or 'topic'. | string |
story | Your own story/script to turn into a video (overrides subreddit). | string |
topic | A topic to write a video about (overrides subreddit). | string |
sort | Sort for the subreddit source. | string |
time | Time window for top. | string |
tone | Script tone. | string |
voice | AI voiceover voice. | string |
aspectRatio | Video shape. | string |
style | Art style for the scene images. | string |
characters | Recurring-character description for visual consistency. | string |
captionPreset | Burned caption style. | string |
targetSeconds | Approximate length of the short. | integer |
imageQuality | gpt-image-1 quality (affects cost/speed). | string |
openaiApiKey | Your OpenAI key, used for script, TTS, transcription, and images. Kept private. | string |
baseUrl | OpenAI-compatible base URL. Default https://api.openai.com/v1. | string |
What you get
A structured dataset — each result includes fields like:
titlehookscenesdurationSecondsvoicevideoUrlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in AI Video & Content Studio
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
AI Storyboard Generator
Turn a story or script into storyboard scene images. One art style across every shot. $0.05 per scene image, or $50.00 per 1,000.
AI Video Dubber
Dub a video into another language. Transcribe, translate, AI voice timed to the original, optional subtitles. $0.12 per dubbed minute, flat.
Auto Caption Burner
Burn word-by-word animated captions into any video. Five styles, no watermark. Transcript and word timings included. $0.04 per 30-second block.
Storyboard Video Generator
Turn images or a story into a Ken Burns slideshow video. Pan-and-zoom motion, optional audio, 9:16, 16:9 or 1:1 output. $0.015 per rendered second.
Story to Script Rewriter
Turn a story, article or Reddit post into a short-form script. You get a hook, tight narration, a title and extra hooks. $0.02 per script.
Subtitle Translator
Translate SRT and VTT subtitles into many languages in one run, or transcribe a video first. Timings stay exact. $0.05 per language, flat rate.
Where this tool sits
- Categories
- AI Video & Content Studio
AI Faceless Video Generator: a story goes in, a captioned vertical MP4 comes out
Point it at a subreddit, paste your own story, or just name a topic. 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 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 | $0.69 per finished video, flat on every plan |
🎥 What AI Faceless Video Generator does
The whole chain in one run, in this order.
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, using the post text only. Comments are not read.
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 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. It drives the word count, and through that the voiceover, 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. |
Run it with no key and you get one labelled sample record in the key-value store, free, so you can see the shape first.
📤 What you get back
One row, and the video itself in the run's key-value store under a key like short-1786411663909.mp4. The raw voiceover is saved beside it as voice-<timestamp>.mp3, which is handy if you want to re-cut the video yourself.
| Field | What it is |
|---|---|
ok | true on a delivered video. |
source | Where the story came from: type is story, topic or reddit, plus the subreddit, title and link when it was Reddit. |
title | The title the model wrote for the piece. |
hook | The opening line, as spoken. |
altHooks | Spare hooks you can swap in when you post it. |
script | The cleaned narration that was actually read aloud. |
voice | Which voice read it. |
scenes | How many images ended up in the video. |
aspectRatio | The shape you asked for. |
durationSeconds | The finished MP4's length, measured off the file and rounded. |
videoKey, videoUrl | The key-value store key, and a direct link to the MP4. |
processingSeconds | How long the run took to build it. |
No example row is printed here. No run on record has produced one with a working customer key, and a plausible row typed out by hand is worse than none.
🧾 Reading the output
A run has two honest endings and 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 |
| A step failed | The run stops and is marked failed, with the step named in the log. No row, no video, no $0.69 |
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.
▶️ How to run it
1. Open AI Faceless Video Generator and click Try for free to see the sample record. 2. Paste your key into OpenAI API key (BYO). 3. Pick a source: a name in Subreddit, your text in Story text, or a line in Topic. 4. Set Tone, Voice, Caption style and Target length. 5. Click Start, wait a few minutes, then take the MP4 from the run's Storage tab.
💰 How much does it cost?
$0.69 per finished video. Flat on every Apify plan, no volume tiers.
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. 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 people use it for
- Faceless story channels on TikTok, Reels and Shorts, run daily off a subreddit.
- 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.
🚧 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.
- Captions can be missing. No word timings means no captions, and the video still ships.
- 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.
🧭 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 |
| 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 |
❓ Questions people ask
Do I need my own key? Yes, and it needs to work for chat, speech, transcription and images. Without one you get the sample record.
How long is the video? Roughly targetSeconds. The script is written to about that length and the video is cut to the voiceover, so it lands close rather than exactly.
Can I use my own images? Not here. Scenes are drawn from the script.
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. Nothing is charged for the video when that happens.
Can I change the caption look? Yes, through captionPreset. Five styles, from a karaoke highlight to plain clean text.
Is it legal to use a Reddit story? The post text is public and the video is a rewrite, not a copy. Credit the source if your platform expects it, and check the subreddit's own rules before you build a channel on one.
🆘 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.