# Songs2YT

Self-hosted tool that turns a cover image + audio files into YouTube videos and uploads them to your channel.

This is the **open-source edition**: no video quotas, no API rate limits, playlists and REST API unlocked (`S2YT_EDITION=selfhosted`).

Hosted product: [songs2yt.com](https://songs2yt.com)

## Requirements

- Docker (recommended), or Node 20+, Postgres, Redis, FFmpeg
- Google Cloud OAuth client with YouTube Data API v3 enabled

## Quick start (Docker)

```bash
cp .env.example .env
# set GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, NEXTAUTH_SECRET, NEXTAUTH_URL
docker compose up -d --build
```

Open http://localhost:3000  
OAuth redirect: `{NEXTAUTH_URL}/api/auth/callback/google`

## Local development

```bash
cp .env.example .env
docker compose -f docker-compose.dev.yml up -d   # Postgres + Redis
npm install
npm run db:push
npm run dev      # terminal 1
npm run worker   # terminal 2
```

## Stack

Next.js · Postgres · Redis/BullMQ · NextAuth (Google) · FFmpeg · YouTube Data API

## License

MIT
