... because good video clips shouldn't cost a fortune or come with ugly watermarks.
OpusClip charges $15-29/month and slaps watermarks on every free video. SupoClip gives you the same AI-powered video clipping capabilities - completely free, completely open source, and completely watermark-free, while still providing you with a hosted version, that doesn't cost the same amount as your mortgage.
For the hosted version, sign up for the waitlist here: SupoClip Hosted
OpusClip is undeniably powerful. It's an AI video clipping tool that can turn long-form content into viral short clips with features like:
- AI-powered clip generation from long videos
- Automated captions with 97%+ accuracy
- Virality scoring to predict viral potential
- Multi-language support (20+ languages)
- Brand templates and customization
But here's the catch:
- Free plan limitations: Only 60 minutes of processing per month
- Watermarks everywhere: Every free video gets branded with OpusClip's watermark
- Expensive pricing: $15/month for Starter, $29/month for Pro
- Processing limits: Even paid plans have strict minute limits
- Vendor lock-in: Your content and workflows are tied to their platform
SupoClip provides the same core functionality without the financial burden:
→ ✅ Completely Free - No monthly fees, no processing limits
→ ✅ No Watermarks - Your content stays yours
→ ✅ Open Source - Full transparency, community-driven development
→ ✅ Self-Hosted - Complete control over your data and processing
→ ✅ Unlimited Usage - Process as many videos as your hardware can handle
→ ✅ Customizable - Modify and extend the codebase to fit your needs
- Docker and Docker Compose
- An AssemblyAI API key (for transcription) - Get one here
- An LLM provider for AI analysis - OpenAI, Google, Anthropic, or Ollama
git clone https://github.com/your-username/supoclip.git
cd supoclipCreate a .env file in the root directory:
# Required: Video transcription
ASSEMBLY_AI_API_KEY=your_assemblyai_api_key
# Required: Choose ONE LLM provider and set its API key
# Option A: Google Gemini (recommended - fast & cost-effective)
LLM=google-gla:gemini-3-flash-preview
GOOGLE_API_KEY=your_google_api_key
# Option B: OpenAI GPT-5.2 (best reasoning)
# LLM=openai:gpt-5.2
# OPENAI_API_KEY=your_openai_api_key
# Option C: Anthropic Claude
# LLM=anthropic:claude-4-sonnet
# ANTHROPIC_API_KEY=your_anthropic_api_key
# Option D: Ollama (local/self-hosted)
# LLM=ollama:gpt-oss:20b
# OLLAMA_BASE_URL=http://localhost:11434/v1
# OLLAMA_API_KEY=your_ollama_api_key # Optional (Ollama Cloud)
# Optional: Auth secret (change in production)
BETTER_AUTH_SECRET=change_this_in_production
# Optional: DataFast analytics
# Track your deployed domain in DataFast
# NEXT_PUBLIC_DATAFAST_WEBSITE_ID=dfid_xxxxx
# NEXT_PUBLIC_DATAFAST_DOMAIN=your-domain.com
# NEXT_PUBLIC_DATAFAST_ALLOW_LOCALHOST=false
# Optional: Resend for waitlist confirmation emails
# RESEND_API_KEY=your_resend_api_key
# Optional: YouTube metadata provider
# `yt_dlp` preserves the existing metadata behavior
# `youtube_data_api` uses the official API first, then falls back to yt-dlp
# YOUTUBE_METADATA_PROVIDER=yt_dlp
# YOUTUBE_DATA_API_KEY=your_youtube_data_api_keydocker-compose up -dThis starts:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000 (docs at /docs)
- PostgreSQL: localhost:5432
- Redis: localhost:6379
First-time startup takes a few minutes. Check progress with:
docker-compose logs -fWait until you see health checks passing for all services.
Open http://localhost:3000 in your browser, create an account, and start clipping!
If you enable DataFast, also verify that:
/js/script.jsloads from your own app domain/api/eventsrequests are proxied through your app domain- custom goals appear after successful sign-up, sign-in, task creation, billing, feedback, or waitlist actions
Backend fails to start with API key error:
- Make sure you've set the correct LLM provider AND its corresponding API key in
.env - Default is
google-gla:gemini-3-flash-previewwhich requiresGOOGLE_API_KEY - If using
openai:gpt-5.2, you MUST setOPENAI_API_KEY - If using
ollama:*, run Ollama and (optionally) setOLLAMA_BASE_URL - Rebuild after changing
.env:docker-compose up -d --build
Videos stay queued / never process:
- Check worker logs:
docker-compose logs -f worker - Ensure Redis is healthy:
docker-compose logs redis - Verify API keys are correct
YouTube titles or duration lookup is failing:
YOUTUBE_METADATA_PROVIDER=yt_dlpkeeps the old metadata pathYOUTUBE_METADATA_PROVIDER=youtube_data_apirequires YouTube Data API v3 enabled in Google Cloud- Prefer
YOUTUBE_DATA_API_KEY; if it is unset, the backend will tryGOOGLE_API_KEY - The backend will automatically fall back to the other metadata provider if the primary one fails
videos.listcosts 1 quota unit per request
Performance tuning (default is fast mode):
DEFAULT_PROCESSING_MODE=fast|balanced|qualityFAST_MODE_MAX_CLIPS=4to cap clip count in fast modeFAST_MODE_TRANSCRIPT_MODEL=nanofor fastest transcript model- View aggregate metrics:
GET /tasks/metrics/performance
Prisma errors on Windows:
- Run
docker-compose down -vto clear volumes - Run
docker-compose up -d --buildto rebuild
Frontend shows database errors:
- Wait for PostgreSQL to fully initialize (check logs)
- The database is automatically created on first run
Font picker is empty / cannot select or upload fonts:
- Add fonts to
backend/fonts/– see backend/fonts/README.md for TikTok Sans and custom fonts - Ensure
BACKEND_AUTH_SECRETis set in.envwhen using the hosted/monetized setup - Font upload is Pro-only when monetization is enabled; self-hosted users can upload freely
Subscription emails are not sending:
- Set
RESEND_API_KEYandRESEND_FROM_EMAILin.env RESEND_FROM_EMAILmust be a verified sender/domain in your Resend account- The backend sends the “thank you for subscribing” email on
checkout.session.completed - The backend sends the “sorry to see you go” email on
customer.subscription.deleted
SupoClip now has a layered automated test setup:
pytestfor backend unit and integration testsVitestand Testing Library for frontend route and component coveragePlaywrightfor a small seeded browser smoke suite
Repo-level entrypoints:
make test
make test-backend
make test-frontend
make test-e2e
make test-ciApp-level entrypoints:
cd backend && uv sync --all-groups && .venv/bin/pytest
cd frontend && npm install && npm run test:coverage
cd frontend && npm run test:e2eLocal test runs expect PostgreSQL and Redis to be available. The easiest path is to start the stack with docker-compose up -d, then run the commands above. CI runs the same layers in GitHub Actions with Postgres and Redis service containers.
Detailed documentation now lives in docs/.
Start with:
docs/setup.mddocs/configuration.mddocs/app-guide.mddocs/architecture.mddocs/api-reference.mddocs/development.mddocs/troubleshooting.md
When you run SupoClip with monetization enabled (SELF_HOST=false), subscription lifecycle emails are sent through Resend by the backend:
checkout.session.completedsends the thank-you-for-subscribing emailcustomer.subscription.deletedsends the sorry-to-see-you-go email
Required env vars for this flow:
RESEND_API_KEYRESEND_FROM_EMAILBACKEND_AUTH_SECRETSTRIPE_SECRET_KEYSTRIPE_WEBHOOK_SECRETSTRIPE_PRICE_ID
See CLAUDE.md for detailed development instructions.
SupoClip is released under the AGPL-3.0 License. See LICENSE for details.