From 105b608cd26d4446bd9d933865c0f0e64bcd6fe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Atakan=20Do=C4=9Fan=20=C3=96zban?= <1+atakan@noreply.git.atakanozban.com> Date: Fri, 17 Jul 2026 00:46:55 +0000 Subject: [PATCH] Update README.md --- README.md | 84 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 65 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 6c91998..e40768e 100644 --- a/README.md +++ b/README.md @@ -1,42 +1,88 @@ -๏ปฟ# Songs2YT +# ๐ŸŽต Songs2YT -Self-hosted tool that turns a cover image + audio files into YouTube videos and uploads them to your channel. +

+ Status + Docker + Self-hosted + License +

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

+ Turn your cover art + audio files into YouTube videos automatically. No manual rendering BS.
+ The ultimate life-saver for creators who waste hours opening Premiere/Vegas just to upload a single track. +

-Hosted product: [songs2yt.com](https://songs2yt.com) +--- -## Requirements +## ๐Ÿ”ฅ What's the deal? -- Docker (recommended), or Node 20+, Postgres, Redis, FFmpeg -- Google Cloud OAuth client with YouTube Data API v3 enabled +**Songs2YT** is a self-hosted automation beast that takes your audio files (MP3/WAV) and cover images, smashes them together with FFmpeg in a background queue, and uploads them straight to your YouTube channel. -## Quick start (Docker) +This is the **open-source (self-hosted) edition**: +* ๐Ÿšซ **Zero limits:** No video upload quotas, no API rate limit bullshit. +* ๐Ÿ”“ **Fully Unlocked:** Playlists and REST API are completely unlocked (`S2YT_EDITION=selfhosted`). +* โ˜๏ธ **Full Control:** Run it on your own server. Your data, your rules. + +> Check out the hosted version: [songs2yt.com](https://songs2yt.com) + +--- + +## ๐Ÿ› ๏ธ Requirements + +* **Docker & Docker Compose** (highly recommended, saves your mental health) +* *Or:* Node 20+, Postgres, Redis, FFmpeg +* Google Cloud OAuth client with **YouTube Data API v3** enabled + +--- + +## ๐Ÿš€ Quick Start (Docker) + +Skip the setup headache. Copy the env, spin it up, and go touch grass: ```bash +# Copy env template cp .env.example .env -# set GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, NEXTAUTH_SECRET, NEXTAUTH_URL + +# Fill in GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, NEXTAUTH_SECRET, and NEXTAUTH_URL +nano .env + +# Fire up the engine docker compose up -d --build ``` +* Open `http://localhost:3000` +* OAuth Redirect URL on Google Console: `{NEXTAUTH_URL}/api/auth/callback/google` -Open http://localhost:3000 -OAuth redirect: `{NEXTAUTH_URL}/api/auth/callback/google` +## ๐Ÿ’ป Local Development -## Local development +Want to hack on the codebase? Follow this: ```bash +# 1. Prepare env cp .env.example .env -docker compose -f docker-compose.dev.yml up -d # Postgres + Redis + +# 2. Spin up Postgres & Redis +docker compose -f docker-compose.dev.yml up -d + +# 3. Get dependencies npm install + +# 4. Push database schema npm run db:push -npm run dev # terminal 1 -npm run worker # terminal 2 + +# 5. Run it (open two terminals) +npm run dev # Terminal 1 (Next.js) +npm run worker # Terminal 2 (BullMQ/FFmpeg Worker) ``` -## Stack +## ๐Ÿ—๏ธ Stack -Next.js ยท Postgres ยท Redis/BullMQ ยท NextAuth (Google) ยท FFmpeg ยท YouTube Data API +* Next.js (Frontend & API) +* Postgres (Database) +* Redis / BullMQ (Background render queue) +* NextAuth (Google OAuth) +* FFmpeg (The engine merging audio + image) +* YouTube Data API (The rocket launcher pushing to YT) -## License +## ๐Ÿ“„ License -MIT +This project is licensed under the MIT License. \ No newline at end of file