{"id":50614838,"url":"https://github.com/kitze/freeframe-selfhost","last_synced_at":"2026-06-06T07:03:57.326Z","repository":{"id":360462843,"uuid":"1250253283","full_name":"kitze/freeframe-selfhost","owner":"kitze","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-26T13:11:05.000Z","size":2121,"stargazers_count":0,"open_issues_count":12,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-26T15:16:27.033Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kitze.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-26T12:59:41.000Z","updated_at":"2026-05-26T13:11:53.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/kitze/freeframe-selfhost","commit_stats":null,"previous_names":["kitze/freeframe-selfhost"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/kitze/freeframe-selfhost","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitze%2Ffreeframe-selfhost","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitze%2Ffreeframe-selfhost/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitze%2Ffreeframe-selfhost/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitze%2Ffreeframe-selfhost/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kitze","download_url":"https://codeload.github.com/kitze/freeframe-selfhost/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kitze%2Ffreeframe-selfhost/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33972412,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-06T02:00:07.033Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-06T07:03:56.460Z","updated_at":"2026-06-06T07:03:57.321Z","avatar_url":"https://github.com/kitze.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FreeFrame\n\n**Self-hostable, open-source media review platform. A collaborative alternative to Frame.io.**\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Docker](https://img.shields.io/badge/Docker-Ready-2496ED?logo=docker)](docker-compose.prod.yml)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](docs/contributing.md)\n\nFreeFrame gives production houses and creative teams a self-hosted platform for reviewing video, image, and audio assets with frame-accurate commenting, annotations, and approval workflows. Your media stays on your infrastructure.\n\n---\n\n## Features\n\n- **Video review** with HLS adaptive streaming and frame-accurate timecoded comments\n- **Image and audio review** with annotations and waveform visualization\n- **Drawing annotations** on any frame using canvas tools\n- **Threaded comments** with mentions, reactions, and attachments\n- **Approval workflows** with per-reviewer status tracking\n- **Version management** to compare iterations side-by-side\n- **Folder organization** within projects\n- **Team collaboration** with role-based permissions (org, team, project levels)\n- **Share links** for external reviewers (password-protected, expiring)\n- **Guest commenting** via share links (no account required)\n- **Due date tracking** with email reminders\n- **Real-time updates** via Server-Sent Events\n- **Self-hosted** with Docker Compose — runs on any server or cloud VM\n\n## Quick Start (Development)\n\n**Prerequisites:** Docker and Docker Compose\n\n```bash\ngit clone https://github.com/Techiebutler/freeframe.git\ncd freeframe\ncp .env.example .env\ndocker compose -f docker-compose.dev.yml up --build\n```\n\nOpen [http://localhost:3000](http://localhost:3000) to access FreeFrame. The first user to sign up becomes the super admin.\n\n**Services running in dev:**\n\n| Service     | URL                          |\n|-------------|------------------------------|\n| Frontend    | http://localhost:3000         |\n| API         | http://localhost:8000         |\n| API Docs    | http://localhost:8000/docs    |\n| MinIO Console | http://localhost:9001       |\n\n## Production Deployment\n\n```bash\ncp .env.example .env.prod\n# Edit .env.prod — set your credentials, S3, email config\n# For SSL: also set DOMAIN and ACME_EMAIL (Traefik auto-provisions Let's Encrypt certs)\ndocker compose --env-file .env.prod -f docker-compose.prod.yml up -d --build\n```\n\nFor the full guide including **SSL setup**, **bring-your-own infrastructure** (external database, Redis, S3, SMTP), scaling, and troubleshooting, see:\n\n**[Production Deployment Guide](docs/deployment.md)**\n\n## Architecture\n\n```\n                    ┌──────────────┐\n                    │   Traefik    │\n                    │   :80/:443   │\n                    └──────┬───────┘\n                           │\n               ┌───────────┴───────────┐\n               ▼                       ▼\n        ┌─────────────┐        ┌─────────────┐\n        │   Next.js    │        │   FastAPI    │\n        │   Frontend   │        │   Backend    │\n        └─────────────┘        └──────┬───────┘\n                                      │\n                    ┌─────────────────┼─────────────────┐\n                    ▼                 ▼                  ▼\n             ┌───────────┐    ┌───────────┐     ┌───────────────┐\n             │ PostgreSQL │    │   Redis    │     │  S3 Storage   │\n             │            │    │           │     │ (AWS/R2/MinIO) │\n             └───────────┘    └─────┬─────┘     └───────────────┘\n                                    │\n                         ┌──────────┴──────────┐\n                         ▼                     ▼\n                  ┌─────────────┐      ┌─────────────┐\n                  │   Celery     │      │   Celery     │\n                  │  Transcoder  │      │   Email      │\n                  └─────────────┘      └─────────────┘\n```\n\n## Tech Stack\n\n| Component    | Technology                                       |\n|--------------|--------------------------------------------------|\n| Frontend     | Next.js 14, React 18, Tailwind CSS, Zustand      |\n| Backend      | FastAPI, SQLAlchemy, Pydantic                    |\n| Database     | PostgreSQL 15                                     |\n| Queue        | Celery + Redis                                    |\n| Transcoding  | FFmpeg (multi-bitrate HLS)                        |\n| Storage      | Any S3-compatible (AWS, R2, B2, MinIO)           |\n| Proxy        | Traefik (auto SSL via Let's Encrypt)              |\n| Auth         | JWT + magic code email login                      |\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Production Deployment](docs/deployment.md) | SSL, bring-your-own infra, scaling, troubleshooting |\n| [Architecture](docs/architecture.md) | System design, data flow, media pipeline, permissions |\n| [Contributing](docs/contributing.md) | Dev setup, testing, code style, PR process |\n| [Environment Variables](.env.example) | Full config reference with comments |\n\n## Contributing\n\nWe welcome contributions! Please read our [Contributing Guide](docs/contributing.md) to get started.\n\n## License\n\nMIT License — see [LICENSE](LICENSE) for details.\n\n---\n\n## Contact \u0026 Support\n\n\u003cdiv align=\"center\"\u003e\n\n**A project by [Techiebutler](https://techiebutler.com)**\n\nHave questions? Need help?\n\n**Email:** [support@techiebutler.com](mailto:support@techiebutler.com)\n\n[![Instagram](https://img.shields.io/badge/Instagram-%23E4405F.svg?style=for-the-badge\u0026logo=Instagram\u0026logoColor=white)](https://www.instagram.com/techie_butler/)\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-%230077B5.svg?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/company/techiebutler/)\n\nStar the repo if FreeFrame is useful to you!\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkitze%2Ffreeframe-selfhost","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkitze%2Ffreeframe-selfhost","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkitze%2Ffreeframe-selfhost/lists"}