You can generate viral short-form videos without ever stepping in front of a camera by combining Pika Labs' video generation AI with ElevenLabs' voice synthesis and wiring the two together in an n8n workflow. The result is a ready-to-post TikTok (or YouTube Shorts) clip that looks professional, sounds natural, and scales to dozens of pieces per week.
faceless AI video automation is the process of creating short video content with synthetic visuals and AI-generated voiceovers, without any human on-camera presence.
Below you'll find the exact stack, a reproducible workflow, and the hard truths that usually bite newcomers.
What you need
| Tool | Plan / Price | Role |
|---|---|---|
| Pika Labs (video generation AI) | See Pika's current pricing page | Generates the visual layer from a text prompt |
| ElevenLabs (AI voiceover) | See ElevenLabs' current pricing page | Produces lifelike speech from a script |
| n8n (workflow automation) | Self-hosted (Docker, free) or n8n.cloud Free tier | Orchestrates API calls, file handling, and posting |
| ffmpeg (media processing) | Free, open-source | Merges video and audio tracks |
| AWS S3 (or similar object store) | Free tier (5 GB) or pay-as-you-go | Holds intermediate assets for the workflow |
| TikTok Developer Account / API | Free (requires approval) | Sends the final clip to your TikTok channel |
| Optional: Google Sheet (script source) | Free | Simple UI for copy-pasting prompts and scripts |
Estimated build time: roughly 8 hours including testing and credential setup.
How to make faceless AI videos for TikTok - the build
1. Prepare your environment
- Install n8n locally with Docker (recommended for quick iteration):
- Install ffmpeg on the same machine (Linux example):
- Create an AWS S3 bucket (e.g.,
my-faceless-assets). Keep the access key ID and secret handy - you'll need them in n8n's credential store.
2. Wire the trigger
The simplest trigger is a Google Sheet row addition. In n8n:
Add a Google Sheets node, set Operation to Watch (poll every 5 minutes).
* Choose the sheet where you'll write three columns: Prompt, Script, Title.
Tip: Using a sheet lets non-technical collaborators submit ideas without touching the workflow.
3. Generate the visual with Pika Labs
Add an HTTP Request node right after the trigger. Configure it as follows:
Method: `POST`
URL: https://api.pika.art/v1/generate (refer to the latest Pika Labs docs)
Authentication: Bearer token (store the token in n8n credentials)
Headers: Content-Type: application/json
Body (JSON):
This node sends your textual prompt to Pika Labs and returns a JSON payload containing a temporary video_url.
4. Synthesize the voice with ElevenLabs
Insert another HTTP Request node, connected to the previous one:
Method: `POST`
URL: https://api.elevenlabs.io/v1/text-to-speech/{{voice_id}} (replace {{voice_id}} with the ID of the voice you created)
Authentication: Bearer token (store in n8n)
Headers: Content-Type: application/json
Body (JSON):
ElevenLabs returns a binary audio stream; enable Response Format → File so n8n saves it as a temporary file.
5. Merge video and audio with ffmpeg
Add an Execute Command node. Its command builds the final TikTok-ready clip:
Explanation:
`-i` pulls the generated video and the synthesized audio.
-c:v libx264 encodes video in H.264 (TikTok's preferred codec).
`-c:a aac` encodes audio in AAC.
-shortest trims any excess so the two tracks end together.
The resulting file lands in n8n's /data/output/ folder.
6. Store the asset on S3
Add an AWS S3 node:
Operation: `Upload`
Bucket: my-faceless-assets
File Name: `{{$json["Title"]}}.mp4`
File Content: {{ $node["Execute Command"].binary.data }}
You now have a persistent URL (s3://...) that you can reuse for analytics or re-posting.
7. Publish to TikTok
TikTok's public API for video upload is still in beta; the reliable route is the TikTok Business API. Assuming you have obtained an access_token:
Add another HTTP Request node.
Method: POST
URL: `https://open-api.tiktok.com/video/upload/`
Authentication: Bearer token ({{ $credentials.tiktok.access_token }})
Form Data:
video_file → File from the previous S3 node ({{ $node["AWS S3"].json.s3_url }})
* title → {{$json["Title"]}}
If the upload succeeds, TikTok returns a video_id. You can optionally call the Create Post endpoint to publish immediately.
8. Notify yourself
Finish the workflow with a Telegram or Email node that sends you the TikTok link, the S3 URL, and any error logs. This keeps you in the loop without staring at the n8n UI.
Where this breaks
| Failure mode | Symptom | Fix |
|---|---|---|
| API authentication expires | HTTP 401 from Pika or ElevenLabs | Store refresh logic in n8n credentials; set token lifespan alerts |
| Rate-limit hit | 429 response, workflow stalls | Back-off using n8n's built-in Retry option; batch prompts to stay under provider caps |
| Mismatched durations | Audio continues after video ends, producing silence | Use -shortest flag (already in ffmpeg command) or pre-calculate script length and set duration_seconds accordingly |
| TikTok upload size limit | API returns file_too_large | Keep final MP4 under 100 MB (TikTok's limit) - 15 s at 1080p usually stays well below |
| Unexpected format | Video appears distorted on TikTok | Verify codec (libx264 + aac) and use -pix_fmt yuv420p flag in ffmpeg if needed |
| Cost creep | Monthly bill spikes | Monitor usage dashboards in Pika and ElevenLabs; set n8n alerts when daily API calls exceed a threshold |
Key insight: The most common blocker is token expiration; automate credential rotation early to avoid silent failures.
For a deeper technical reference, see n8n's documentation.