Songs2VID is an automation tool that converts your audio and image files into high-quality videos and uploads them directly to YouTube.
Go to file
2026-08-19 11:51:44 +02:00
.agents/skills/stripe-best-practices Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
app Revert "Add Microsoft Clarity, Google Tag Manager, and Search Console disclosures to privacy policy" 2026-08-19 11:51:44 +02:00
assets Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
bg-video Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
components Revert "Add Microsoft Clarity, Google Tag Manager, and Search Console disclosures to privacy policy" 2026-08-19 11:51:44 +02:00
deploy/songs2vid Ship free-tier watermark policy (2 clean renders) and align pricing/legal copy. 2026-08-03 07:41:11 +02:00
hooks Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
lib Revert "Add Microsoft Clarity, Google Tag Manager, and Search Console disclosures to privacy policy" 2026-08-19 11:51:44 +02:00
prisma Ship free-tier watermark policy (2 clean renders) and align pricing/legal copy. 2026-08-03 07:41:11 +02:00
public Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
scripts Enlarge watermark badge for preview/encode parity and document video title fields. 2026-07-27 18:28:07 +02:00
types Initial commit from Create Next App 2026-07-12 15:40:35 +02:00
website Revert "Add Microsoft Clarity, Google Tag Manager, and Search Console disclosures to privacy policy" 2026-08-19 11:51:44 +02:00
worker Ship free-tier watermark policy (2 clean renders) and align pricing/legal copy. 2026-08-03 07:41:11 +02:00
.dockerignore Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
.env.example Add dynamic footer badge marquee with admin management. 2026-08-01 19:58:24 +02:00
.eslintrc.json Initial commit from Create Next App 2026-07-12 15:40:35 +02:00
.gitignore Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
basibozuk_cover.jpg Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
docker-compose.dev.yml Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
docker-compose.yml Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
Dockerfile Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
next-env.d.ts Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
next.config.ts Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
package-lock.json Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
package.json Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
postcss.config.mjs Initial commit from Create Next App 2026-07-12 15:40:35 +02:00
README.md Align self-host docs with payment-free OSS Docker image. 2026-08-03 07:07:12 +02:00
skills-lock.json Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
tailwind.config.ts Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
tsconfig.json Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00
tsconfig.tsbuildinfo Align preview typography with FFmpeg output, add video/song title split, and ship OSS updates. 2026-07-27 16:26:19 +02:00

Songs2VID (hosted / SaaS checkout)

Create YouTube videos from an image and audio files. This tree is the hosted SaaS codebase (billing, credits, marketing landing).

For the payment-free self-hosted OSS product (no Stripe), use Gitea branch main / image atakanozban/songs2vid:latest and the docs at docs.songs2vid.com. Self-host install guides in website/docs/ describe that OSS path.

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 (this SaaS tree)

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

Prefer the published OSS image for new self-host installs. Docker Compose in this tree still sets S2VID_EDITION=selfhosted when you run it locally.

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