Atakan Doğan Özban 0c9b07bcb5 Enlarge watermark badge for preview/encode parity and document video title fields.
Fix double-scaled badge preview, bump default watermark to 42% frame width, and update OSS docs/API for title vs songTitle separation and shared typography.
2026-07-27 18:28:07 +02:00
2026-07-12 15:40:35 +02:00

Songs2VID

Create YouTube videos from an image and audio files.

Stack

  • Next.js 15 (App Router, TypeScript, Tailwind)
  • PostgreSQL + Prisma
  • Redis + BullMQ
  • NextAuth (Google OAuth 2.0 with YouTube scopes)
  • FFmpeg for video encoding
  • YouTube Data API v3

Editions

Edition How Limits
Hosted (default) Leave S2VID_EDITION unset Free / Pro quotas and API gates
Self-hosted / OSS S2VID_EDITION=selfhosted No video quota, no API rate caps; playlists + API unlocked

Docker Compose sets S2VID_EDITION=selfhosted automatically.

Quick start (Docker)

  1. Copy env and set Google OAuth + secrets:
cp .env.example .env
  1. Build and run the full stack (web, worker, Postgres, Redis):
docker compose up -d --build

Open http://localhost:3000.

Add Google OAuth redirect URI: http://localhost:3000/api/auth/callback/google (or your public URL).

Local development

  1. Copy environment variables:
cp .env.example .env
  1. Start Postgres and Redis only:
docker compose -f docker-compose.dev.yml up -d
  1. Install dependencies and push the schema:
npm install
npm run db:push
  1. Configure Google OAuth in Google Cloud Console:

    • Enable YouTube Data API v3
    • Create OAuth 2.0 credentials
    • Add redirect URI: http://localhost:3000/api/auth/callback/google
    • Set GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET in .env
  2. Optional for unlimited local use: S2VID_EDITION=selfhosted in .env

  3. Start the app, worker, and docs:

npm run dev:all

Or run them separately with npm run dev, npm run worker, and npm run docs:dev.

Authentication

Users sign in with Google via OAuth 2.0. The app handles YouTube channel connection automatically end users never enter API keys for YouTube.

Self-hosted edition

Set S2VID_EDITION=selfhosted (Docker Compose does this by default):

  • Unlimited video allowance
  • API access and playlists
  • Art-track layouts with blur backgrounds and fine-tuning (padding, gaps, text offsets)
  • Custom watermarks (text/logo), curated or uploaded fonts

Composition details: see website/docs/video-editing.md (or open Video editing in the docs site after npm run docs:dev).

Scripts

  • npm run dev - Next.js dev server
  • npm run worker - Background job processor
  • npm run dev:all - App (3000) + worker + docs (3001) together
  • npm run db:push - Push Prisma schema to database
  • npm run build - Production build
  • npm run docs:dev - Documentation site only (Docusaurus on port 3001)

Documentation

Docs live in website/ (Docusaurus). API reference:

npm run docs:dev

Open http://localhost:3001/docs/api/overview.

The app “Full API docs” link and /dashboard/api-docs redirect use local docs when NEXTAUTH_URL is localhost (or set NEXT_PUBLIC_DOCS_URL).

Source

S
Description
Songs2VID is an automation tool that converts your audio and image files into high-quality videos and uploads them directly to YouTube.
https://www.songs2vid.com
Readme MIT
615 MiB
Languages
TypeScript 96%
CSS 1.9%
JavaScript 1.5%
Dockerfile 0.6%