{"id":51082057,"url":"https://github.com/fcarvajalbrown/pipeonjoy","last_synced_at":"2026-06-23T19:02:19.564Z","repository":{"id":362231674,"uuid":"1257953227","full_name":"fcarvajalbrown/pipeonjoy","owner":"fcarvajalbrown","description":"Vaporwave composition wizard — AI-free, lyrics-driven, modal. Win98 GUI + live FluidSynth previews.","archived":false,"fork":false,"pushed_at":"2026-06-03T08:46:32.000Z","size":325,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-03T09:08:45.938Z","etag":null,"topics":["ai-free","fluidsynth","midi","music-composition","music-theory","post-punk","python","soundfont","tkinter","vaporwave"],"latest_commit_sha":null,"homepage":"https://github.com/fcarvajalbrown/pipeonjoy","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fcarvajalbrown.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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":"2026-06-03T06:34:17.000Z","updated_at":"2026-06-03T08:46:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fcarvajalbrown/pipeonjoy","commit_stats":null,"previous_names":["fcarvajalbrown/pipeonjoy"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/fcarvajalbrown/pipeonjoy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fcarvajalbrown%2Fpipeonjoy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fcarvajalbrown%2Fpipeonjoy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fcarvajalbrown%2Fpipeonjoy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fcarvajalbrown%2Fpipeonjoy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fcarvajalbrown","download_url":"https://codeload.github.com/fcarvajalbrown/pipeonjoy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fcarvajalbrown%2Fpipeonjoy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34702919,"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-23T02:00:07.161Z","response_time":65,"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":["ai-free","fluidsynth","midi","music-composition","music-theory","post-punk","python","soundfont","tkinter","vaporwave"],"created_at":"2026-06-23T19:02:17.683Z","updated_at":"2026-06-23T19:02:19.555Z","avatar_url":"https://github.com/fcarvajalbrown.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/logo.svg\" alt=\"pipeonjoy\" width=\"420\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-GPL--v3-b967ff?style=flat-square\" alt=\"License: GPL v3\"/\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/python-3.11+-01cdfe?style=flat-square\" alt=\"Python 3.11+\"/\u003e\n  \u003cimg src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-ff77cc?style=flat-square\" alt=\"Platform\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003cstrong\u003eVaporwave composition wizard — AI-free, lyrics-driven, modal.\u003c/strong\u003e\u003c/p\u003e\n\n---\n\n**pipeonjoy** walks you through ~45 music-theory decisions before generating a MIDI file and a rendered WAV. No LLM. No cloud. Everything runs locally and air-gapped.\n\n---\n\n## What it does\n\n1. **Name your release** — single, EP, or album; each gets its own output folder.\n2. **Paste lyrics** (optional) — emotion, syllable density, and phrasing are analyzed using the NRC Emotion Lexicon, VADER, and the CMU Pronouncing Dictionary to pre-fill suggestions. No LLM.\n3. **Step through ~45 decisions** one at a time: scale/mode, key, tempo, groove, polyrhythm, song structure, drum patterns, bass role, guitar texture, synth character, vocal contour, and more.\n4. **Hear every option** — each radio button plays a live FluidSynth preview using a real soundfont the moment you click it.\n5. **Export** — a 32-bar MIDI sketch + mastered WAV land in `outputs/` when you're done.\n\nFor EPs and albums the wizard reminds you to return and make the remaining tracks, storing each one in the correct subfolder.\n\n---\n\n## Musical scope\n\n- **Post-punk / vaporwave / dark electronic** — Joy Division, Boards of Canada, Salem, 18 Carat Affair\n- **Modes**: Aeolian, Dorian, Phrygian, Phrygian Dominant (Armenian / Hijaz), Double Harmonic (Byzantine), Locrian, Mixolydian\n- **Rhythm**: polyrhythm (3-over-4, Gojira-style), metric modulation, syncopation, rhythmic displacement\n- **Harmony**: chromatic mediant, jazz ii–V–I pivot, deceptive cadence, direct/brutal key changes\n- **Atmosphere**: vinyl crackle, reversed pads, tape echo, wash reverb\n\nBoth extremes work — and everything in between:\n\n| Simple | Complex |\n|--------|---------|\n| E minor · 4/4 · 120 BPM | F# Phrygian Dominant · 7/8 |\n| i–VII–VI–VII · root-lock bass | 3-over-4 polyrhythm · Hook-style bass |\n| Power chord guitar · verse–chorus | Chromatic mediant modulation · tape echo |\n| → Joy Division, Bauhaus | → Gojira meets Salem meets Armenian folk |\n\n---\n\n## Instrument stack\n\n| Role | Engine | Source |\n|------|--------|--------|\n| Drums | FluidSynth (GM ch. 10) | VintageDreams SF2 (bundled with FluidSynth) |\n| Bass guitar | FluidSynth GM program 33 | same soundfont |\n| Chords / pads | FluidSynth GM programs 88–92 | same soundfont |\n| Preview synthesis | additive fallback | pure Python (no dependencies) |\n\nSwap in any SF2 soundfont by dropping it in `assets/sfz/`.\n\n---\n\n## Install\n\n```bash\ngit clone https://github.com/fcarvajalbrown/pipeonjoy\ncd pipeonjoy\npython3 -m venv .venv\nsource .venv/bin/activate          # Windows: .venv\\Scripts\\activate\npip install -e \".[dev]\"\n\n# macOS: install FluidSynth for realistic instrument previews + WAV export\nbrew install fluid-synth\n\npython main.py\n```\n\nRequires **Python 3.11+**.  \nFluidSynth is optional — the wizard falls back to additive synthesis if it is absent.\n\n---\n\n## Outputs\n\n```\noutputs/\n  singles/\u003csong-title\u003e/       ← sketch.mid  sketch.wav\n  eps/\u003cep-name\u003e/\u003csong\u003e/\n  albums/\u003calbum\u003e/\u003csong\u003e/\n```\n\n---\n\n## v2.0 roadmap\n\n- Download CC0 / Public Domain audio from the web (yt-dlp / Free Music Archive)\n- Load, slow down, and select a section in-app (librosa)\n- Auto-detect key via Krumhansl-Schmuckler algorithm → pre-fill root key + mode\n- Interactive story-arc graph editor (energy curve across sections)\n- Portable executable builds (PyInstaller — macOS `.app`, Windows `.exe`)\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md). One rule above all: **no LLM calls at runtime** and **no network calls at runtime** — pipeonjoy must remain 100% air-gappable.\n\n---\n\n## License\n\nGNU General Public License v3.0 — see [LICENSE](LICENSE).\n\n## Author\n\nFelipe Carvajal Brown — Felipe Carvajal Brown Software  \nfcarvajalbrown@gmail.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffcarvajalbrown%2Fpipeonjoy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffcarvajalbrown%2Fpipeonjoy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffcarvajalbrown%2Fpipeonjoy/lists"}