Clipset is a private, self-hosted video sharing app for small communities.
It supports invitation-only accounts, uploads with admin-controlled quotas, background transcoding, progressive MP4 playback, and HLS playback with short-lived playback tokens plus nginx-signed segment URLs.
- Private, invitation-only access
- Initial admin bootstrap on an empty install
- Manual password recovery through admin-generated reset links
- Authenticated password changes for signed-in users
- Manual, admin-driven weekly quota resets
- Admin settings for upload limits and transcoding behavior
- Progressive MP4 and HLS playback depending on what exists for a video
git clone <your-fork-or-local-clone>
cd clipset
cp .env.example .env
# Generate secrets and place them in .env
openssl rand -base64 32 # JWT_SECRET
openssl rand -base64 24 # HLS_SIGNING_SECRET
openssl rand -base64 16 # POSTGRES_PASSWORD
docker compose up -dThen open http://localhost:8080.
On the first startup with an empty database, Clipset creates one admin account from INITIAL_ADMIN_EMAIL, INITIAL_ADMIN_USERNAME, and INITIAL_ADMIN_PASSWORD in .env.
docs/DEPLOYMENT.md- setup, compose files, environment, storage, and upgradesdocs/ADMIN_OPERATIONS.md- invites, recovery, quotas, account management, and settings behaviordocs/MEDIA_STREAMING.md- upload formats, transcoding, progressive playback, HLS, and token flowdocs/IMPROVEMENT_PLAN.md- implementation roadmap
- Storage paths are environment-managed, not editable in the admin UI.
- Upload limits are enforced across nginx, the backend, and the admin settings UI with a 10 GB hard ceiling.
- Transcoding settings affect new processing work; existing videos are not retroactively reprocessed.
- The public forgot-password endpoint is informational only; it does not issue reset tokens.
- There is currently no automated quota reset scheduler.
docker compose up -d
docker compose logs -f
cd backend && go test ./...
cd frontend && npm install && npm run buildThe default development stack exposes:
- app:
http://localhost:8080 - backend:
http://localhost:8000 - frontend dev server:
http://localhost:5173 - postgres:
localhost:5432
- Frontend: React 19, TypeScript, Vite, Tailwind CSS, TanStack Router
- Backend: Go 1.25, net/http, sqlc, River
- Database: PostgreSQL 16
- Proxy: nginx
- Media pipeline: FFmpeg with optional NVIDIA NVENC
Clipset now has backend regression coverage for core auth, invite, settings, streaming, and upload helper paths. There is no frontend automated test harness yet.
MIT