Separate YouTube video titles from on-video song/artist fields with Pro gating, serve curated fonts and watermark assets for 1:1 preview parity, and include billing/API/docs/deploy stack for self-hosted release. Co-authored-by: Cursor <cursoragent@cursor.com>
1.6 KiB
sidebar_position, slug
| sidebar_position | slug |
|---|---|
| 1 | /intro |
Introduction
Songs2VID turns a cover image and one or more audio files into YouTube-ready videos, then uploads them to your channel.
This documentation is for self-hosted / open-source deployments (S2VID_EDITION=selfhosted).
What you can do
- Combine one image with multiple tracks in a batch
- Set per-video metadata (title, artist, description, tags, privacy, resolution)
- Art-track layouts with blur backgrounds and fine-tuning (padding, title/artist gap, text offsets)
- Custom watermarks: text or logo, positions/offsets, curated or uploaded fonts
- Unique cover image per track
- Add uploads to YouTube playlists
- Use the REST API for automation
See Video editing for composition controls in the dashboard and API.
Self-host
Follow Getting started. Set S2VID_EDITION=selfhosted for unlimited video allowance, API access, and all layout features (the optional root Compose example sets this for you).
For local development, npm run dev:all starts the app (port 3000), worker, and this docs site (port 3001).
Going to a public URL? See Production notes (OAuth redirect, worker, HTTPS). Docker/Caddy samples in the repo are optional.
REST API
Programmatic uploads and job creation. Generate an API key under Dashboard → Settings → API access. Start with API overview.
Stack
- Next.js 15 (App Router, TypeScript, Tailwind)
- PostgreSQL + Prisma
- Redis + BullMQ
- NextAuth (Google OAuth with YouTube scopes)
- FFmpeg for encoding
- YouTube Data API v3