MyGo 云音乐
Go와 MyGo로 만든 서드파티 네이버 클라우드 뮤직 데스크톱 클라이언트
StreamSouk은 동영상 스트리밍 플랫폼으로, 재개시 업로드·HLS 트랜스코딩·댓글·구독 기능을 제공합니다
StreamSouk is a video streaming platform: resumable uploads, HLS transcoding, comments and subscriptions. Watch the demo or run it yourself.
미디어TypeScript · ShellGitHub @azeemuddinaziz온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Video and image processing using ffmpeg.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗[!IMPORTANT] Status: Currently in active development for
v2.0.0. The platform is undergoing a complete rebuild. You can join the waitlist at StreamSouk to get notified once we're live.
StreamSouk is a video streaming platform built with a primary focus on learning and implementing those learnings.
The current iteration of StreamSouk is a self-managed monorepo. The primary goals for this rebuild are:
Two ways, pick one:
CLAUDE.md "Commands" describe the same things.Docker is the only prerequisite (about 4 GB of RAM allocated to it).
git clone https://github.com/azeemuddinaziz/streaming.git
cd streaming
docker compose up
Open http://localhost:3001. The API is on :3000 and the upload server (tusd) on :8080.
docker compose down. Accounts, Videos and uploads survive the next up.docker compose down -v (deletes the database, the uploaded bytes and the generated sign-in secret).docker compose restart worker.docker compose up --build.Limits: the first build takes several minutes, and transcoding speed depends on your machine. Media and share links use localhost, so they only work on the same machine. This is not for production: no TLS, no backups, and bytes stay on disk instead of S3.
The seed fills a fresh run with demo content, so the home page is not empty. It creates demo Users (demo-user-N), Videos (generated 8-second clips, processed by the worker like a real upload; one in six is Unlisted, the rest Public), Comments with Replies, Likes and Dislikes, and a ring of Subscriptions. It waits until every Video is ready (5 minute limit) and is safe to run again: it only adds what is missing.
| Flag | Range | Default |
|---|---|---|
--users N | 1 to 10 | 3 |
--videos N | 1 to 50 | 6 |
--comments-per-video N | 0 to 10 | 2 |
--help prints the same. The demo Users sign in with their email [email protected] (for example [email protected]) and the password demo-password, which is known to everyone, so use it on a local run only. The seed refuses to run under NODE_ENV=production or with S3_BUCKET set.
docker compose run --rm api ./node_modules/.bin/tsx src/seed.ts --users 5 --videos 12
Leave the flags out for the defaults. Then open http://localhost:3001; Videos appear on the home page as they finish processing.pnpm --filter server seed --users 5 --videos 12.docker compose down -v deletes everything, the demo data included.This is the source of truth for running StreamSouk from a clone. You run a Postgres database and four processes: the API, the background worker, the upload server (tusd) and the web app.
| Tool | Version | macOS (Homebrew) | Linux (Debian/Ubuntu) |
|---|---|---|---|
| Node | 24 (what the Docker images use) | brew install node@24 | nvm install 24, or nodejs.org |
| pnpm | the repo pins 12.4.2 and pnpm downloads it when needed | brew install pnpm | npm i -g pnpm |
| Postgres | 17 (what Docker uses) | brew install postgresql@17 && brew services start postgresql@17 | sudo apt install postgresql && sudo systemctl start postgresql |
tusd | 2.x | brew install tusd | binary from the tusd releases, put on your PATH |
ffmpeg and ffprobe | any recent (one package provides both) | brew install ffmpeg | sudo apt install ffmpeg |
Check: node -v, pnpm -v, psql --version, tusd -version, ffmpeg -version, ffprobe -version.
git clone https://github.com/azeemuddinaziz/streaming.git
cd streaming
pnpm install
One for the app and a separate one the tests are allowed to wipe (only needed to run pnpm --filter server test).
createdb streamsouk
createdb streamsouk_test
On Linux the postgres user usually owns the server, so use sudo -u postgres createdb ... (and create a role for yourself with sudo -u postgres createuser --superuser $USER).
cp server/.env.example server/.env
cp web/.env.example web/.env.local
Edit server/.env:
DATABASE_URL=postgresql://<you>@localhost:5432/streamsouk (add :<password> after the user if your Postgres has one; on a default Homebrew or Postgres.app install there is none).TEST_DATABASE_URL=postgresql://<you>@localhost:5432/streamsouk_test (must differ from DATABASE_URL).JWT_SECRET: paste the output of openssl rand -base64 48.WEB_ORIGIN as http://localhost:3001 and S3_BUCKET unset: uploaded bytes then stay on disk under server/data/.web/.env.local works as copied.
pnpm --filter server generate
pnpm --filter server exec prisma migrate deploy
(pnpm --filter server migrate is prisma migrate dev, for changing the schema.) To prepare the test database too: DATABASE_URL=<your TEST_DATABASE_URL> pnpm --filter server exec prisma migrate deploy.
One terminal each, from the repo root:
| Process | Command | Port |
|---|---|---|
| API | pnpm --filter server dev | 3000 |
| Worker (transcoding, cleanup) | pnpm --filter server worker | none |
| Upload server | pnpm --filter server tusd | 8080 |
| Web | pnpm --filter web dev | 3001 |
Want demo content instead? See Demo data.
If the Video stays on Processing, look at the worker terminal. curl http://localhost:3000/api/v1/videos returning {"videos":[],...} confirms the API and the database.
EADDRINUSE on 3000, 3001 or 8080): stop the other process, or run the API on another port with PORT=<n> in server/.env (the tusd script reads it too, and also set API_URL and NEXT_PUBLIC_API_URL in web/.env.local). For the web app: pnpm --filter web exec next dev -p <n>, and set WEB_ORIGIN in server/.env and NEXT_PUBLIC_WEB_ORIGIN to match. If Docker is running, docker compose down frees all three.tusd: command not found: install it (step 1) and make sure it is on your PATH; open a new terminal after installing.pnpm --filter server tusd must be running, and WEB_ORIGIN in server/.env must be exactly the address in your browser (http://localhost:3001, not 127.0.0.1).ffmpeg and ffprobe must be on the worker's PATH; run ffmpeg -version. The worker must also be running. A failed Video has a Retry button in Studio.localhost for both the web app and the API (not an IP address or a mix), and keep NEXT_PUBLIC_API_URL pointing at the API's address.JWT_SECRET or DATABASE_URL errors on start, or Environment variable not found: the file must be server/.env, and the commands must be run through pnpm --filter server.Cannot find module .../generated/prisma): run pnpm --filter server generate.The legacy version of StreamSouk (v1) has been officially deprecated and taken offline to make way for the new infrastructure. It featured basic video upload via Cloudinary, user authentication, and profile management, utilizing separate frontend and backend repositories.
If you are interested in the legacy code or the architectural starting point of this project, you can view the historical snapshot here:
StreamSouk is released under the MIT License.