{"id":16526047,"url":"https://github.com/3ll3d00d/beqdesigner","last_synced_at":"2026-04-05T18:03:20.940Z","repository":{"id":33068698,"uuid":"145038759","full_name":"3ll3d00d/beqdesigner","owner":"3ll3d00d","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-08T21:21:35.000Z","size":15439,"stargazers_count":32,"open_issues_count":30,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-03-09T02:41:24.928Z","etag":null,"topics":["audio-analysis","python3","qt5","signal-processing"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/3ll3d00d.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-08-16T21:01:34.000Z","updated_at":"2026-03-08T21:21:29.000Z","dependencies_parsed_at":"2023-02-13T03:31:54.775Z","dependency_job_id":"d2d4fe6c-269d-4376-959f-b38b8650e988","html_url":"https://github.com/3ll3d00d/beqdesigner","commit_stats":null,"previous_names":[],"tags_count":289,"template":false,"template_full_name":null,"purl":"pkg:github/3ll3d00d/beqdesigner","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3ll3d00d%2Fbeqdesigner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3ll3d00d%2Fbeqdesigner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3ll3d00d%2Fbeqdesigner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3ll3d00d%2Fbeqdesigner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/3ll3d00d","download_url":"https://codeload.github.com/3ll3d00d/beqdesigner/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3ll3d00d%2Fbeqdesigner/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30380099,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T06:09:32.197Z","status":"ssl_error","status_checked_at":"2026-03-11T06:09:17.086Z","response_time":84,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio-analysis","python3","qt5","signal-processing"],"created_at":"2024-10-11T17:25:46.540Z","updated_at":"2026-04-05T18:03:20.926Z","avatar_url":"https://github.com/3ll3d00d.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://github.com/3ll3d00d/beqdesigner/workflows/run%20tests/badge.svg)](https://github.com/3ll3d00d/beqdesigner/actions)\n\n# BEQDesigner\n\nA Qt desktop app for designing, analysing and applying Bass EQ (BEQ) filters for\nmovie soundtracks.\n\n**User documentation lives at [beqdesigner.readthedocs.io](https://beqdesigner.readthedocs.io/).**\nStart there if you want to know what BEQ is, how to install a release build, or\nhow to use the app. This README is for developers working on the source.\n\n## Developer quickstart\n\nRequirements: Python 3.13, [Poetry](https://python-poetry.org/), and (optional,\nruntime only) `ffmpeg` + `graphviz`.\n\n```sh\npoetry env use python3.13\npoetry install\nPYTHONPATH=./src/main/python poetry run python src/main/python/app.py\n```\n\nThe `PYTHONPATH` prefix matches how CI invokes the app and tests — the source\nroot is `src/main/python`, not the repo root.\n\n### Tests\n\n```sh\nPYTHONPATH=./src/main/python poetry run pytest --cov=./src/main/python\n```\n\nTests live in `src/test/python/` and run on every push via\n`.github/workflows/test.yaml` across Linux, macOS and Windows.\n\n### Building the app bundle\n\nRelease binaries are produced by PyInstaller from `beqdesigner.spec`:\n\n```sh\npoetry run pip install pyinstaller\npoetry run pyinstaller --clean --log-level=INFO beqdesigner.spec\n```\n\nOn macOS this yields `dist/beqdesigner.app`. On Linux a virtual X server is\nrequired (`Xvfb`) — see the `Create distribution` step in `test.yaml` for the\nexact invocation used in CI.\n\n## Project layout\n\n| Path | Contents |\n|---|---|\n| `src/main/python/app.py` | Entry point — creates `QApplication` and `BeqDesigner` main window |\n| `src/main/python/ui/` | Qt Designer `.ui` files and their generated `.py` equivalents, plus view code |\n| `src/main/python/model/` | Non-UI logic: filters, signals, IIR, ffmpeg, minidsp, jriver, htp1, checker, preferences, … |\n| `src/main/python/acoustics/` | DSP helpers (smoothing, weighting, standards) |\n| `src/main/python/mpl.py`, `svg.py`, `style/` | Matplotlib integration, SVG export, mpl styles |\n| `src/test/python/` | pytest suite + fixtures |\n| `beqdesigner.spec` | PyInstaller build recipe (Windows / Linux / macOS branches) |\n| `.github/workflows/` | `test.yaml` (CI) and `create-app.yaml` (release builds) |\n| `docs/` | Source for the readthedocs site (MkDocs) |\n\n## Working with Qt Designer files\n\nForms are edited as `.ui` files in Qt Designer and compiled to Python with\n`pyuic6`:\n\n```sh\ncd src/main/python/ui\npoetry run pyuic6 foo.ui -o foo.py\n```\n\nSee `src/main/python/ui/convert.sh` and `convert.bat` for batch scripts (the\npaths in them are hard-coded to a contributor's venv — regenerate the pyuic6\npath from your own `poetry env info --path`).\n\nGenerated `.py` files **are** checked in — regenerate them whenever the `.ui`\nchanges. Do not hand-edit the generated files.\n\n## Conventions worth knowing\n\n- `qtpy` is used as the Qt abstraction layer but the environment is pinned to\n  PyQt6 at the top of `app.py`. Import from `qtpy.*`, not `PyQt6.*`, in new code.\n- Logging goes through an in-memory `RollingLogger` (`model/log.py`) surfaced\n  via *Help → Logs* in the UI — there is no on-disk log file, so run from a\n  terminal to see tracebacks.\n- User settings are stored via `QSettings` under\n  `~/Library/Preferences/com.3ll3d00d.beqdesigner.plist` (macOS) /\n  registry (Windows) / `~/.config/3ll3d00d/beqdesigner.conf` (Linux).\n- Version string is read from `src/main/python/VERSION` — CI writes the short\n  git SHA into this file at build time; running from source without it falls\n  back to `0.0.0-alpha.1`.\n\n## Further reading\n\n- User guide, workflows and UI reference: \u003chttps://beqdesigner.readthedocs.io/\u003e\n- Concepts (what BEQ is, pre- vs post-bass-management): `docs/index.md`,\n  `docs/concepts.md`, `docs/workflow/`\n- Install instructions for release binaries: \u003chttps://beqdesigner.readthedocs.io/en/latest/install/\u003e\n- Release/download page: \u003chttps://github.com/3ll3d00d/beqdesigner/releases\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3ll3d00d%2Fbeqdesigner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F3ll3d00d%2Fbeqdesigner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3ll3d00d%2Fbeqdesigner/lists"}