Thanks for your interest in contributing. This document describes how to set up the project, the git workflow we follow, and the conventions your changes should respect.
By contributing you agree that your work is licensed under the project's GPL-3.0 license.
| Path | What it is |
|---|---|
research/ |
Python sandbox: embedding engines, evaluation tasks, benchmarks |
frontend/ |
Desktop UI (Avalonia 12 on .NET 10, C#) |
docs/ |
Design specs and documentation |
Most changes touch a single component. Keep a pull request scoped to one of them unless a change genuinely spans both.
cd research
python -m venv .venv
# Windows: .venv\Scripts\activate
# macOS / Linux: source .venv/bin/activate
pip install -r requirements.txt
pytest # run the test suiteRequires the .NET 10 SDK.
cd frontend
dotnet restore
dotnet build
dotnet runWe keep history linear and readable. Please follow these practices:
-
Never commit directly to
main. Branch off the latestmain:git switch main git pull --rebase origin main git switch -c feat/short-description
-
Name branches by type and scope, for example:
feat/clap-audio-engine,fix/loader-empty-doc,docs/contributing. -
Keep commits atomic. Each commit should be one self-contained, working change. Don't mix unrelated changes. Don't commit half-finished work.
-
Rebase, don't merge. Keep your branch up to date with
git pull --rebase origin main. This avoids noisy merge commits. -
Force-push only your own feature branch (
git push --force-with-lease), never a shared branch. -
Run the relevant test suite and make sure it passes before opening a PR.
We use Conventional Commits. Format:
<type>: <imperative summary, ~50 chars>
<optional body explaining what and why, wrapped at ~72 chars>
Types: feat, fix, docs, refactor, test, chore, perf.
Rules:
- Use the imperative mood: "add CLAP engine", not "added" or "adds".
- Keep the summary under ~50 characters and don't end it with a period.
- Explain the why in the body when it isn't obvious from the diff.
- Reference issues in the body, for example
Closes #12.
Example:
feat: add CLAP audio embedding engine
CLAP gives a shared text-audio space, so a text query can retrieve
audio clips directly. Benchmarked against the MFCC baseline on ESC-50.
-
Follow PEP 8.
-
Docstrings use compact numpydoc: a section header underlined with
---(three dashes), and one-linename : descriptionentries with single spaces, no colon-alignment padding:"""Engine summary. Parameters --- model_name : HuggingFace model id (default ...) batch_size : number of items per forward pass (default 32) """
-
Don't add decorative comment dividers (no
# ---- Section ----). A short# Sectioncomment is enough. -
New engines, tasks, and loaders should have a focused test under
research/tests/.
- Follow the standard .NET / C# conventions (PascalCase for types and members,
_camelCasefor private fields). - Keep
dotnet buildwarning-free.
- Rebase onto the latest
mainand ensure history is clean (squash fixup commits). - Make sure tests pass and the build succeeds.
- Open the PR against
mainwith a clear description of what changed and why. Link any related issues. - Be ready to address review feedback by amending or adding commits and force-pushing your branch.
Open an issue describing the problem, the steps to reproduce it, and what you
expected. Include your OS and the component (research or frontend).