MyGo 云音乐
用 Go 与 MyGo 写成的第三方网易云音乐桌面客户端。原生界面,没有 WebView;边下边播,无损与 Hi-Res,逐字歌词与「律动」,刘海播放器。
Translation pending
StreamSouk is a video streaming platform: resumable uploads, HLS transcoding, comments and subscriptions. Watch the demo or run it yourself.
MediaTypeScript · ShellGitHub @azeemuddinazizOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Video and image processing using ffmpeg.
Taken from the repository README
Loading the full README.
Read the full 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.