{"id":50517987,"url":"https://github.com/loganrooks/tap-n-filter","last_synced_at":"2026-06-03T01:30:52.718Z","repository":{"id":359268589,"uuid":"1245285260","full_name":"loganrooks/tap-n-filter","owner":"loganrooks","description":"A macOS app that captures audio from a chosen application and routes it through a customizable chain of audio effects.","archived":false,"fork":false,"pushed_at":"2026-05-29T05:38:31.000Z","size":845,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T06:24:02.364Z","etag":null,"topics":["audio","audio-effects","core-audio","macos","menubar","swift","swiftui"],"latest_commit_sha":null,"homepage":null,"language":"Swift","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/loganrooks.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":"docs/governance/audit-protocol.md","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":"2026-05-21T04:49:42.000Z","updated_at":"2026-05-27T23:29:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/loganrooks/tap-n-filter","commit_stats":null,"previous_names":["loganrooks/tap-n-filter"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/loganrooks/tap-n-filter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loganrooks%2Ftap-n-filter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loganrooks%2Ftap-n-filter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loganrooks%2Ftap-n-filter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loganrooks%2Ftap-n-filter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/loganrooks","download_url":"https://codeload.github.com/loganrooks/tap-n-filter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/loganrooks%2Ftap-n-filter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33844686,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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","audio-effects","core-audio","macos","menubar","swift","swiftui"],"created_at":"2026-06-03T01:30:51.967Z","updated_at":"2026-06-03T01:30:52.712Z","avatar_url":"https://github.com/loganrooks.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tap-n-filter\n\nA macOS app that captures audio from a specific application and routes it through a customizable chain of audio effects before playing back. Apply a lowpass and reverb to a YouTube tab while you work. Layer your own audio underneath. Save chains as presets and share them.\n\n\u003e **Status: in active development.** V1 is being built via an agentic workflow described under `docs/orchestration/`. This README will be revised once V1 ships.\n\n## What it does\n\ntap-n-filter sits between a source application (Safari, Chrome, Music, anything) and your audio output. It captures that application's audio via Core Audio process taps, runs the stream through a configurable graph of effects, and plays the processed result to your default output device. The original application is unaware of the interception.\n\nThe V1 effect graph includes:\n\n- High-pass and low-pass filters (parametric, with adjustable cutoff and resonance)\n- Convolution-style reverb (Apple's factory IRs in V1; custom IR support planned)\n- Wet/dry mixing per effect\n- Per-graph output gain\n\nEffect chains are saved as `.tnf` files — Codable JSON describing the graph and parameter values. Presets travel as plain text. Share them via gist, GitHub, Discord, or however else you move files.\n\n## Requirements\n\n- macOS 14.4 or later (required for the Core Audio process tap API)\n- Apple Silicon or Intel Mac\n- About 50 MB of disk space\n\n## Installation\n\nV1 ships as a notarized `.dmg`. Drag-to-Applications install. The first run will prompt for audio capture permission — grant it, and tap-n-filter can route audio from any application you select.\n\nA Homebrew cask formula is planned for V1.1.\n\n## Usage\n\nOnce installed, tap-n-filter lives in your menubar.\n\n1. Click the menubar icon to open the control panel.\n2. Pick a source application from the dropdown (e.g., Safari).\n3. Add effects to the chain. Adjust their parameters with the sliders.\n4. Click the power toggle to start routing.\n\nYou'll hear the source application's audio with the chain applied, instead of its raw output.\n\nTo stop, click the power toggle again. tap-n-filter restores the source's normal output.\n\n## Presets\n\nSave the current chain as a preset via the File menu. Load a preset via the same menu. Presets are `.tnf` files — open one in a text editor and you'll see plain JSON. They're meant to be edited, forked, and shared.\n\nA starter set of presets ships with the app:\n\n- **distant-engines** — heavy lowpass at 800Hz, large hall reverb at 70% wet. The original ambient-engine-noise preset that drove the project.\n- **dry** — passthrough with a small gain trim. Useful as a baseline.\n\nAdditional presets (`submerged`, `next-room`) were considered for V1 and deferred to V0.2; see `CHANGELOG.md`.\n\n## For developers\n\ntap-n-filter is a public project and contributions are welcome. The architecture is documented under `docs/`:\n\n- `docs/specs/architecture.md` — system overview\n- `docs/specs/audio-graph.md` — the effect graph model\n- `docs/specs/effect-node-protocol.md` — how to add new effect types\n- `docs/specs/capture.md` — how the Core Audio tap layer works\n\nA future plugin format will let third-party developers ship effects as separate bundles. The V1 architecture supports this path but does not implement it. See `docs/decisions/ADR-002-plugin-architecture.md`.\n\n## Building from source\n\n```sh\ngit clone https://github.com/loganrooks/tap-n-filter.git\ncd tap-n-filter\nswift build -c release\n```\n\nYou need Swift 5.10+ and the macOS 14.4 SDK. A full Xcode install is required to run the test suite (`swift test`); Command Line Tools alone are enough for `swift build`. See `docs/decisions/ADR-009-spm-only-project-structure.md` for the SPM-only layout rationale.\n\nTo build a distributable `.app` bundle and `.dmg`:\n\n```sh\n./Build/bundle.sh        # produces Build/Release/tap-n-filter.app\n./Build/package-dmg.sh   # produces Build/Release/tap-n-filter-v0.1.0.dmg (after sign + notarize)\n```\n\nThe signing and notarization scripts live under `Build/` and are exercised during Phase 4.\n\n## Project governance\n\nThis project is being developed with structured agent assistance. Decisions are documented as ADRs under `docs/decisions/`. Ongoing uncertainty and dissent are tracked in the logs in the same directory. Phase-by-phase build progress lives under `docs/orchestration/state.json`.\n\nIf you're reviewing a PR, see `docs/governance/review-protocol.md` for how automated review (CodeRabbit, Codex) and human review interact in this repo.\n\n## License\n\nMIT. See `LICENSE`.\n\n## Acknowledgments\n\n- The capture layer is built on the API documented by [insidegui/AudioCap](https://github.com/insidegui/AudioCap), which remains the best public reference for `AudioHardwareCreateProcessTap` and the broader Core Audio process tap surface added in macOS 14.4.\n- The aesthetic that drove the original design — F1 onboards drowned in long reverb, layered under ambient — owes obvious debts to hauntological music and to a long lineage of slowed-and-reverb audio communities. tap-n-filter is a tool for making that kind of thing, not a claim of inventing it.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floganrooks%2Ftap-n-filter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Floganrooks%2Ftap-n-filter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Floganrooks%2Ftap-n-filter/lists"}