helixgen 0.19.1__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.
Files changed (139) hide show
  1. helixgen-0.19.1/LICENSE +21 -0
  2. helixgen-0.19.1/PKG-INFO +132 -0
  3. helixgen-0.19.1/README.md +100 -0
  4. helixgen-0.19.1/helixgen.egg-info/PKG-INFO +132 -0
  5. helixgen-0.19.1/helixgen.egg-info/SOURCES.txt +137 -0
  6. helixgen-0.19.1/helixgen.egg-info/dependency_links.txt +1 -0
  7. helixgen-0.19.1/helixgen.egg-info/entry_points.txt +2 -0
  8. helixgen-0.19.1/helixgen.egg-info/requires.txt +12 -0
  9. helixgen-0.19.1/helixgen.egg-info/top_level.txt +2 -0
  10. helixgen-0.19.1/mcp_server/__init__.py +9 -0
  11. helixgen-0.19.1/mcp_server/__main__.py +66 -0
  12. helixgen-0.19.1/mcp_server/data/__init__.py +0 -0
  13. helixgen-0.19.1/mcp_server/server.py +1054 -0
  14. helixgen-0.19.1/mcp_server/tools.py +1516 -0
  15. helixgen-0.19.1/pyproject.toml +60 -0
  16. helixgen-0.19.1/setup.cfg +4 -0
  17. helixgen-0.19.1/src/helixgen/__init__.py +1 -0
  18. helixgen-0.19.1/src/helixgen/bootstrap.py +65 -0
  19. helixgen-0.19.1/src/helixgen/chassis.py +66 -0
  20. helixgen-0.19.1/src/helixgen/cli.py +649 -0
  21. helixgen-0.19.1/src/helixgen/cli_device.py +2212 -0
  22. helixgen-0.19.1/src/helixgen/controllers.py +369 -0
  23. helixgen-0.19.1/src/helixgen/device/__init__.py +39 -0
  24. helixgen-0.19.1/src/helixgen/device/_defs_data.json +1 -0
  25. helixgen-0.19.1/src/helixgen/device/_modelmap.json +3347 -0
  26. helixgen-0.19.1/src/helixgen/device/_settings_pages.json +176 -0
  27. helixgen-0.19.1/src/helixgen/device/backup.py +187 -0
  28. helixgen-0.19.1/src/helixgen/device/bridge.py +549 -0
  29. helixgen-0.19.1/src/helixgen/device/client.py +1353 -0
  30. helixgen-0.19.1/src/helixgen/device/content.py +131 -0
  31. helixgen-0.19.1/src/helixgen/device/defs.py +130 -0
  32. helixgen-0.19.1/src/helixgen/device/globaleq.py +220 -0
  33. helixgen-0.19.1/src/helixgen/device/hss.py +794 -0
  34. helixgen-0.19.1/src/helixgen/device/ir_upload.py +139 -0
  35. helixgen-0.19.1/src/helixgen/device/irmd.py +51 -0
  36. helixgen-0.19.1/src/helixgen/device/maintenance.py +616 -0
  37. helixgen-0.19.1/src/helixgen/device/manifest.py +559 -0
  38. helixgen-0.19.1/src/helixgen/device/meters.py +100 -0
  39. helixgen-0.19.1/src/helixgen/device/modelmap.py +81 -0
  40. helixgen-0.19.1/src/helixgen/device/osc.py +106 -0
  41. helixgen-0.19.1/src/helixgen/device/reorder.py +261 -0
  42. helixgen-0.19.1/src/helixgen/device/setlist_sync.py +561 -0
  43. helixgen-0.19.1/src/helixgen/device/settings.py +266 -0
  44. helixgen-0.19.1/src/helixgen/device/sftp.py +309 -0
  45. helixgen-0.19.1/src/helixgen/device/subscribe.py +230 -0
  46. helixgen-0.19.1/src/helixgen/device/transcode.py +1627 -0
  47. helixgen-0.19.1/src/helixgen/device/tuner.py +123 -0
  48. helixgen-0.19.1/src/helixgen/flowparams.py +264 -0
  49. helixgen-0.19.1/src/helixgen/generate.py +893 -0
  50. helixgen-0.19.1/src/helixgen/hsp.py +194 -0
  51. helixgen-0.19.1/src/helixgen/ingest.py +434 -0
  52. helixgen-0.19.1/src/helixgen/ir.py +479 -0
  53. helixgen-0.19.1/src/helixgen/irhash_cache.py +167 -0
  54. helixgen-0.19.1/src/helixgen/library.py +282 -0
  55. helixgen-0.19.1/src/helixgen/mutate.py +1353 -0
  56. helixgen-0.19.1/src/helixgen/preferences.py +322 -0
  57. helixgen-0.19.1/src/helixgen/recipe.py +402 -0
  58. helixgen-0.19.1/src/helixgen/spec.py +1125 -0
  59. helixgen-0.19.1/src/helixgen/view.py +1009 -0
  60. helixgen-0.19.1/tests/test_bootstrap.py +67 -0
  61. helixgen-0.19.1/tests/test_chassis.py +108 -0
  62. helixgen-0.19.1/tests/test_cli.py +245 -0
  63. helixgen-0.19.1/tests/test_cli_library.py +75 -0
  64. helixgen-0.19.1/tests/test_commands.py +416 -0
  65. helixgen-0.19.1/tests/test_controller_depth.py +461 -0
  66. helixgen-0.19.1/tests/test_controllers.py +242 -0
  67. helixgen-0.19.1/tests/test_decompile.py +297 -0
  68. helixgen-0.19.1/tests/test_decompile_acceptance.py +61 -0
  69. helixgen-0.19.1/tests/test_decompile_advanced.py +599 -0
  70. helixgen-0.19.1/tests/test_decompile_sonic_fidelity.py +149 -0
  71. helixgen-0.19.1/tests/test_device_backup.py +159 -0
  72. helixgen-0.19.1/tests/test_device_bridge.py +89 -0
  73. helixgen-0.19.1/tests/test_device_cli.py +1201 -0
  74. helixgen-0.19.1/tests/test_device_client.py +1305 -0
  75. helixgen-0.19.1/tests/test_device_content.py +118 -0
  76. helixgen-0.19.1/tests/test_device_defs.py +98 -0
  77. helixgen-0.19.1/tests/test_device_extra_import_surface.py +81 -0
  78. helixgen-0.19.1/tests/test_device_globaleq.py +149 -0
  79. helixgen-0.19.1/tests/test_device_irmd.py +52 -0
  80. helixgen-0.19.1/tests/test_device_live.py +107 -0
  81. helixgen-0.19.1/tests/test_device_liveops.py +119 -0
  82. helixgen-0.19.1/tests/test_device_maintenance.py +724 -0
  83. helixgen-0.19.1/tests/test_device_meters.py +78 -0
  84. helixgen-0.19.1/tests/test_device_modelmap.py +111 -0
  85. helixgen-0.19.1/tests/test_device_osc.py +119 -0
  86. helixgen-0.19.1/tests/test_device_reorder.py +596 -0
  87. helixgen-0.19.1/tests/test_device_settings.py +210 -0
  88. helixgen-0.19.1/tests/test_device_sftp.py +138 -0
  89. helixgen-0.19.1/tests/test_device_slots_cli.py +247 -0
  90. helixgen-0.19.1/tests/test_device_subscribe.py +253 -0
  91. helixgen-0.19.1/tests/test_device_tuner.py +78 -0
  92. helixgen-0.19.1/tests/test_flowparams.py +166 -0
  93. helixgen-0.19.1/tests/test_generate.py +1136 -0
  94. helixgen-0.19.1/tests/test_generate_combined.py +80 -0
  95. helixgen-0.19.1/tests/test_generate_expression.py +116 -0
  96. helixgen-0.19.1/tests/test_generate_flow.py +228 -0
  97. helixgen-0.19.1/tests/test_generate_footswitches.py +185 -0
  98. helixgen-0.19.1/tests/test_generate_input.py +96 -0
  99. helixgen-0.19.1/tests/test_generate_snapshots.py +58 -0
  100. helixgen-0.19.1/tests/test_hsp.py +294 -0
  101. helixgen-0.19.1/tests/test_hss.py +812 -0
  102. helixgen-0.19.1/tests/test_hss_cli.py +402 -0
  103. helixgen-0.19.1/tests/test_ingest.py +450 -0
  104. helixgen-0.19.1/tests/test_input_reshape.py +45 -0
  105. helixgen-0.19.1/tests/test_ir_cache_cli.py +71 -0
  106. helixgen-0.19.1/tests/test_ir_cli.py +546 -0
  107. helixgen-0.19.1/tests/test_ir_generate.py +231 -0
  108. helixgen-0.19.1/tests/test_ir_ingest.py +80 -0
  109. helixgen-0.19.1/tests/test_ir_mapping.py +156 -0
  110. helixgen-0.19.1/tests/test_ir_preset.py +65 -0
  111. helixgen-0.19.1/tests/test_ir_spec.py +40 -0
  112. helixgen-0.19.1/tests/test_ir_upload.py +252 -0
  113. helixgen-0.19.1/tests/test_irhash_cache.py +263 -0
  114. helixgen-0.19.1/tests/test_library.py +315 -0
  115. helixgen-0.19.1/tests/test_manifest.py +430 -0
  116. helixgen-0.19.1/tests/test_manifest_ops.py +89 -0
  117. helixgen-0.19.1/tests/test_manifest_v2.py +101 -0
  118. helixgen-0.19.1/tests/test_midi_controllers.py +435 -0
  119. helixgen-0.19.1/tests/test_mutate.py +939 -0
  120. helixgen-0.19.1/tests/test_mutate_cli.py +120 -0
  121. helixgen-0.19.1/tests/test_mutate_flow.py +140 -0
  122. helixgen-0.19.1/tests/test_preferences.py +533 -0
  123. helixgen-0.19.1/tests/test_recipe.py +84 -0
  124. helixgen-0.19.1/tests/test_roundtrip.py +107 -0
  125. helixgen-0.19.1/tests/test_setlist_sync.py +1092 -0
  126. helixgen-0.19.1/tests/test_setlist_sync_mirror.py +31 -0
  127. helixgen-0.19.1/tests/test_spec.py +443 -0
  128. helixgen-0.19.1/tests/test_spec_commands.py +143 -0
  129. helixgen-0.19.1/tests/test_spec_expression.py +141 -0
  130. helixgen-0.19.1/tests/test_spec_flow.py +276 -0
  131. helixgen-0.19.1/tests/test_spec_footswitches.py +104 -0
  132. helixgen-0.19.1/tests/test_spec_input.py +35 -0
  133. helixgen-0.19.1/tests/test_spec_midi.py +159 -0
  134. helixgen-0.19.1/tests/test_trails_fxloop.py +86 -0
  135. helixgen-0.19.1/tests/test_transcode.py +1118 -0
  136. helixgen-0.19.1/tests/test_transcode_flow.py +142 -0
  137. helixgen-0.19.1/tests/test_view.py +205 -0
  138. helixgen-0.19.1/tests/test_view_cli.py +47 -0
  139. helixgen-0.19.1/tests/test_view_flow.py +184 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mike Shea
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,132 @@
1
+ Metadata-Version: 2.4
2
+ Name: helixgen
3
+ Version: 0.19.1
4
+ Summary: Generate Line 6 Helix Stadium .hsp / legacy .hlx preset files from JSON tone specs.
5
+ Author: Mike Shea
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/sheax0r/helixgen-core
8
+ Project-URL: Repository, https://github.com/sheax0r/helixgen-core
9
+ Project-URL: Issues, https://github.com/sheax0r/helixgen-core/issues
10
+ Keywords: line6,helix,guitar,preset,tone,hsp,impulse-response
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Multimedia :: Sound/Audio
19
+ Requires-Python: >=3.11
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: click>=8.1
23
+ Provides-Extra: dev
24
+ Requires-Dist: pytest>=7.4; extra == "dev"
25
+ Provides-Extra: mcp
26
+ Requires-Dist: mcp<2.0,>=1.0; extra == "mcp"
27
+ Provides-Extra: device
28
+ Requires-Dist: pyzmq>=25; extra == "device"
29
+ Requires-Dist: msgpack>=1; extra == "device"
30
+ Requires-Dist: paramiko>=3.4; extra == "device"
31
+ Dynamic: license-file
32
+
33
+ # helixgen-core
34
+
35
+ The core Python library + CLI behind **helixgen**: generate Line 6 Helix
36
+ Stadium `.hsp` presets (and legacy `.hlx`) from JSON tone recipes, edit them
37
+ surgically in place, manage impulse responses by Stadium-exact content hash,
38
+ and control a Helix Stadium directly over the LAN (OSC-over-ZeroMQ — no
39
+ editor app).
40
+
41
+ > ⚠️ **Unofficial tool — use at your own risk.** Not affiliated with or
42
+ > endorsed by Line 6 / Yamaha (see [Trademark notice](#trademark-notice)).
43
+ > Loading any user-generated preset on your hardware carries risk — rejected
44
+ > loads, corrupted preset slots, on-device crashes. Review what you import.
45
+ > The MIT [LICENSE](LICENSE) disclaims all warranty.
46
+
47
+ ## Repo family
48
+
49
+ | Repo | What it is |
50
+ |---|---|
51
+ | **helixgen-core** (this repo) | The `helixgen` Python package: libs, CLI, MCP server |
52
+ | [helixgen](https://github.com/sheax0r/helixgen) | The Claude Code plugin — `/tone`, `/setup`, `/device` skills + marketplace |
53
+ | [helixgen-tui](https://github.com/sheax0r/helixgen-tui) | Terminal UI for tones, setlists, and device control |
54
+
55
+ Want natural-language preset generation inside Claude Code? Install the
56
+ [plugin](https://github.com/sheax0r/helixgen) — you don't need this repo
57
+ directly. This repo is for using the CLI/library standalone, or developing
58
+ against it.
59
+
60
+ ## Install
61
+
62
+ Requires **Python 3.11+**. Not yet published to PyPI (coming); install from
63
+ source for now:
64
+
65
+ ```bash
66
+ pip install 'helixgen[device] @ git+https://github.com/sheax0r/helixgen-core'
67
+ ```
68
+
69
+ Extras: `device` (network device control: pyzmq, msgpack, paramiko), `mcp`
70
+ (the MCP server), `dev` (pytest).
71
+
72
+ A standalone install starts with an empty block library — seed it first:
73
+
74
+ ```bash
75
+ helixgen bootstrap
76
+ ```
77
+
78
+ Computing IR hashes from WAVs (`register-irs <wav>`, `ir-scan`) additionally
79
+ needs **libsndfile** (`brew install libsndfile` / `apt install libsndfile1`).
80
+
81
+ ## Quick tour
82
+
83
+ ```bash
84
+ helixgen list-blocks --category amp # browse the block library
85
+ helixgen show-block "Brit Plexi Brt" # exact param names/ranges
86
+ helixgen generate recipe.json -o tone.hsp # author a preset from a recipe
87
+ helixgen set-param tone.hsp "Tape Echo Stereo" Mix 0.3 # surgical edit
88
+ helixgen view tone.hsp # read a .hsp back as a recipe
89
+ helixgen device list # talk to a Stadium on the LAN
90
+ helixgen device sync my-setlist # mirror a managed setlist onto it
91
+ ```
92
+
93
+ Full references:
94
+
95
+ - [`docs/CLI.md`](docs/CLI.md) — every verb, including the complete
96
+ `helixgen device` reference.
97
+ - [`docs/recipe-reference.md`](docs/recipe-reference.md) — the exhaustive
98
+ recipe schema (paths, splits, snapshots, footswitches, expression, MIDI,
99
+ Command Center, IRs).
100
+ - [`docs/ir-hash-algorithm.md`](docs/ir-hash-algorithm.md) — the
101
+ reverse-engineered Stadium IR hash, field-validated.
102
+ - [`docs/helix-protocol.md`](docs/helix-protocol.md) — the network protocol.
103
+
104
+ ## Tests
105
+
106
+ Run from a source checkout with the package on `PYTHONPATH`:
107
+
108
+ ```bash
109
+ PYTHONPATH=$PWD/src python -m pytest
110
+ ```
111
+
112
+ ## Acknowledgments
113
+
114
+ helixgen leans **heavily** on
115
+ [**sensorium/phelix**](https://github.com/sensorium/phelix) — a
116
+ community-maintained, hand-curated repository of Helix block JSON files. The
117
+ `helixgen bootstrap` command clones phelix and ingests its `blocks/`
118
+ directory; without that pre-extracted catalog the cold-start experience of
119
+ this tool would be considerably worse.
120
+
121
+ ## Trademark notice
122
+
123
+ helixgen is an unofficial community project. **Line 6**, **Helix**, **HX**,
124
+ and related product names are trademarks of **Yamaha Guitar Group, Inc.**
125
+ helixgen is not affiliated with, endorsed by, or sponsored by Line 6 or
126
+ Yamaha. References in this project to Line 6 hardware, file formats (`.hlx`,
127
+ `.hsp`), and model identifiers are descriptive — helixgen generates files
128
+ intended to be compatible with Line 6 Helix devices but is not a Line 6
129
+ product.
130
+
131
+ If you are a representative of Line 6 / Yamaha and have concerns about this
132
+ project's name or scope, please open an issue.
@@ -0,0 +1,100 @@
1
+ # helixgen-core
2
+
3
+ The core Python library + CLI behind **helixgen**: generate Line 6 Helix
4
+ Stadium `.hsp` presets (and legacy `.hlx`) from JSON tone recipes, edit them
5
+ surgically in place, manage impulse responses by Stadium-exact content hash,
6
+ and control a Helix Stadium directly over the LAN (OSC-over-ZeroMQ — no
7
+ editor app).
8
+
9
+ > ⚠️ **Unofficial tool — use at your own risk.** Not affiliated with or
10
+ > endorsed by Line 6 / Yamaha (see [Trademark notice](#trademark-notice)).
11
+ > Loading any user-generated preset on your hardware carries risk — rejected
12
+ > loads, corrupted preset slots, on-device crashes. Review what you import.
13
+ > The MIT [LICENSE](LICENSE) disclaims all warranty.
14
+
15
+ ## Repo family
16
+
17
+ | Repo | What it is |
18
+ |---|---|
19
+ | **helixgen-core** (this repo) | The `helixgen` Python package: libs, CLI, MCP server |
20
+ | [helixgen](https://github.com/sheax0r/helixgen) | The Claude Code plugin — `/tone`, `/setup`, `/device` skills + marketplace |
21
+ | [helixgen-tui](https://github.com/sheax0r/helixgen-tui) | Terminal UI for tones, setlists, and device control |
22
+
23
+ Want natural-language preset generation inside Claude Code? Install the
24
+ [plugin](https://github.com/sheax0r/helixgen) — you don't need this repo
25
+ directly. This repo is for using the CLI/library standalone, or developing
26
+ against it.
27
+
28
+ ## Install
29
+
30
+ Requires **Python 3.11+**. Not yet published to PyPI (coming); install from
31
+ source for now:
32
+
33
+ ```bash
34
+ pip install 'helixgen[device] @ git+https://github.com/sheax0r/helixgen-core'
35
+ ```
36
+
37
+ Extras: `device` (network device control: pyzmq, msgpack, paramiko), `mcp`
38
+ (the MCP server), `dev` (pytest).
39
+
40
+ A standalone install starts with an empty block library — seed it first:
41
+
42
+ ```bash
43
+ helixgen bootstrap
44
+ ```
45
+
46
+ Computing IR hashes from WAVs (`register-irs <wav>`, `ir-scan`) additionally
47
+ needs **libsndfile** (`brew install libsndfile` / `apt install libsndfile1`).
48
+
49
+ ## Quick tour
50
+
51
+ ```bash
52
+ helixgen list-blocks --category amp # browse the block library
53
+ helixgen show-block "Brit Plexi Brt" # exact param names/ranges
54
+ helixgen generate recipe.json -o tone.hsp # author a preset from a recipe
55
+ helixgen set-param tone.hsp "Tape Echo Stereo" Mix 0.3 # surgical edit
56
+ helixgen view tone.hsp # read a .hsp back as a recipe
57
+ helixgen device list # talk to a Stadium on the LAN
58
+ helixgen device sync my-setlist # mirror a managed setlist onto it
59
+ ```
60
+
61
+ Full references:
62
+
63
+ - [`docs/CLI.md`](docs/CLI.md) — every verb, including the complete
64
+ `helixgen device` reference.
65
+ - [`docs/recipe-reference.md`](docs/recipe-reference.md) — the exhaustive
66
+ recipe schema (paths, splits, snapshots, footswitches, expression, MIDI,
67
+ Command Center, IRs).
68
+ - [`docs/ir-hash-algorithm.md`](docs/ir-hash-algorithm.md) — the
69
+ reverse-engineered Stadium IR hash, field-validated.
70
+ - [`docs/helix-protocol.md`](docs/helix-protocol.md) — the network protocol.
71
+
72
+ ## Tests
73
+
74
+ Run from a source checkout with the package on `PYTHONPATH`:
75
+
76
+ ```bash
77
+ PYTHONPATH=$PWD/src python -m pytest
78
+ ```
79
+
80
+ ## Acknowledgments
81
+
82
+ helixgen leans **heavily** on
83
+ [**sensorium/phelix**](https://github.com/sensorium/phelix) — a
84
+ community-maintained, hand-curated repository of Helix block JSON files. The
85
+ `helixgen bootstrap` command clones phelix and ingests its `blocks/`
86
+ directory; without that pre-extracted catalog the cold-start experience of
87
+ this tool would be considerably worse.
88
+
89
+ ## Trademark notice
90
+
91
+ helixgen is an unofficial community project. **Line 6**, **Helix**, **HX**,
92
+ and related product names are trademarks of **Yamaha Guitar Group, Inc.**
93
+ helixgen is not affiliated with, endorsed by, or sponsored by Line 6 or
94
+ Yamaha. References in this project to Line 6 hardware, file formats (`.hlx`,
95
+ `.hsp`), and model identifiers are descriptive — helixgen generates files
96
+ intended to be compatible with Line 6 Helix devices but is not a Line 6
97
+ product.
98
+
99
+ If you are a representative of Line 6 / Yamaha and have concerns about this
100
+ project's name or scope, please open an issue.
@@ -0,0 +1,132 @@
1
+ Metadata-Version: 2.4
2
+ Name: helixgen
3
+ Version: 0.19.1
4
+ Summary: Generate Line 6 Helix Stadium .hsp / legacy .hlx preset files from JSON tone specs.
5
+ Author: Mike Shea
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/sheax0r/helixgen-core
8
+ Project-URL: Repository, https://github.com/sheax0r/helixgen-core
9
+ Project-URL: Issues, https://github.com/sheax0r/helixgen-core/issues
10
+ Keywords: line6,helix,guitar,preset,tone,hsp,impulse-response
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: End Users/Desktop
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Multimedia :: Sound/Audio
19
+ Requires-Python: >=3.11
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: click>=8.1
23
+ Provides-Extra: dev
24
+ Requires-Dist: pytest>=7.4; extra == "dev"
25
+ Provides-Extra: mcp
26
+ Requires-Dist: mcp<2.0,>=1.0; extra == "mcp"
27
+ Provides-Extra: device
28
+ Requires-Dist: pyzmq>=25; extra == "device"
29
+ Requires-Dist: msgpack>=1; extra == "device"
30
+ Requires-Dist: paramiko>=3.4; extra == "device"
31
+ Dynamic: license-file
32
+
33
+ # helixgen-core
34
+
35
+ The core Python library + CLI behind **helixgen**: generate Line 6 Helix
36
+ Stadium `.hsp` presets (and legacy `.hlx`) from JSON tone recipes, edit them
37
+ surgically in place, manage impulse responses by Stadium-exact content hash,
38
+ and control a Helix Stadium directly over the LAN (OSC-over-ZeroMQ — no
39
+ editor app).
40
+
41
+ > ⚠️ **Unofficial tool — use at your own risk.** Not affiliated with or
42
+ > endorsed by Line 6 / Yamaha (see [Trademark notice](#trademark-notice)).
43
+ > Loading any user-generated preset on your hardware carries risk — rejected
44
+ > loads, corrupted preset slots, on-device crashes. Review what you import.
45
+ > The MIT [LICENSE](LICENSE) disclaims all warranty.
46
+
47
+ ## Repo family
48
+
49
+ | Repo | What it is |
50
+ |---|---|
51
+ | **helixgen-core** (this repo) | The `helixgen` Python package: libs, CLI, MCP server |
52
+ | [helixgen](https://github.com/sheax0r/helixgen) | The Claude Code plugin — `/tone`, `/setup`, `/device` skills + marketplace |
53
+ | [helixgen-tui](https://github.com/sheax0r/helixgen-tui) | Terminal UI for tones, setlists, and device control |
54
+
55
+ Want natural-language preset generation inside Claude Code? Install the
56
+ [plugin](https://github.com/sheax0r/helixgen) — you don't need this repo
57
+ directly. This repo is for using the CLI/library standalone, or developing
58
+ against it.
59
+
60
+ ## Install
61
+
62
+ Requires **Python 3.11+**. Not yet published to PyPI (coming); install from
63
+ source for now:
64
+
65
+ ```bash
66
+ pip install 'helixgen[device] @ git+https://github.com/sheax0r/helixgen-core'
67
+ ```
68
+
69
+ Extras: `device` (network device control: pyzmq, msgpack, paramiko), `mcp`
70
+ (the MCP server), `dev` (pytest).
71
+
72
+ A standalone install starts with an empty block library — seed it first:
73
+
74
+ ```bash
75
+ helixgen bootstrap
76
+ ```
77
+
78
+ Computing IR hashes from WAVs (`register-irs <wav>`, `ir-scan`) additionally
79
+ needs **libsndfile** (`brew install libsndfile` / `apt install libsndfile1`).
80
+
81
+ ## Quick tour
82
+
83
+ ```bash
84
+ helixgen list-blocks --category amp # browse the block library
85
+ helixgen show-block "Brit Plexi Brt" # exact param names/ranges
86
+ helixgen generate recipe.json -o tone.hsp # author a preset from a recipe
87
+ helixgen set-param tone.hsp "Tape Echo Stereo" Mix 0.3 # surgical edit
88
+ helixgen view tone.hsp # read a .hsp back as a recipe
89
+ helixgen device list # talk to a Stadium on the LAN
90
+ helixgen device sync my-setlist # mirror a managed setlist onto it
91
+ ```
92
+
93
+ Full references:
94
+
95
+ - [`docs/CLI.md`](docs/CLI.md) — every verb, including the complete
96
+ `helixgen device` reference.
97
+ - [`docs/recipe-reference.md`](docs/recipe-reference.md) — the exhaustive
98
+ recipe schema (paths, splits, snapshots, footswitches, expression, MIDI,
99
+ Command Center, IRs).
100
+ - [`docs/ir-hash-algorithm.md`](docs/ir-hash-algorithm.md) — the
101
+ reverse-engineered Stadium IR hash, field-validated.
102
+ - [`docs/helix-protocol.md`](docs/helix-protocol.md) — the network protocol.
103
+
104
+ ## Tests
105
+
106
+ Run from a source checkout with the package on `PYTHONPATH`:
107
+
108
+ ```bash
109
+ PYTHONPATH=$PWD/src python -m pytest
110
+ ```
111
+
112
+ ## Acknowledgments
113
+
114
+ helixgen leans **heavily** on
115
+ [**sensorium/phelix**](https://github.com/sensorium/phelix) — a
116
+ community-maintained, hand-curated repository of Helix block JSON files. The
117
+ `helixgen bootstrap` command clones phelix and ingests its `blocks/`
118
+ directory; without that pre-extracted catalog the cold-start experience of
119
+ this tool would be considerably worse.
120
+
121
+ ## Trademark notice
122
+
123
+ helixgen is an unofficial community project. **Line 6**, **Helix**, **HX**,
124
+ and related product names are trademarks of **Yamaha Guitar Group, Inc.**
125
+ helixgen is not affiliated with, endorsed by, or sponsored by Line 6 or
126
+ Yamaha. References in this project to Line 6 hardware, file formats (`.hlx`,
127
+ `.hsp`), and model identifiers are descriptive — helixgen generates files
128
+ intended to be compatible with Line 6 Helix devices but is not a Line 6
129
+ product.
130
+
131
+ If you are a representative of Line 6 / Yamaha and have concerns about this
132
+ project's name or scope, please open an issue.
@@ -0,0 +1,137 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ helixgen.egg-info/PKG-INFO
5
+ helixgen.egg-info/SOURCES.txt
6
+ helixgen.egg-info/dependency_links.txt
7
+ helixgen.egg-info/entry_points.txt
8
+ helixgen.egg-info/requires.txt
9
+ helixgen.egg-info/top_level.txt
10
+ mcp_server/__init__.py
11
+ mcp_server/__main__.py
12
+ mcp_server/server.py
13
+ mcp_server/tools.py
14
+ mcp_server/data/__init__.py
15
+ src/helixgen/__init__.py
16
+ src/helixgen/bootstrap.py
17
+ src/helixgen/chassis.py
18
+ src/helixgen/cli.py
19
+ src/helixgen/cli_device.py
20
+ src/helixgen/controllers.py
21
+ src/helixgen/flowparams.py
22
+ src/helixgen/generate.py
23
+ src/helixgen/hsp.py
24
+ src/helixgen/ingest.py
25
+ src/helixgen/ir.py
26
+ src/helixgen/irhash_cache.py
27
+ src/helixgen/library.py
28
+ src/helixgen/mutate.py
29
+ src/helixgen/preferences.py
30
+ src/helixgen/recipe.py
31
+ src/helixgen/spec.py
32
+ src/helixgen/view.py
33
+ src/helixgen/device/__init__.py
34
+ src/helixgen/device/_defs_data.json
35
+ src/helixgen/device/_modelmap.json
36
+ src/helixgen/device/_settings_pages.json
37
+ src/helixgen/device/backup.py
38
+ src/helixgen/device/bridge.py
39
+ src/helixgen/device/client.py
40
+ src/helixgen/device/content.py
41
+ src/helixgen/device/defs.py
42
+ src/helixgen/device/globaleq.py
43
+ src/helixgen/device/hss.py
44
+ src/helixgen/device/ir_upload.py
45
+ src/helixgen/device/irmd.py
46
+ src/helixgen/device/maintenance.py
47
+ src/helixgen/device/manifest.py
48
+ src/helixgen/device/meters.py
49
+ src/helixgen/device/modelmap.py
50
+ src/helixgen/device/osc.py
51
+ src/helixgen/device/reorder.py
52
+ src/helixgen/device/setlist_sync.py
53
+ src/helixgen/device/settings.py
54
+ src/helixgen/device/sftp.py
55
+ src/helixgen/device/subscribe.py
56
+ src/helixgen/device/transcode.py
57
+ src/helixgen/device/tuner.py
58
+ tests/test_bootstrap.py
59
+ tests/test_chassis.py
60
+ tests/test_cli.py
61
+ tests/test_cli_library.py
62
+ tests/test_commands.py
63
+ tests/test_controller_depth.py
64
+ tests/test_controllers.py
65
+ tests/test_decompile.py
66
+ tests/test_decompile_acceptance.py
67
+ tests/test_decompile_advanced.py
68
+ tests/test_decompile_sonic_fidelity.py
69
+ tests/test_device_backup.py
70
+ tests/test_device_bridge.py
71
+ tests/test_device_cli.py
72
+ tests/test_device_client.py
73
+ tests/test_device_content.py
74
+ tests/test_device_defs.py
75
+ tests/test_device_extra_import_surface.py
76
+ tests/test_device_globaleq.py
77
+ tests/test_device_irmd.py
78
+ tests/test_device_live.py
79
+ tests/test_device_liveops.py
80
+ tests/test_device_maintenance.py
81
+ tests/test_device_meters.py
82
+ tests/test_device_modelmap.py
83
+ tests/test_device_osc.py
84
+ tests/test_device_reorder.py
85
+ tests/test_device_settings.py
86
+ tests/test_device_sftp.py
87
+ tests/test_device_slots_cli.py
88
+ tests/test_device_subscribe.py
89
+ tests/test_device_tuner.py
90
+ tests/test_flowparams.py
91
+ tests/test_generate.py
92
+ tests/test_generate_combined.py
93
+ tests/test_generate_expression.py
94
+ tests/test_generate_flow.py
95
+ tests/test_generate_footswitches.py
96
+ tests/test_generate_input.py
97
+ tests/test_generate_snapshots.py
98
+ tests/test_hsp.py
99
+ tests/test_hss.py
100
+ tests/test_hss_cli.py
101
+ tests/test_ingest.py
102
+ tests/test_input_reshape.py
103
+ tests/test_ir_cache_cli.py
104
+ tests/test_ir_cli.py
105
+ tests/test_ir_generate.py
106
+ tests/test_ir_ingest.py
107
+ tests/test_ir_mapping.py
108
+ tests/test_ir_preset.py
109
+ tests/test_ir_spec.py
110
+ tests/test_ir_upload.py
111
+ tests/test_irhash_cache.py
112
+ tests/test_library.py
113
+ tests/test_manifest.py
114
+ tests/test_manifest_ops.py
115
+ tests/test_manifest_v2.py
116
+ tests/test_midi_controllers.py
117
+ tests/test_mutate.py
118
+ tests/test_mutate_cli.py
119
+ tests/test_mutate_flow.py
120
+ tests/test_preferences.py
121
+ tests/test_recipe.py
122
+ tests/test_roundtrip.py
123
+ tests/test_setlist_sync.py
124
+ tests/test_setlist_sync_mirror.py
125
+ tests/test_spec.py
126
+ tests/test_spec_commands.py
127
+ tests/test_spec_expression.py
128
+ tests/test_spec_flow.py
129
+ tests/test_spec_footswitches.py
130
+ tests/test_spec_input.py
131
+ tests/test_spec_midi.py
132
+ tests/test_trails_fxloop.py
133
+ tests/test_transcode.py
134
+ tests/test_transcode_flow.py
135
+ tests/test_view.py
136
+ tests/test_view_cli.py
137
+ tests/test_view_flow.py
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ helixgen = helixgen.cli:cli
@@ -0,0 +1,12 @@
1
+ click>=8.1
2
+
3
+ [dev]
4
+ pytest>=7.4
5
+
6
+ [device]
7
+ pyzmq>=25
8
+ msgpack>=1
9
+ paramiko>=3.4
10
+
11
+ [mcp]
12
+ mcp<2.0,>=1.0
@@ -0,0 +1,2 @@
1
+ helixgen
2
+ mcp_server
@@ -0,0 +1,9 @@
1
+ """helixgen MCP server — drives the helixgen library from an MCP client."""
2
+
3
+ # Track the helixgen library version rather than carrying a separate number
4
+ # that drifts out of date. The plugin/pip environments always have helixgen
5
+ # importable; the fallback only matters in a stripped-down context.
6
+ try:
7
+ from helixgen import __version__
8
+ except Exception: # pragma: no cover - helixgen not importable
9
+ __version__ = "0.0.0"
@@ -0,0 +1,66 @@
1
+ """Entry point for `python -m mcp_server`.
2
+
3
+ Two transports, picked by the MCP_TRANSPORT env var:
4
+
5
+ - `stdio` (Claude Code spawning the server as a subprocess) — no host/port,
6
+ no allow-list config. The harness pipes JSON-RPC over stdin/stdout. This is
7
+ what the shipped plugin uses.
8
+ - `streamable-http` (default; the Render deploy) — binds MCP_HOST:$PORT. The
9
+ bind host defaults to the loopback `127.0.0.1`; a deploy that must accept
10
+ external connections (e.g. Render) opts in explicitly with MCP_HOST=0.0.0.0.
11
+ DNS-rebinding protection (TransportSecuritySettings) is installed
12
+ unconditionally and is fail-closed: with no MCP_ALLOWED_HOSTS set it defaults
13
+ to loopback Host headers only, so the default 127.0.0.1 bind works out of the
14
+ box while a stray public Host header is rejected. A public deploy
15
+ (MCP_HOST=0.0.0.0) must therefore also set MCP_ALLOWED_HOSTS (CSV, e.g. its
16
+ external hostname); MCP_ALLOWED_ORIGINS (CSV) further restricts Origins.
17
+
18
+ In mcp 1.27.2 the host/port live on app.settings (not on app.run()), so we
19
+ mutate the settings before run().
20
+ """
21
+ from __future__ import annotations
22
+
23
+ import os
24
+
25
+ from mcp.server.transport_security import TransportSecuritySettings
26
+
27
+ from mcp_server.server import app
28
+
29
+
30
+ def _csv_env(name: str) -> list[str]:
31
+ raw = os.environ.get(name, "")
32
+ return [s.strip() for s in raw.split(",") if s.strip()]
33
+
34
+
35
+ def main() -> None:
36
+ transport = os.environ.get("MCP_TRANSPORT", "streamable-http")
37
+
38
+ if transport == "stdio":
39
+ app.run(transport="stdio")
40
+ return
41
+
42
+ # Default to loopback; opt in to a public bind with MCP_HOST=0.0.0.0.
43
+ app.settings.host = os.environ.get("MCP_HOST", "127.0.0.1")
44
+ app.settings.port = int(os.environ.get("PORT", "10000"))
45
+
46
+ # Always install DNS-rebinding protection (enable_dns_rebinding_protection
47
+ # defaults to True). The middleware is fail-closed: an empty allowed_hosts
48
+ # rejects *every* Host header, so we supply a loopback default that keeps
49
+ # the default 127.0.0.1 bind working. A public deploy must set
50
+ # MCP_ALLOWED_HOSTS to its external hostname.
51
+ allowed_hosts = _csv_env("MCP_ALLOWED_HOSTS") or [
52
+ "127.0.0.1",
53
+ "127.0.0.1:*",
54
+ "localhost",
55
+ "localhost:*",
56
+ ]
57
+ app.settings.transport_security = TransportSecuritySettings(
58
+ allowed_hosts=allowed_hosts,
59
+ allowed_origins=_csv_env("MCP_ALLOWED_ORIGINS"),
60
+ )
61
+
62
+ app.run(transport="streamable-http")
63
+
64
+
65
+ if __name__ == "__main__":
66
+ main()
File without changes