Thanks for your interest in contributing! This guide will help you get started.
- Python 3.11+
- PostgreSQL 16+
- FFmpeg (with libzimg for HDR tone-mapping)
- Docker & Docker Compose (for containerised development)
# Clone the repo
git clone https://github.com/reedylab/transcodarr.git
cd transcodarr
# Create a virtual environment
python -m venv .venv
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # Windows
# Install dependencies
pip install -r requirements.txt
pip install -e .
# Install test dependencies
pip install pytest
# Copy and configure environment
cp .env.example .env
# Edit .env with your local settings (Postgres credentials, paths, etc.)pytest tests/ -vdocker compose up -d --buildThe UI will be available at http://localhost:5025.
Open a GitHub Issue with:
- Steps to reproduce
- Expected vs. actual behaviour
- Docker logs or tracebacks if available
- Your environment (OS, Docker version, FFmpeg version)
Open an issue with the feature request label. Describe the use-case and why it would be useful.
- Fork the repo and create a branch from
master. - Make your changes — keep commits focused and atomic.
- Add or update tests if your change affects behaviour.
- Run
pytest tests/ -vand ensure all tests pass. - Open a PR against
masterwith a clear description of your changes.
- Follow existing patterns in the codebase.
- Use meaningful variable and function names.
- Keep functions focused — one function, one job.
- Add comments only where the logic isn't self-evident.
transcodarr/
├── srt/transcodarr_core/ # Core library (config, database, ffmpeg, pipeline, subtitles)
├── web/ # Flask/Gunicorn web app
│ ├── blueprints/ # API and UI route blueprints
│ ├── static/ # CSS, JS
│ └── templates/ # Jinja2 templates
├── tests/ # Test suite
├── env_flag.py # Stop-flag helper (reads/writes .env)
└── entrypoint.sh # Docker entrypoint
If you discover a security vulnerability, please do not open a public issue. Instead, email the maintainers directly so it can be addressed before disclosure.
By contributing, you agree that your contributions will be licensed under the MIT License.