64 lines
1.3 KiB
Markdown
64 lines
1.3 KiB
Markdown
# s2yt
|
|
|
|
Create YouTube videos from an image and audio files.
|
|
|
|
## Stack
|
|
|
|
- Next.js 15 (App Router, TypeScript, Tailwind)
|
|
- PostgreSQL + Prisma
|
|
- Redis + BullMQ
|
|
- NextAuth (Google OAuth with YouTube scopes)
|
|
- FFmpeg for video encoding
|
|
- YouTube Data API v3
|
|
|
|
## Setup
|
|
|
|
1. Copy environment variables:
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
2. Start PostgreSQL and Redis:
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
3. Install dependencies and run migrations:
|
|
|
|
```bash
|
|
npm install
|
|
npm run db:push
|
|
```
|
|
|
|
4. Configure Google OAuth in [Google Cloud Console](https://console.cloud.google.com/):
|
|
- 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`
|
|
|
|
5. Install FFmpeg on your system (required for the worker).
|
|
|
|
6. Start the web app and worker in separate terminals:
|
|
|
|
```bash
|
|
npm run dev
|
|
npm run worker
|
|
```
|
|
|
|
## Free Plan
|
|
|
|
- 14 videos/month (each audio = 1 video)
|
|
- Max 720p resolution
|
|
- 30 MB max per file
|
|
- Watermark required
|
|
- Per-video metadata (title auto-filled from audio filename)
|
|
|
|
## Scripts
|
|
|
|
- `npm run dev` — Next.js dev server
|
|
- `npm run worker` — Background job processor
|
|
- `npm run db:push` — Push Prisma schema to database
|
|
- `npm run build` — Production build
|