{"id":47615968,"url":"https://github.com/phash/gp200editor","last_synced_at":"2026-04-01T21:26:54.149Z","repository":{"id":344829738,"uuid":"1183152137","full_name":"phash/gp200editor","owner":"phash","description":null,"archived":false,"fork":false,"pushed_at":"2026-03-23T20:50:54.000Z","size":1191,"stargazers_count":1,"open_issues_count":13,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-03-24T07:06:08.744Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phash.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2026-03-16T10:22:49.000Z","updated_at":"2026-03-23T20:50:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/phash/gp200editor","commit_stats":null,"previous_names":["phash/gp200editor"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/phash/gp200editor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fgp200editor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fgp200editor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fgp200editor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fgp200editor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phash","download_url":"https://codeload.github.com/phash/gp200editor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phash%2Fgp200editor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31292250,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"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":[],"created_at":"2026-04-01T21:26:49.998Z","updated_at":"2026-04-01T21:26:54.110Z","avatar_url":"https://github.com/phash.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Preset Forge — Valeton GP-200 Preset Editor\n\n**The only browser-based Valeton GP-200 preset editor. Works on Linux, Windows, macOS, and Chrome OS — no installation required.**\n\nThe official Valeton GP-200 editor software is Windows-only. Preset Forge runs in any modern browser (Chrome/Chromium recommended for USB MIDI). Tested on Linux Mint, Windows 11, and macOS.\n\n**https://preset-forge.com** · Supports GP-200 firmware 1.8.0 · Open source · Free\n\n## What is this?\n\nPreset Forge lets you edit Valeton GP-200 multi-effects pedal presets (`.prst` files) directly in the browser. You can:\n\n- **Load and edit presets** — open `.prst` files, tweak all 305 effects across 11 slots, download the result\n- **Live USB MIDI editing** — connect your GP-200 via USB and push changes to the device in real time (toggle effects, adjust parameters, reorder the signal chain)\n- **Import Line6 HX Stomp presets** (experimental) — convert `.hlx` files to GP-200 format\n- **Build live setlists** — timed cue points for automatic preset switching during gigs, with 3-2-1 count-in\n- **Share and discover presets** — community gallery with per-effect filtering across all 305 effects\n- **Admin dashboard** — user/preset management, error console with GitHub issue creation, audit log\n\n## Linux Support\n\nPreset Forge is the **only GP-200 editor that runs on Linux**. Tested on Linux Mint with Chrome. The official Valeton software requires Windows.\n\nFor USB MIDI on Linux: install Chrome or Chromium, connect the GP-200 via USB, and grant MIDI permission when the browser asks.\n\n## Features\n\n- **Preset Editor** — `.prst` files (1224 bytes, 11 slots, 305 effects, 15 parameters per effect). Pedalboard view with patch cables\n- **305 Effects** — names and parameters extracted from the official Valeton `algorithm.xml`\n- **Live USB MIDI** — SysEx protocol reverse-engineered and hardware-verified with firmware 1.8.0 (14 message types)\n- **HX Stomp Import** (experimental) — Line6 HX Stomp `.hlx` → GP-200 format\n- **Playlists \u0026 Cue Points** — timed setlists for live gigs, slot-based preset switching, 3-2-1 count-in\n- **Preset Gallery** — community sharing, per-effect filtering (305 effects × 12 modules)\n- **MIDI Auto-Reconnect** — 3 automatic reconnect attempts on USB disconnect\n- **PWA / Offline** — editor works offline; gallery requires internet\n- **Admin Area** — user management (suspend/warn/delete), preset moderation (flag/unpublish/delete), error console with GH issue creation, audit log\n- Account system with profile, avatar, email verification, login via email or username\n- Role-based access (USER/ADMIN)\n- Fully bilingual (DE/EN) · WCAG 2.1 AA\n\n## Stack\n\n- **Next.js 14** App Router + TypeScript strict\n- **Tailwind CSS** (Dark theme, JetBrains Mono + DM Sans)\n- **Prisma 5** + PostgreSQL 16\n- **Lucia v3** (Session-Auth, Argon2id)\n- **Garage** (S3-kompatibler Object Store) für Avatare und Presets\n- **next-intl 4** (DE/EN)\n- **Vitest** (288 Unit-Tests) + **Playwright** (E2E + A11y)\n\n## Entwicklung\n\n### Voraussetzungen\n\n- Node.js 23+\n- Docker (für PostgreSQL, Garage, Mailhog)\n\n### Setup\n\n```bash\n# Dependencies\nnpm install --legacy-peer-deps\n\n# Infrastruktur starten (PostgreSQL, Garage, Mailhog)\ndocker compose up -d\n\n# Garage einmalig initialisieren → gibt Access Keys aus\nbash scripts/garage-init.sh\n\n# .env.local anlegen (Vorlage: .env.local.example)\ncp .env.local.example .env.local\n# → Access Keys aus garage-init.sh eintragen\n\n# Datenbankmigrationen\nnpx prisma migrate dev\n\n# Dev-Server\nnpm run dev       # http://localhost:3000\n```\n\n\u003e **Hinweis:** Immer `--legacy-peer-deps` verwenden — lokale npm-Version ist 11.x, Lock-File wurde damit erzeugt.\n\n### Tests\n\n```bash\nnpm run test          # 288 Unit-Tests (Vitest)\nnpm run test:coverage # Coverage-Report\nnpm run test:e2e      # Playwright E2E (App + Garage + DB erforderlich)\n```\n\n### Build\n\n```bash\nnpm run build\n\n# Docker\ndocker build -t gp200editor .\ndocker run -d -p 3000:3000 gp200editor\n```\n\n### Production Deployment (IONOS VPS)\n\n```bash\n# Erstmalig:\ncd /opt \u0026\u0026 git clone https://github.com/phash/gp200editor.git \u0026\u0026 cd gp200editor\nbash scripts/deploy-vps.sh    # Setup: Build, Garage, SSL, Nginx\n\n# Updates:\nbash scripts/deploy-update.sh # git pull → build → restart (Migrations laufen automatisch)\n```\n\nDB-Migrationen laufen automatisch bei jedem Container-Start (`docker-entrypoint.sh`).\n\n## .prst Binärformat\n\nAlle User-Presets sind exakt **1224 Bytes**. Das Format wurde per Reverse Engineering dokumentiert:\n\n- Magic `TSRP` (reversed \"PRST\") + Device ID `2-PG` (reversed \"GP-2\")\n- 11 Effekt-Blöcke à 72 Bytes mit Effekt-Code (uint32), Active-Flag und 15× float32 Parametern\n- 305 Effekte mit Namen und Parameter-Definitionen aus der offiziellen Valeton GP-200 Editor Software (`algorithm.xml`)\n\nDetails: [CLAUDE.md](./CLAUDE.md#prst-binärformat-reverse-engineered-2026-03-16)\n\n## Umgebungsvariablen\n\nVorlage: `.env.local.example`\n\n```\nDATABASE_URL=postgresql://postgres:postgres@localhost:5432/gp200\n\nGARAGE_ENDPOINT=http://localhost:3900\nGARAGE_ACCESS_KEY_ID=\u003cfrom garage-init.sh\u003e\nGARAGE_SECRET_ACCESS_KEY=\u003cfrom garage-init.sh\u003e\nGARAGE_BUCKET=avatars\nGARAGE_PRESET_BUCKET=presets\n\nEMAIL_FROM=noreply@gp200editor.local\nEMAIL_SMTP_HOST=localhost\nEMAIL_SMTP_PORT=1025\n\nNEXT_PUBLIC_APP_URL=http://localhost:3000\n```\n\n## Dokumentation\n\nTechnische Entscheidungen und Konventionen: [CLAUDE.md](./CLAUDE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphash%2Fgp200editor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphash%2Fgp200editor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphash%2Fgp200editor/lists"}