Thank you for your interest in contributing to DeepFilterNet! This document provides guidelines and instructions for contributing.
Please be respectful and constructive in all interactions. We aim to maintain a welcoming and inclusive community.
Before creating a bug report, please check existing issues to avoid duplicates. When creating a bug report, include:
- A clear and descriptive title
- Steps to reproduce the issue
- Expected vs. actual behavior
- Version information (
deepFilter --versionordeep-filter --version) - Operating system and environment details
- Relevant log output
Use the Bug Report template when creating bug reports.
Feature requests are welcome! Please use the Feature Request template and provide:
- Clear description of the feature
- Use cases and benefits
- Possible implementation approach (if applicable)
- Fork the repository and create a new branch from
main - Make your changes following our coding standards
- Test your changes thoroughly
- Commit your changes with clear, descriptive commit messages
- Push to your fork and submit a pull request
- Fill out the pull request template completely
- Link related issues using keywords (e.g., "Fixes #123")
- Keep changes focused and atomic
- Ensure all tests pass
- Update documentation as needed
- Rust (via rustup)
- Python 3.10+
- Maturin for building Python wheels
cd path/to/DeepFilterNet/
# Recommended one-step setup
./setup.sh --all
# Or manual Python development setup
python -m venv .venv
source .venv/bin/activate
pip install -U pip setuptools wheel maturin
pip install -e ./DeepFilterNet[train,eval,dev]
# Rebuild Rust-backed Python packages in-place when you change them
maturin develop --release -m pyDF/Cargo.toml
# Optional: Build libdfdata for dataset functionality
maturin develop --release -m pyDF-data/Cargo.tomlWe use the following tools for Python code quality:
- black: Code formatting (line length: 120)
- isort: Import sorting
- flake8: Linting
Run formatters and linters:
# Format code
black .
isort .
# Check linting
flake8Configuration files:
.flake8- Flake8 configurationpyproject.toml- Black and isort configuration
We use standard Rust tooling:
- rustfmt: Code formatting
- clippy: Linting
Run formatters and linters:
# Format code
cargo fmt
# Check linting
cargo clippy --all-features -- -D warningsConfiguration files:
rustfmt.toml- Rustfmt configurationclippy.toml- Clippy configuration
cd DeepFilterNet
python df/scripts/test_df.pycargo test --all-featurescargo build --release -p deep_filtermaturin build --release -m pyDF/Cargo.tomlWhile not strictly enforced, we encourage following the Conventional Commits format:
<type>(<scope>): <description>
[optional body]
[optional footer]
Types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting, etc.)refactor: Code refactoringtest: Adding or updating testschore: Maintenance tasks
Examples:
feat(libDF): add new STFT windowing option
fix(python): correct delay compensation calculation
docs: update installation instructions for Windows
All pull requests run through automated checks:
- Python Lint: black, isort, flake8 must pass
- Rust Lint: rustfmt and clippy must pass
- CodeQL: Security analysis for vulnerabilities
- Dependency Review: Checks for vulnerable or incompatible dependencies
- PR Checks: Validates lockfile changes and commit format
- Tests: Integration tests (run on main branch and PRs)
You can run these checks locally before submitting your PR to catch issues early.
Releases are managed by maintainers. Version numbers follow Semantic Versioning.
- Questions: Use GitHub Discussions
- Bugs: File an issue using the bug report template
- Features: File an issue using the feature request template
By contributing, you agree that your contributions will be dual-licensed under MIT and Apache-2.0 licenses, matching the project's existing license terms.
Contributors will be acknowledged in release notes and the project documentation.
Thank you for contributing to DeepFilterNet! 🎉