Thank you for considering contributing to TranscribAIr! This document provides guidelines and instructions for contributing to the project.
- Code of Conduct
- Getting Started
- Development Setup
- Project Structure
- Coding Standards
- Testing
- Submitting Changes
- Release Process
This project follows standard open-source community guidelines. Please be respectful and constructive in all interactions.
- Python 3.9 - 3.13
- Git
- No external dependencies required (audio handled by PyAV)
- Check the GitHub Issues page
- Look for issues tagged with
good first issueorhelp wanted - Comment on an issue before starting work to avoid duplication
-
Clone the repository
git clone https://github.com/otherworld-dev/TranscribAIr.git cd TranscribAIr -
Run automated setup
# Windows setup.bat # Linux/macOS ./setup.sh
This will:
- Create a virtual environment
- Install all dependencies
- Install all Python dependencies (including PyAV for audio)
-
Activate the virtual environment (if not already activated)
# Windows venv\Scripts\activate # Linux/macOS source venv/bin/activate
-
Run the application
# Windows run.bat # Linux/macOS ./run.sh
For development, install in editable mode with dev dependencies:
pip install -e ".[dev]"This installs:
- PyInstaller (for building executables)
- pytest (for testing)
- black (for code formatting)
- flake8 (for linting)
- mypy (for type checking)
TranscribAIr/
├── app.py # Main entry point
├── __version__.py # Version information
├── core/ # Core business logic
│ ├── transcriber.py # Whisper transcription
│ ├── recorder.py # Audio recording
│ ├── feedback.py # LLM feedback organization
│ ├── rubric.py # Rubric management
│ ├── settings.py # Settings persistence
│ ├── export.py # PDF/Word export
│ └── excel_import.py # Excel rubric import
├── ui/ # UI components
│ ├── main_window.py # Main application window
│ ├── upload_tab.py # File upload interface
│ ├── record_tab.py # Recording interface
│ ├── settings_dialog.py # Settings UI
│ ├── rubric_dialog.py # Rubric editor
│ └── feedback_panel.py # Feedback display
├── tests/ # Test files (to be added)
├── build.py # PyInstaller build script
├── build.spec # PyInstaller specification
├── installer.iss # Inno Setup installer script
└── pyproject.toml # Modern Python packaging config
- Follow PEP 8
- Use 4 spaces for indentation (configured in .editorconfig)
- Maximum line length: 100 characters
- Use type hints where appropriate
- Write docstrings for all public functions and classes
We use black for automatic code formatting:
black .Run flake8 to check for code issues:
flake8 core ui app.pyRun mypy for type checking:
mypy core ui app.py- Files: snake_case (e.g.,
audio_utils.py) - Classes: PascalCase (e.g.,
FeedbackOrganizer) - Functions/Methods: snake_case (e.g.,
load_model()) - Constants: UPPER_SNAKE_CASE (e.g.,
MAX_RETRIES) - Private members: Prefix with underscore (e.g.,
_internal_method())
pytest- Place tests in the
tests/directory - Name test files with
test_prefix (e.g.,test_transcriber.py) - Use descriptive test names (e.g.,
test_transcribe_with_timestamps()) - Test both success and failure cases
- Mock external dependencies (LLM APIs, file system when appropriate)
Example test:
def test_transcriber_loads_model():
"""Test that transcriber successfully loads a model."""
transcriber = Transcriber()
assert transcriber.load_model("tiny") is True
assert transcriber.model is not Nonemain- stable, production-ready codedevelop- integration branch for features (if needed)feature/*- new featuresfix/*- bug fixesdocs/*- documentation updates
-
Create a branch
git checkout -b feature/your-feature-name
-
Make your changes
- Write clear, concise commit messages
- Follow the coding standards
- Add tests for new functionality
-
Test your changes
pytest black . flake8 core ui app.py -
Update documentation
- Update README.md if needed
- Update CHANGELOG.md following Keep a Changelog
- Add docstrings to new functions/classes
-
Commit your changes
git add . git commit -m "Add feature: your feature description"
-
Push to GitHub
git push origin feature/your-feature-name
-
Create a Pull Request
- Go to GitHub and create a Pull Request
- Fill in the PR template (if available)
- Link related issues
- Request review from maintainers
Follow conventional commits format:
<type>: <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: Add Excel rubric import functionality
fix: Resolve audio conversion issue on Windows
docs: Update installation instructions
Releases are managed by project maintainers. The process involves:
- Update
__version__.pywith new version number - Update
CHANGELOG.mdwith release notes - Create an annotated git tag (e.g.,
v1.3.0) - Build executables locally (CUDA and CPU variants)
- Create GitHub release manually and upload artifacts
We follow Semantic Versioning:
- MAJOR version: Incompatible API changes
- MINOR version: New functionality (backwards-compatible)
- PATCH version: Bug fixes (backwards-compatible)
python build.pyThis creates:
dist/Transcribair/Transcribair.exe- Standalone Windows executable (onedir mode)- UPX and stripping disabled for compatibility
- Audio processing via PyAV (bundled automatically)
Requires Inno Setup:
- Build the executable first:
python build.py - Open
installer.issin Inno Setup Compiler - Click "Compile"
- Installer created in
Output/directory
- Documentation: Check the README and QUICKSTART
- Issues: Search existing GitHub Issues
- Questions: Open a new issue with the
questionlabel
By contributing, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing to TranscribAIr! 🎉