# AI Faceless Video Generator — Story to Short in 1 Run (`dami_studio/ai-faceless-short-generator`) Actor

One input, one finished vertical video. Give it a subreddit, a story or a topic and it writes the retention script, voices it, generates cinematic AI scenes with motion, and burns word-synced captions — then hands you a ready-to-post MP4 plus the hook, alt hooks and script. TikTok, Reels, Shorts.

- **URL**: https://apify.com/dami\_studio/ai-faceless-short-generator.md
- **Developed by:** [Dami's Studio](https://apify.com/dami_studio) (community)
- **Categories:** Videos, AI, For creators
- **Stats:** 3 total users, 0 monthly users, 94.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $390.00 / 1,000 video generateds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## AI Faceless Video Generator

Give it a subreddit, a story, or a topic and it returns a finished faceless short: an AI-written script, an AI voiceover, cinematic scene images with ken-burns motion, and word-synced captions burned in. It runs the whole pipeline in one go, so the output is a ready-to-post vertical video for TikTok, Reels, or YouTube Shorts. Built for people churning out faceless content who don't want to stitch five tools together by hand.

### How it works

It pulls the source text (top Reddit post via RSS, or your own story/topic), rewrites it into a tight retention script, generates the voiceover with OpenAI TTS, transcribes that audio back to get per-word timings, generates one scene image per ~6 seconds with `gpt-image-1`, then animates the stills with ffmpeg ken-burns and burns the captions over the top.

### Input

Nothing is strictly required, but you do need to give it a source (one of `subreddit`, `story`, or `topic`) and an OpenAI key. `subreddit` is prefilled with `tifu` so a run with just a key will produce something.

| Field | Required | Notes |
|---|---|---|
| `subreddit` | one of source | Pulls the top post with enough body text, e.g. `tifu`, `AmItheAsshole`, `nosleep`. Prefilled `tifu`. |
| `story` | one of source | Your own text to turn into a video. Overrides `subreddit`. |
| `topic` | one of source | A topic to write about from scratch. Overrides `subreddit`. |
| `openaiApiKey` | yes in practice | Bring your own key. Used for script, TTS, transcription, and images. Kept private. |
| `tone` | no | Script tone: `dramatic` (default), `casual`, `funny`, `emotional`, `educational`, `hype`. |
| `voice` | no | OpenAI TTS voice: `onyx` (default), `alloy`, `echo`, `fable`, `nova`, `shimmer`. |
| `aspectRatio` | no | `9:16` (default), `16:9`, or `1:1`. |
| `captionPreset` | no | Burned caption style: `karaoke` (default), `hormozi`, `beast`, `tiktok`, `clean`. |
| `targetSeconds` | no | Approximate length. Default 50. The scene count scales with the final voiceover duration. |
| `imageQuality` | no | `gpt-image-1` quality: `low`, `medium`, `high` (default). Drives most of your OpenAI cost. |
| `style` | no | Art direction for the scene images. Defaults to a cinematic, moody look. |
| `characters` | no | Recurring-character description to keep faces and outfits consistent across scenes. |
| `sort` / `time` | no | Reddit sort (`top`/`hot`/`new`/`rising`) and time window for `top`. |

### Output

One dataset item per run with the finished MP4 and the metadata around it. The video and the raw voiceover MP3 are written to the run's key-value store. Key fields: `videoUrl` and `videoKey` (the MP4), `title`, `hook` and `altHooks` (extra hook options to A/B), `script`, `voice`, `scenes`, `aspectRatio`, `durationSeconds`, and `source` (where the story came from).

### Example

```json
{
  "subreddit": "tifu",
  "tone": "dramatic",
  "voice": "onyx",
  "captionPreset": "hormozi",
  "aspectRatio": "9:16",
  "targetSeconds": 50,
  "openaiApiKey": "sk-..."
}
```

### Pricing

$0.39 per video, pay per result, no subscription. OpenAI usage (script, TTS, transcription, images) is billed separately on your own key.

### Notes

Reddit serves the public RSS feed, which works for top posts but not comment threads, so this reads the post body only. `imageQuality: high` is the main lever on OpenAI cost and run time. If your `story` or `topic` is short, the script model pads to roughly `targetSeconds`, which can read thin; feed it more source text for better results.

# Actor input Schema

## `subreddit` (type: `string`):

Pull the top story from this subreddit (e.g. tifu, AmItheAsshole, nosleep). Leave empty to use 'story' or 'topic'.

## `story` (type: `string`):

Your own story/script to turn into a video (overrides subreddit).

## `topic` (type: `string`):

A topic to write a video about (overrides subreddit).

## `sort` (type: `string`):

Sort for the subreddit source.

## `time` (type: `string`):

Time window for top.

## `tone` (type: `string`):

Script tone.

## `voice` (type: `string`):

AI voiceover voice.

## `aspectRatio` (type: `string`):

Video shape.

## `style` (type: `string`):

Art style for the scene images.

## `characters` (type: `string`):

Recurring-character description for visual consistency.

## `captionPreset` (type: `string`):

Burned caption style.

## `targetSeconds` (type: `integer`):

Approximate length of the short.

## `imageQuality` (type: `string`):

gpt-image-1 quality (affects cost/speed).

## `openaiApiKey` (type: `string`):

Your OpenAI key — used for script, TTS, transcription, and images. Kept private.

## `baseUrl` (type: `string`):

OpenAI-compatible base URL. Default https://api.openai.com/v1.

## Actor input object example

```json
{
  "subreddit": "tifu",
  "sort": "top",
  "time": "week",
  "tone": "dramatic",
  "voice": "onyx",
  "aspectRatio": "9:16",
  "style": "cinematic, moody, highly detailed, dramatic lighting",
  "captionPreset": "karaoke",
  "targetSeconds": 50,
  "imageQuality": "high"
}
```

# Actor output Schema

## `results` (type: `string`):

Result rows / metadata are stored in the default dataset (one row per item).

## `files` (type: `string`):

Generated media/files (video, audio, images, captions) are stored in the default key-value store.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "subreddit": "tifu"
};

// Run the Actor and wait for it to finish
const run = await client.actor("dami_studio/ai-faceless-short-generator").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "subreddit": "tifu" }

# Run the Actor and wait for it to finish
run = client.actor("dami_studio/ai-faceless-short-generator").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "subreddit": "tifu"
}' |
apify call dami_studio/ai-faceless-short-generator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=dami_studio/ai-faceless-short-generator",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/OvQ3IZKcFm5RQW9wi/builds/rxDQykkzTJRJLBSCn/openapi.json
