mini-eq 0.7.2__tar.gz → 0.7.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mini_eq-0.7.2 → mini_eq-0.7.4}/AGENTS.md +45 -47
- {mini_eq-0.7.2 → mini_eq-0.7.4}/CHANGELOG.md +23 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/MANIFEST.in +1 -0
- {mini_eq-0.7.2/src/mini_eq.egg-info → mini_eq-0.7.4}/PKG-INFO +14 -153
- mini_eq-0.7.4/README.md +91 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/data/io.github.bhack.mini-eq.metainfo.xml +21 -2
- mini_eq-0.7.4/docs/development.md +193 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/docs/flathub.md +27 -82
- {mini_eq-0.7.2 → mini_eq-0.7.4}/docs/performance.md +19 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/docs/release.md +124 -91
- {mini_eq-0.7.2 → mini_eq-0.7.4}/extensions/gnome-shell/mini-eq@bhack.github.io/extension.js +15 -6
- {mini_eq-0.7.2 → mini_eq-0.7.4}/io.github.bhack.mini-eq.yaml +2 -2
- {mini_eq-0.7.2 → mini_eq-0.7.4}/pyproject.toml +2 -2
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/app.py +88 -23
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/core.py +24 -3
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/dbus_control.py +1 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/deps.py +14 -5
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/pipewire_backend.py +359 -33
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/pipewire_routes.py +86 -45
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/pipewire_stream_router.py +101 -4
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/routing.py +174 -72
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/settings.py +2 -2
- {mini_eq-0.7.2 → mini_eq-0.7.4/src/mini_eq.egg-info}/PKG-INFO +14 -153
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq.egg-info/SOURCES.txt +15 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq.egg-info/requires.txt +1 -1
- mini_eq-0.7.4/tests/test_check_flatpak_runtime.py +39 -0
- mini_eq-0.7.4/tests/test_check_headless_pipewire_runtime.py +73 -0
- mini_eq-0.7.4/tests/test_check_live_ui_runtime.py +59 -0
- mini_eq-0.7.4/tests/test_github_workflows.py +119 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_app.py +73 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_core.py +14 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_dbus_control.py +1 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_deps.py +24 -4
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_pipewire_backend.py +568 -55
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_pipewire_stream_router.py +179 -6
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_routing.py +294 -20
- mini_eq-0.7.4/tests/test_prepare_release.py +57 -0
- mini_eq-0.7.4/tests/test_release_preflight.py +171 -0
- mini_eq-0.7.4/tests/test_release_runtime_gate.py +178 -0
- mini_eq-0.7.4/tests/test_release_status.py +139 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/check_flatpak_runtime.py +17 -10
- mini_eq-0.7.4/tools/check_headless_pipewire_runtime.py +455 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/check_live_ui_runtime.py +116 -14
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/check_pipewire_gobject.py +13 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/gnome-shell-extension/fake_mini_eq_control.py +28 -3
- mini_eq-0.7.4/tools/prepare_release.py +162 -0
- mini_eq-0.7.4/tools/release_gates.py +47 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/release_preflight.py +142 -22
- mini_eq-0.7.4/tools/release_runtime_gate.py +200 -0
- mini_eq-0.7.4/tools/release_status.py +445 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/run_flatpak_runtime_smoke_ci.sh +6 -3
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/run_gnome_extension_dev_shell.sh +23 -9
- mini_eq-0.7.4/tools/run_headless_pipewire_runtime_smoke_ci.sh +36 -0
- mini_eq-0.7.4/tools/run_live_ui_runtime_smoke_ci.sh +36 -0
- mini_eq-0.7.4/tools/run_nested_flathub_extension_smoke.sh +168 -0
- mini_eq-0.7.2/README.md +0 -230
- mini_eq-0.7.2/tests/test_check_flatpak_runtime.py +0 -23
- mini_eq-0.7.2/tests/test_release_preflight.py +0 -63
- {mini_eq-0.7.2 → mini_eq-0.7.4}/LICENSE +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/SECURITY.md +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/data/io.github.bhack.mini-eq.desktop +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/docs/screenshots/README.md +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/docs/screenshots/mini-eq-dark.png +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/docs/screenshots/mini-eq.png +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/docs/social-preview.png +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/extensions/gnome-shell/README.md +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/extensions/gnome-shell/mini-eq@bhack.github.io/metadata.json +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/extensions/gnome-shell/mini-eq@bhack.github.io/mini-eq-symbolic.svg +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/python3-dependencies.yaml +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/setup.cfg +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/__init__.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/__main__.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/analyzer.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/analyzer_widget.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/appearance.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/assets/icons/hicolor/scalable/apps/io.github.bhack.mini-eq.svg +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/assets/icons/hicolor/symbolic/apps/io.github.bhack.mini-eq-symbolic.svg +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/background.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/band_fader.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/cli.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/desktop_integration.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/ebur128.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/filter_chain.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/glib_utils.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/gtk_utils.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/instance.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/screenshot.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/style.css +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/window.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/window_analyzer.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/window_graph.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/window_headroom.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/window_layout.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/window_preferences.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/window_presets.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/window_utility.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq/window_utils.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq.egg-info/dependency_links.txt +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq.egg-info/entry_points.txt +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/src/mini_eq.egg-info/top_level.txt +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_flathub_manifest_drift.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_gnome_shell_extension.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_analyzer.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_appearance.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_atspi_widgets.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_background.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_cli.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_desktop_integration.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_ebur128.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_filter_chain.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_instance.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_live_ui_runtime.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_output_presets.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_pipewire_routes.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_settings.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_window.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_window_analyzer.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_window_graph.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_mini_eq_window_headroom.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_release_post_publish.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tests/test_version_metadata.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/benchmark_fader_drag.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/check_flathub_manifest_drift.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/check_gnome_shell_extension.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/check_test_hygiene.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/demo_runtime.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/pack_gnome_shell_extension.sh +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/profile_live_app.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/profile_sysprof.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/release_post_publish.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/render_demo_screenshot.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/render_social_preview.py +0 -0
- {mini_eq-0.7.2 → mini_eq-0.7.4}/tools/run_release_preflight_container.sh +0 -0
|
@@ -34,6 +34,8 @@ paths in ignored repo-local skills under `.agents/skills/`.
|
|
|
34
34
|
- `io.github.bhack.mini-eq.yaml`: local Flatpak manifest.
|
|
35
35
|
- `python3-dependencies.yaml`: generated Flatpak Python dependencies.
|
|
36
36
|
- `tests/`: pytest suite for core behavior and non-visual integration seams.
|
|
37
|
+
- `docs/development.md`: source checkout, PyPI, local Flatpak, and extended
|
|
38
|
+
development test commands.
|
|
37
39
|
|
|
38
40
|
## Development Commands
|
|
39
41
|
|
|
@@ -61,15 +63,8 @@ and no-assert tests are candidates for human review, not automatic removals.
|
|
|
61
63
|
GTK virtual methods, signal callbacks, property bindings, and other framework
|
|
62
64
|
entry points often look unused to static analysis.
|
|
63
65
|
|
|
64
|
-
For
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
appstreamcli validate --no-net data/io.github.bhack.mini-eq.metainfo.xml
|
|
68
|
-
desktop-file-validate data/io.github.bhack.mini-eq.desktop
|
|
69
|
-
.venv/bin/python tools/check_gnome_shell_extension.py
|
|
70
|
-
.venv/bin/python -m build
|
|
71
|
-
.venv/bin/python -m twine check dist/*
|
|
72
|
-
```
|
|
66
|
+
For source install, PyPI package validation, local Flatpak builds, and extended
|
|
67
|
+
runtime smoke commands, use `docs/development.md`.
|
|
73
68
|
|
|
74
69
|
The app depends on system GI/audio packages that Python packaging cannot fully
|
|
75
70
|
install: GTK4, Libadwaita, PipeWire, a WirePlumber-managed session, and the
|
|
@@ -84,19 +79,40 @@ nested headless GNOME Shell session:
|
|
|
84
79
|
MINI_EQ_RUN_ATSPI=1 .venv/bin/python -m pytest tests/test_mini_eq_atspi_widgets.py -q
|
|
85
80
|
```
|
|
86
81
|
|
|
87
|
-
For
|
|
88
|
-
|
|
82
|
+
For PipeWire graph behavior without nested GNOME/AT-SPI, run the headless
|
|
83
|
+
controller smoke. It owns synthetic stream routing, default-output moves,
|
|
84
|
+
monitor toggles, and active processing-link assertions:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
.venv/bin/python tools/check_headless_pipewire_runtime.py --timeout 35 --cycles 2
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
For a deeper live UI smoke, run the real GTK app in a private PipeWire/WirePlumber
|
|
91
|
+
graph with synthetic playback and AT-SPI UI driving:
|
|
89
92
|
|
|
90
93
|
```bash
|
|
91
94
|
.venv/bin/python tools/check_live_ui_runtime.py --timeout 35 --cycles 1
|
|
92
95
|
MINI_EQ_RUN_LIVE_UI=1 .venv/bin/python -m pytest tests/test_mini_eq_live_ui_runtime.py -q
|
|
93
96
|
```
|
|
94
97
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
The headless PipeWire smoke is the stable native controller/graph gate and is
|
|
99
|
+
part of release preflight. The live UI smoke is opt-in locally because it needs
|
|
100
|
+
nested GNOME Shell, AT-SPI, PipeWire, and WirePlumber. Treat it as a maintainer
|
|
101
|
+
confidence check on a supported recent GNOME/GTK stack; the blocking public
|
|
102
|
+
release runtime gates are release preflight and the Flatpak routing smoke.
|
|
103
|
+
|
|
104
|
+
For manual GNOME Shell extension testing against an installed Flatpak build,
|
|
105
|
+
run the nested devkit smoke. It loads the extension from this checkout and
|
|
106
|
+
launches the installed Flatpak app in the same isolated nested display and
|
|
107
|
+
session bus:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
tools/run_nested_flathub_extension_smoke.sh --replace-running
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
When creating a fresh venv for pip/package validation, follow
|
|
114
|
+
`docs/development.md` so pipewire-gobject is built in a plain wheel-build venv
|
|
115
|
+
before being installed into a `--system-site-packages` Mini EQ venv.
|
|
100
116
|
|
|
101
117
|
## Change Guidelines
|
|
102
118
|
|
|
@@ -106,8 +122,11 @@ modules from a system-site build venv.
|
|
|
106
122
|
- Keep the pipewire-gobject API boundary small, general-purpose, and
|
|
107
123
|
app-facing. Mini EQ may validate new pipewire-gobject API in a real GTK app,
|
|
108
124
|
but do not add Mini EQ-shaped concepts, preset/filter-chain policy, or
|
|
109
|
-
hardware-selection policy to pipewire-gobject.
|
|
110
|
-
|
|
125
|
+
hardware-selection policy to pipewire-gobject. When changing public
|
|
126
|
+
pipewire-gobject API, follow the sibling checkout's `AGENTS.md` bindable API
|
|
127
|
+
gate: plain C/C99 public scalar types, no public GLib collections, explicit
|
|
128
|
+
ownership/nullability annotations, and generated GIR/test updates. WirePlumber
|
|
129
|
+
stays the host session manager, not a bundled GI dependency.
|
|
111
130
|
- Treat the Mini EQ D-Bus control interface as a project-internal app/Shell
|
|
112
131
|
extension contract with version-skew tolerance. Keep `api_version = 1`
|
|
113
132
|
additive only: add state fields, methods, and capabilities when needed, but do
|
|
@@ -166,19 +185,13 @@ Use `docs/social-preview.png` for GitHub and social link previews. This is not a
|
|
|
166
185
|
Flathub quality-check input, so it may use branded/dark promotional composition,
|
|
167
186
|
but it should be refreshed when the public screenshot changes materially.
|
|
168
187
|
|
|
169
|
-
Generate the public release screenshot with deterministic demo data:
|
|
170
|
-
|
|
171
|
-
```bash
|
|
172
|
-
PYTHONPATH=src python3 tools/render_demo_screenshot.py docs/screenshots/mini-eq.png
|
|
173
|
-
PYTHONPATH=src python3 tools/render_demo_screenshot.py docs/screenshots/mini-eq-dark.png --appearance dark
|
|
174
|
-
```
|
|
175
|
-
|
|
176
188
|
Do not commit screenshots that show personal device names, Bluetooth device
|
|
177
189
|
names, usernames, hostnames, local paths, or private preset names. Prefer
|
|
178
190
|
`tools/render_demo_screenshot.py` over desktop screenshots because it renders
|
|
179
191
|
only the Mini EQ window from deterministic demo data. Keep the public release
|
|
180
192
|
screenshot in the platform-default light appearance unless you are adding
|
|
181
193
|
additional screenshots that intentionally demonstrate other appearance modes.
|
|
194
|
+
Use `docs/screenshots/README.md` for the generation commands.
|
|
182
195
|
|
|
183
196
|
For visual or adaptive-layout changes, inspect deterministic screenshot
|
|
184
197
|
matrices before considering the work done. Cover the minimum, default, narrow,
|
|
@@ -201,31 +214,16 @@ renders on light and dark backgrounds.
|
|
|
201
214
|
|
|
202
215
|
## Release And Security
|
|
203
216
|
|
|
204
|
-
Use `docs/release.md` as the public release checklist.
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
be hardcoded separately.
|
|
211
|
-
|
|
212
|
-
Before publishing artifacts, run the release preflight. Prefer the
|
|
213
|
-
containerized wrapper when the host does not already have the `pipewire-gobject`
|
|
214
|
-
sdist build dependencies installed:
|
|
217
|
+
Use `docs/release.md` as the public release checklist. Use
|
|
218
|
+
`tools/prepare_release.py`, `tools/release_status.py`,
|
|
219
|
+
`tools/run_release_preflight_container.sh`, and
|
|
220
|
+
`tools/release_post_publish.py` for repeatable release checks. Keep
|
|
221
|
+
owner-specific workflow dispatch, deployment approval, and local Flathub merge
|
|
222
|
+
steps in ignored repo-local skills under `.agents/skills/`.
|
|
215
223
|
|
|
216
|
-
```bash
|
|
217
|
-
tools/run_release_preflight_container.sh
|
|
218
|
-
```
|
|
219
|
-
|
|
220
|
-
Set `MINI_EQ_FLATHUB_MANIFEST` to a Flathub publishing manifest path when the
|
|
221
|
-
containerized preflight should include the manifest drift check.
|
|
222
224
|
The preflight owns the focused leak scan for `HEAD`, tracked worktree changes,
|
|
223
225
|
and untracked non-ignored text files. Use Gitleaks as an extra check when
|
|
224
|
-
release history or generated artifacts look suspicious
|
|
225
|
-
|
|
226
|
-
```bash
|
|
227
|
-
gitleaks git --no-banner --redact .
|
|
228
|
-
```
|
|
226
|
+
release history or generated artifacts look suspicious.
|
|
229
227
|
|
|
230
228
|
Do not push local scratch branches or local safety tags.
|
|
231
229
|
Do not rewrite public history unless the user explicitly asks for it and accepts
|
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.7.4 - 2026-05-11
|
|
4
|
+
|
|
5
|
+
- Run filter-chain readiness callbacks from the GLib main context when PipeWire
|
|
6
|
+
reports the virtual sink asynchronously, avoiding thread-loop sync failures
|
|
7
|
+
during system-wide EQ startup.
|
|
8
|
+
- Require pipewire-gobject 0.3.7 and re-apply the active filter controls when
|
|
9
|
+
PipeWire creates or activates links on the Mini EQ processing path, so audio
|
|
10
|
+
resumed after silence starts processing without requiring an A/B toggle.
|
|
11
|
+
- Refresh port-aware output preset scope when PipeWire reports route parameter
|
|
12
|
+
serial changes on the active output device.
|
|
13
|
+
|
|
14
|
+
## 0.7.3 - 2026-05-11
|
|
15
|
+
|
|
16
|
+
- Require pipewire-gobject 0.3.6 and use its synchronous PipeWire registry,
|
|
17
|
+
metadata, node, and device APIs for startup and routing state.
|
|
18
|
+
- Replace Mini EQ's PipeWire startup and routing sleep loops with bounded sync
|
|
19
|
+
or registry-event waits for route params, virtual sink creation, and stream
|
|
20
|
+
routing.
|
|
21
|
+
- Avoid a headless startup hang when system-wide EQ fails synchronously before
|
|
22
|
+
the GLib main loop starts.
|
|
23
|
+
- Hide the GNOME Shell extension's mini analyzer while monitoring is turned
|
|
24
|
+
off, keeping the panel item available without showing stale meter bars.
|
|
25
|
+
|
|
3
26
|
## 0.7.2 - 2026-05-10
|
|
4
27
|
|
|
5
28
|
- Finish GNOME Shell startup notification after Mini EQ's delayed first-window
|
|
@@ -9,6 +9,7 @@ include src/mini_eq/assets/icons/hicolor/symbolic/apps/*.svg
|
|
|
9
9
|
include data/*.desktop
|
|
10
10
|
include data/*.metainfo.xml
|
|
11
11
|
include docs/flathub.md
|
|
12
|
+
include docs/development.md
|
|
12
13
|
include docs/performance.md
|
|
13
14
|
include docs/release.md
|
|
14
15
|
include docs/social-preview.png
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mini-eq
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.4
|
|
4
4
|
Summary: Compact PipeWire system-wide parametric equalizer for Linux desktops.
|
|
5
5
|
Author: bhack
|
|
6
6
|
License-Expression: GPL-3.0-or-later
|
|
@@ -25,7 +25,7 @@ Requires-Python: >=3.11
|
|
|
25
25
|
Description-Content-Type: text/markdown
|
|
26
26
|
License-File: LICENSE
|
|
27
27
|
Requires-Dist: numpy>=1.26
|
|
28
|
-
Requires-Dist: pipewire-gobject<0.4,>=0.3.
|
|
28
|
+
Requires-Dist: pipewire-gobject<0.4,>=0.3.7
|
|
29
29
|
Provides-Extra: test
|
|
30
30
|
Requires-Dist: pytest>=8; extra == "test"
|
|
31
31
|
Provides-Extra: dev
|
|
@@ -87,126 +87,26 @@ headphone measurement data, targets, and optimizer behind the web app.
|
|
|
87
87
|
|
|
88
88
|
## Install
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
1. Flathub, the preferred desktop install path.
|
|
93
|
-
2. PyPI, after the system desktop/audio dependencies below are installed.
|
|
94
|
-
3. Source checkout, for development or testing unreleased changes.
|
|
95
|
-
|
|
96
|
-
Install from Flathub:
|
|
90
|
+
The recommended desktop install path is Flathub:
|
|
97
91
|
|
|
98
92
|
```bash
|
|
99
93
|
flatpak install flathub io.github.bhack.mini-eq
|
|
100
94
|
flatpak run io.github.bhack.mini-eq
|
|
101
95
|
```
|
|
102
96
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
pipewire-gobject. Install PyGObject from your distro, such as `python3-gi` or
|
|
107
|
-
`python3-gobject`, rather than adding a PyPI PyGObject dependency to Mini EQ.
|
|
108
|
-
|
|
109
|
-
If your distro ships older GTK or Libadwaita builds, prefer the Flatpak build.
|
|
110
|
-
|
|
111
|
-
Package names vary by distro release. If pip builds pipewire-gobject from its
|
|
112
|
-
source distribution, install the GLib, GObject-Introspection, and PipeWire
|
|
113
|
-
development packages first. Virtual environments that need distro GI bindings
|
|
114
|
-
should use `--system-site-packages`; on Ubuntu/Debian, build the
|
|
115
|
-
pipewire-gobject wheel in a plain venv first, then install that wheel into the
|
|
116
|
-
system-site Mini EQ venv.
|
|
117
|
-
|
|
118
|
-
These are good starting points:
|
|
119
|
-
|
|
120
|
-
```bash
|
|
121
|
-
# Ubuntu / Debian
|
|
122
|
-
sudo apt install \
|
|
123
|
-
gir1.2-adw-1 \
|
|
124
|
-
gir1.2-gtk-4.0 \
|
|
125
|
-
gobject-introspection \
|
|
126
|
-
libgirepository1.0-dev \
|
|
127
|
-
libglib2.0-dev \
|
|
128
|
-
libpipewire-0.3-dev \
|
|
129
|
-
meson \
|
|
130
|
-
ninja-build \
|
|
131
|
-
pkg-config \
|
|
132
|
-
pipewire \
|
|
133
|
-
python3-cairo \
|
|
134
|
-
python3-pip \
|
|
135
|
-
python3-gi \
|
|
136
|
-
python3-setuptools \
|
|
137
|
-
python3-venv \
|
|
138
|
-
wireplumber \
|
|
139
|
-
libebur128-1
|
|
140
|
-
|
|
141
|
-
# Fedora
|
|
142
|
-
sudo dnf install \
|
|
143
|
-
gtk4 \
|
|
144
|
-
libadwaita \
|
|
145
|
-
gobject-introspection-devel \
|
|
146
|
-
glib2-devel \
|
|
147
|
-
meson \
|
|
148
|
-
ninja-build \
|
|
149
|
-
pkgconf-pkg-config \
|
|
150
|
-
pipewire \
|
|
151
|
-
pipewire-devel \
|
|
152
|
-
python3-cairo \
|
|
153
|
-
python3-gobject \
|
|
154
|
-
python3-pip \
|
|
155
|
-
wireplumber \
|
|
156
|
-
libebur128
|
|
157
|
-
|
|
158
|
-
# Arch Linux
|
|
159
|
-
sudo pacman -S \
|
|
160
|
-
gtk4 \
|
|
161
|
-
libadwaita \
|
|
162
|
-
gobject-introspection \
|
|
163
|
-
glib2 \
|
|
164
|
-
meson \
|
|
165
|
-
ninja \
|
|
166
|
-
pkgconf \
|
|
167
|
-
pipewire \
|
|
168
|
-
python-cairo \
|
|
169
|
-
python-gobject \
|
|
170
|
-
python-pip \
|
|
171
|
-
wireplumber \
|
|
172
|
-
libebur128
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
Install the Python package after the system packages are present:
|
|
97
|
+
PyPI and source installs are available for development or for systems with a
|
|
98
|
+
recent GTK/Libadwaita stack plus PyGObject, PipeWire, WirePlumber, and native
|
|
99
|
+
pipewire-gobject build/runtime packages already installed:
|
|
176
100
|
|
|
177
101
|
```bash
|
|
178
|
-
python3 -m
|
|
179
|
-
/tmp/mini-eq-pwg-build/bin/python -m pip install --upgrade pip
|
|
180
|
-
/tmp/mini-eq-pwg-build/bin/python -m pip wheel 'pipewire-gobject>=0.3.5,<0.4' -w /tmp/mini-eq-wheelhouse
|
|
181
|
-
|
|
182
|
-
python3 -m venv --system-site-packages ~/.local/share/mini-eq/venv
|
|
183
|
-
~/.local/share/mini-eq/venv/bin/python -m pip install --upgrade pip
|
|
184
|
-
~/.local/share/mini-eq/venv/bin/python -m pip install --no-index --find-links /tmp/mini-eq-wheelhouse 'pipewire-gobject>=0.3.5,<0.4'
|
|
185
|
-
~/.local/share/mini-eq/venv/bin/python -m pip install mini-eq
|
|
186
|
-
~/.local/share/mini-eq/venv/bin/mini-eq --check-deps
|
|
187
|
-
~/.local/share/mini-eq/venv/bin/mini-eq
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
For a source checkout:
|
|
191
|
-
|
|
192
|
-
```bash
|
|
193
|
-
python3 -m pip install -e .
|
|
102
|
+
python3 -m pip install mini-eq
|
|
194
103
|
mini-eq --check-deps
|
|
195
104
|
mini-eq
|
|
196
105
|
```
|
|
197
106
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
PYTHONPATH=src python3 -m mini_eq --check-deps
|
|
202
|
-
PYTHONPATH=src python3 -m mini_eq
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
Install the desktop launcher and icon for the current user:
|
|
206
|
-
|
|
207
|
-
```bash
|
|
208
|
-
mini-eq --install-desktop
|
|
209
|
-
```
|
|
107
|
+
See [Development](https://github.com/bhack/mini-eq/blob/main/docs/development.md)
|
|
108
|
+
for distro package names, PyPI virtualenv details, source checkout commands,
|
|
109
|
+
tests, and local Flatpak builds.
|
|
210
110
|
|
|
211
111
|
## GNOME Shell Extension
|
|
212
112
|
|
|
@@ -216,53 +116,14 @@ routing, EQ, analyzer status, presets, and auto preset links.
|
|
|
216
116
|
Install it from GNOME Shell Extensions:
|
|
217
117
|
https://extensions.gnome.org/extension/9803/mini-eq-controls/
|
|
218
118
|
|
|
219
|
-
## Test
|
|
220
|
-
|
|
221
|
-
```bash
|
|
222
|
-
python3 -m pip install -e '.[dev]'
|
|
223
|
-
python3 -m ruff check .
|
|
224
|
-
python3 -m ruff format --check .
|
|
225
|
-
python3 -m pytest -q
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
Some integration tests are skipped automatically when optional PipeWire runtime
|
|
229
|
-
tools are not installed.
|
|
230
|
-
|
|
231
|
-
Check the pipewire-gobject GI compatibility surface:
|
|
232
|
-
|
|
233
|
-
```bash
|
|
234
|
-
PYTHONPATH=src python3 tools/check_pipewire_gobject.py
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
## Flatpak
|
|
238
|
-
|
|
239
|
-
The Flatpak manifest uses the GNOME runtime. It does not ship a full PipeWire
|
|
240
|
-
daemon or session manager; it builds only the local PipeWire filter-chain module
|
|
241
|
-
and SPA builtin filter-graph support that Mini EQ loads inside the app process.
|
|
242
|
-
It also builds pipewire-gobject for Mini EQ's app-facing PipeWire access and
|
|
243
|
-
bundles NumPy and libebur128 for analyzer and live LUFS support.
|
|
244
|
-
|
|
245
|
-
Install the local build tools:
|
|
246
|
-
|
|
247
|
-
```bash
|
|
248
|
-
flatpak --user install flathub org.flatpak.Builder org.gnome.Sdk//50
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
Build and install the local Flatpak:
|
|
252
|
-
|
|
253
|
-
```bash
|
|
254
|
-
flatpak run org.flatpak.Builder --user --install --force-clean --install-deps-from=flathub \
|
|
255
|
-
flatpak-build io.github.bhack.mini-eq.yaml
|
|
256
|
-
flatpak run io.github.bhack.mini-eq --check-deps
|
|
257
|
-
flatpak run io.github.bhack.mini-eq
|
|
258
|
-
```
|
|
259
|
-
|
|
260
119
|
## Notes
|
|
261
120
|
|
|
262
121
|
Runtime data is stored under `~/.config/mini-eq`.
|
|
263
122
|
|
|
264
|
-
`pip install mini-eq` installs only the Python package. The
|
|
265
|
-
|
|
123
|
+
`pip install mini-eq` installs only the Python package. The recent desktop and
|
|
124
|
+
audio system packages listed in
|
|
125
|
+
[Development](https://github.com/bhack/mini-eq/blob/main/docs/development.md)
|
|
126
|
+
are still required for the app to connect to GTK, PipeWire, and the host
|
|
266
127
|
WirePlumber-managed session.
|
|
267
128
|
|
|
268
129
|
## Acknowledgements
|
mini_eq-0.7.4/README.md
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Mini EQ
|
|
2
|
+
|
|
3
|
+
[](https://github.com/bhack/mini-eq/actions/workflows/ci.yml)
|
|
4
|
+
[](https://pypi.org/project/mini-eq/)
|
|
5
|
+
[](https://github.com/bhack/mini-eq/releases)
|
|
6
|
+
[](https://github.com/bhack/mini-eq/blob/main/LICENSE)
|
|
7
|
+
|
|
8
|
+
<a href="https://flathub.org/apps/io.github.bhack.mini-eq"><img width="240" alt="Get it on Flathub" src="https://flathub.org/api/badge?locale=en"/></a>
|
|
9
|
+
|
|
10
|
+
Mini EQ is a small system-wide parametric equalizer for PipeWire desktops.
|
|
11
|
+
It uses GTK/Libadwaita for the UI, pipewire-gobject for app-facing PipeWire
|
|
12
|
+
routing, metadata, and monitor streams, and PipeWire filter-chain with builtin
|
|
13
|
+
biquad filters for the equalizer. When libebur128 is available, the monitor can
|
|
14
|
+
also show live LUFS loudness.
|
|
15
|
+
|
|
16
|
+

|
|
17
|
+
|
|
18
|
+
## Features
|
|
19
|
+
|
|
20
|
+
- System-wide parametric EQ for PipeWire desktop playback.
|
|
21
|
+
- GTK/Libadwaita interface with a compact 10-band fader workflow.
|
|
22
|
+
- PipeWire routing and default-output tracking through pipewire-gobject.
|
|
23
|
+
- PipeWire filter-chain DSP using builtin biquad filters.
|
|
24
|
+
- Optional spectrum analyzer and LUFS loudness readout through a PipeWire monitor
|
|
25
|
+
capture stream.
|
|
26
|
+
- Auto preset links can follow the detected PipeWire port when available and
|
|
27
|
+
fall back to the selected EQ output when a port is not reported.
|
|
28
|
+
- Optional background mode keeps the EQ active after closing the window, with a
|
|
29
|
+
separate Start at Login preference and optional active-at-login routing.
|
|
30
|
+
- Optional GNOME Shell extension for quick panel access to routing, EQ,
|
|
31
|
+
analyzer status, presets, and auto preset links.
|
|
32
|
+
- Equalizer APO preset import from the UI or `--import-apo`, including
|
|
33
|
+
compatible presets exported by [AutoEq](https://autoeq.app/).
|
|
34
|
+
|
|
35
|
+
## AutoEq And APO Presets
|
|
36
|
+
|
|
37
|
+
Mini EQ can import Equalizer APO-style parametric EQ text presets. This makes it
|
|
38
|
+
usable with headphone correction presets exported by
|
|
39
|
+
[AutoEq](https://autoeq.app/): export an Equalizer APO/parametric EQ preset from
|
|
40
|
+
AutoEq, then use **Import Equalizer APO...** in Mini EQ or start the app with
|
|
41
|
+
`mini-eq --import-apo path/to/ParametricEQ.txt`. The
|
|
42
|
+
[AutoEq project](https://github.com/jaakkopasanen/AutoEq) provides the source,
|
|
43
|
+
headphone measurement data, targets, and optimizer behind the web app.
|
|
44
|
+
|
|
45
|
+
## Install
|
|
46
|
+
|
|
47
|
+
The recommended desktop install path is Flathub:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
flatpak install flathub io.github.bhack.mini-eq
|
|
51
|
+
flatpak run io.github.bhack.mini-eq
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
PyPI and source installs are available for development or for systems with a
|
|
55
|
+
recent GTK/Libadwaita stack plus PyGObject, PipeWire, WirePlumber, and native
|
|
56
|
+
pipewire-gobject build/runtime packages already installed:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
python3 -m pip install mini-eq
|
|
60
|
+
mini-eq --check-deps
|
|
61
|
+
mini-eq
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
See [Development](https://github.com/bhack/mini-eq/blob/main/docs/development.md)
|
|
65
|
+
for distro package names, PyPI virtualenv details, source checkout commands,
|
|
66
|
+
tests, and local Flatpak builds.
|
|
67
|
+
|
|
68
|
+
## GNOME Shell Extension
|
|
69
|
+
|
|
70
|
+
Mini EQ also has an optional GNOME Shell extension for quick panel access to
|
|
71
|
+
routing, EQ, analyzer status, presets, and auto preset links.
|
|
72
|
+
|
|
73
|
+
Install it from GNOME Shell Extensions:
|
|
74
|
+
https://extensions.gnome.org/extension/9803/mini-eq-controls/
|
|
75
|
+
|
|
76
|
+
## Notes
|
|
77
|
+
|
|
78
|
+
Runtime data is stored under `~/.config/mini-eq`.
|
|
79
|
+
|
|
80
|
+
`pip install mini-eq` installs only the Python package. The recent desktop and
|
|
81
|
+
audio system packages listed in
|
|
82
|
+
[Development](https://github.com/bhack/mini-eq/blob/main/docs/development.md)
|
|
83
|
+
are still required for the app to connect to GTK, PipeWire, and the host
|
|
84
|
+
WirePlumber-managed session.
|
|
85
|
+
|
|
86
|
+
## Acknowledgements
|
|
87
|
+
|
|
88
|
+
Mini EQ is inspired in part by [EasyEffects](https://github.com/wwmm/easyeffects)
|
|
89
|
+
and the broader [PipeWire](https://pipewire.org/) audio tooling ecosystem.
|
|
90
|
+
Mini EQ is a separate project focused on a compact system-wide parametric EQ
|
|
91
|
+
workflow.
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
</description>
|
|
34
34
|
<screenshots>
|
|
35
35
|
<screenshot type="default">
|
|
36
|
-
<image>https://raw.githubusercontent.com/bhack/mini-eq/v0.7.
|
|
36
|
+
<image>https://raw.githubusercontent.com/bhack/mini-eq/v0.7.4/docs/screenshots/mini-eq.png</image>
|
|
37
37
|
<caption>Adjust sound output with equalizer controls</caption>
|
|
38
38
|
</screenshot>
|
|
39
39
|
<screenshot>
|
|
40
|
-
<image>https://raw.githubusercontent.com/bhack/mini-eq/v0.7.
|
|
40
|
+
<image>https://raw.githubusercontent.com/bhack/mini-eq/v0.7.4/docs/screenshots/mini-eq-dark.png</image>
|
|
41
41
|
<caption>Use the equalizer with dark style</caption>
|
|
42
42
|
</screenshot>
|
|
43
43
|
</screenshots>
|
|
@@ -45,6 +45,25 @@
|
|
|
45
45
|
<url type="bugtracker">https://github.com/bhack/mini-eq/issues</url>
|
|
46
46
|
<url type="vcs-browser">https://github.com/bhack/mini-eq</url>
|
|
47
47
|
<releases>
|
|
48
|
+
<release version="0.7.4" date="2026-05-11">
|
|
49
|
+
<description>
|
|
50
|
+
<ul>
|
|
51
|
+
<li>Run filter-chain readiness callbacks from the GLib main context when PipeWire reports the virtual sink asynchronously.</li>
|
|
52
|
+
<li>Re-apply active filter controls when PipeWire creates or activates links on the Mini EQ processing path.</li>
|
|
53
|
+
<li>Refresh port-aware output preset scope when PipeWire reports route parameter serial changes on the active output device.</li>
|
|
54
|
+
</ul>
|
|
55
|
+
</description>
|
|
56
|
+
</release>
|
|
57
|
+
<release version="0.7.3" date="2026-05-11">
|
|
58
|
+
<description>
|
|
59
|
+
<ul>
|
|
60
|
+
<li>Require pipewire-gobject 0.3.6 and use its synchronous PipeWire registry, metadata, node, and device APIs for startup and routing state.</li>
|
|
61
|
+
<li>Replace Mini EQ's PipeWire startup and routing sleep loops with bounded sync or registry-event waits for route params, virtual sink creation, and stream routing.</li>
|
|
62
|
+
<li>Avoid a headless startup hang when system-wide EQ fails synchronously before the GLib main loop starts.</li>
|
|
63
|
+
<li>Hide the GNOME Shell extension's mini analyzer while monitoring is turned off.</li>
|
|
64
|
+
</ul>
|
|
65
|
+
</description>
|
|
66
|
+
</release>
|
|
48
67
|
<release version="0.7.2" date="2026-05-10">
|
|
49
68
|
<description>
|
|
50
69
|
<ul>
|