Contributing
Thanks for considering a contribution to Medix! The short version:
- Fork and clone
pip install -e ".[dev]"- Make your change
- Run
pytestandruff check .locally - Commit with a Conventional Commits message
- Open a PR
Dev setup
git clone https://github.com/vineethkrishnan/medix.gitcd medix
python3 -m venv .venvsource .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[dev]"This installs Medix in editable mode plus the test and lint tooling
(pytest, pytest-cov, ruff).
Project layout
medix/├── medix/│ ├── cli.py # Click CLI, interactive prompts, Rich UI│ ├── converter.py # FFmpeg wrapper, command building, conversion│ ├── dependencies.py # FFmpeg detection & auto-install│ └── formats.py # Format/codec/preset/bitrate constants├── tests/ # 119+ unit tests├── docs/ # This Astro documentation site└── .github/workflows/ # CI + release-please + docs deployCode style
- Ruff handles both linting and formatting.
- Run
ruff check .andruff format .before pushing. - Follow the existing module layout — UI in
cli.py, ffmpeg logic inconverter.py, dependency detection independencies.py.
Commit style
Medix uses Conventional Commits with Release Please for automated releases. Your commit prefix determines the release bump:
| Prefix | Effect |
|---|---|
feat: | minor bump |
fix: | patch bump |
feat!: or BREAKING CHANGE: | major bump |
chore:, docs:, refactor:, test:, ci:, style: | no bump |
Running tests
# Full suitepytest
# With coveragepytest --cov=medix --cov-report=term-missing
# A specific filepytest tests/test_converter.py
# A specific testpytest tests/test_converter.py::TestBuildCommand::test_video_codec_h264See Testing for deeper details.
Docs
The docs in docs/ are built with Astro Starlight
and deployed to Cloudflare Pages on every merge to main that touches
docs/. To preview locally:
cd docsnpm installnpm run devThen open http://localhost:4321.
Reporting bugs
Open an issue on GitHub and include:
- Your OS and Python version
medix --versionffmpeg -version- Exact command and full error output