├── .gitignore ├── fh2_configurator ├── images │ ├── zzz.icns │ ├── zzz.ico │ └── zzz.png ├── src │ ├── index.js │ └── index.html └── package.json ├── README.md ├── index.html ├── LICENSE ├── fh2_screenshot_tool.html ├── fh2_scala_tool.html ├── fh2_launchpad.html ├── fh2_access.html └── fh2_preset_tool.html /.gitignore: -------------------------------------------------------------------------------- 1 | fh2_configurator 2 | -------------------------------------------------------------------------------- /fh2_configurator/images/zzz.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/expertsleepersltd/FH-2_tools/HEAD/fh2_configurator/images/zzz.icns -------------------------------------------------------------------------------- /fh2_configurator/images/zzz.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/expertsleepersltd/FH-2_tools/HEAD/fh2_configurator/images/zzz.ico -------------------------------------------------------------------------------- /fh2_configurator/images/zzz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/expertsleepersltd/FH-2_tools/HEAD/fh2_configurator/images/zzz.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FH-2_tools 2 | Open source tools relating to the FH-2 Eurorack module 3 | 4 | View this project as a web page (for ease of downloading scripts): https://expertsleepersltd.github.io/FH-2_tools/ 5 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 |

FH-2 tools

11 | 12 |

13 | Open source tools relating to the FH-2 Eurorack module. 14 | 15 |

16 | Copyright ©2024 Expert Sleepers Ltd. 17 | 18 |

19 | The GitHub project page is here. 20 | 21 |

Tools

22 | 23 |

24 | fh2_access.html 25 | 26 |

27 | fh2_config_tool.html 28 | 29 |

30 | fh2_launchpad.html 31 | 32 |

33 | fh2_preset_tool.html 34 | 35 |

36 | fh2_scala_tool.html 37 | 38 |

39 | fh2_screenshot_tool.html 40 | 41 |

Support

42 | 43 |

44 | Please use the forum. 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Expert Sleepers Ltd 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. 22 | -------------------------------------------------------------------------------- /fh2_configurator/src/index.js: -------------------------------------------------------------------------------- 1 | import { app, BrowserWindow } from 'electron'; 2 | 3 | // Handle creating/removing shortcuts on Windows when installing/uninstalling. 4 | if (require('electron-squirrel-startup')) { // eslint-disable-line global-require 5 | app.quit(); 6 | } 7 | 8 | // Keep a global reference of the window object, if you don't, the window will 9 | // be closed automatically when the JavaScript object is garbage collected. 10 | let mainWindow; 11 | 12 | const createWindow = () => { 13 | // Create the browser window. 14 | mainWindow = new BrowserWindow({ 15 | width: 1600, 16 | height: 900, 17 | }); 18 | 19 | // and load the index.html of the app. 20 | mainWindow.loadURL(`file://${__dirname}/index.html`); 21 | 22 | // Open the DevTools. 23 | //mainWindow.webContents.openDevTools(); 24 | 25 | // Emitted when the window is closed. 26 | mainWindow.on('closed', () => { 27 | // Dereference the window object, usually you would store windows 28 | // in an array if your app supports multi windows, this is the time 29 | // when you should delete the corresponding element. 30 | mainWindow = null; 31 | }); 32 | }; 33 | 34 | // This method will be called when Electron has finished 35 | // initialization and is ready to create browser windows. 36 | // Some APIs can only be used after this event occurs. 37 | app.on('ready', createWindow); 38 | 39 | // Quit when all windows are closed. 40 | app.on('window-all-closed', () => { 41 | // On OS X it is common for applications and their menu bar 42 | // to stay active until the user quits explicitly with Cmd + Q 43 | if (process.platform !== 'darwin') { 44 | app.quit(); 45 | } 46 | }); 47 | 48 | app.on('activate', () => { 49 | // On OS X it's common to re-create a window in the app when the 50 | // dock icon is clicked and there are no other windows open. 51 | if (mainWindow === null) { 52 | createWindow(); 53 | } 54 | }); 55 | 56 | // In this file you can include the rest of your app's specific main process 57 | // code. You can also put them in separate files and import them here. 58 | -------------------------------------------------------------------------------- /fh2_configurator/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fh2_configurator", 3 | "productName": "FH-2 Configurator", 4 | "version": "1.15.0", 5 | "description": "Configuration tool for the Expert Sleepers FH-2", 6 | "main": "src/index.js", 7 | "scripts": { 8 | "start": "electron-forge start", 9 | "package": "electron-forge package", 10 | "make": "electron-forge make", 11 | "publish": "electron-forge publish", 12 | "lint": "eslint src --color" 13 | }, 14 | "keywords": [], 15 | "author": "Expert Sleepers", 16 | "license": "MIT", 17 | "config": { 18 | "forge": { 19 | "make_targets": { 20 | "win32": [ 21 | "squirrel" 22 | ], 23 | "darwin": [ 24 | "zip" 25 | ], 26 | "linux": [ 27 | "deb", 28 | "rpm" 29 | ] 30 | }, 31 | "electronPackagerConfig": { 32 | "icon": "./images/zzz", 33 | "appCopyright": "Copyright © 2021 Expert Sleepers Ltd", 34 | "appBundleId": "com.expert-sleepers.fh2configurator", 35 | "appCategoryType": "public.app-category.music", 36 | "osxSign": true, 37 | "packageManager": "yarn" 38 | }, 39 | "electronWinstallerConfig": { 40 | "name": "fh2_configurator" 41 | }, 42 | "electronInstallerDebian": {}, 43 | "electronInstallerRedhat": {}, 44 | "github_repository": { 45 | "owner": "", 46 | "name": "" 47 | }, 48 | "windowsStoreConfig": { 49 | "packageName": "", 50 | "name": "fh2_configurator" 51 | } 52 | } 53 | }, 54 | "dependencies": { 55 | "electron-compile": "^6.4.4", 56 | "electron-squirrel-startup": "^1.0.0" 57 | }, 58 | "devDependencies": { 59 | "babel-plugin-transform-async-to-generator": "^6.24.1", 60 | "babel-preset-env": "^1.7.0", 61 | "babel-preset-react": "^6.24.1", 62 | "electron-forge": "^5.2.4", 63 | "electron-prebuilt-compile": "4.0.0", 64 | "eslint": "^3", 65 | "eslint-config-airbnb": "^15", 66 | "eslint-plugin-import": "^2", 67 | "eslint-plugin-jsx-a11y": "^5", 68 | "eslint-plugin-react": "^7" 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /fh2_screenshot_tool.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FH-2 Screenshot Tool 5 | 6 | 7 | 39 | 40 | 85 | 86 | 87 | 88 | 89 | 90 |

91 | At the time of writing this will work only in Google's Chrome browser. Chrome may block SysEx access if you run this from a website, in which case download the html file locally and run it from there. 92 |
93 |
94 |

95 | 96 | 97 | Send to MIDI port: 98 | Listen on MIDI port: 99 |

100 | 101 | 102 | 103 |

104 | 105 |

106 | 107 | 141 | 142 | 220 | 221 | 222 | -------------------------------------------------------------------------------- /fh2_scala_tool.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FH-2 Scala Tool 5 | 6 | 7 | 39 | 40 | 85 | 86 | 87 | 88 | 89 | 90 |

91 | At the time of writing this will work only in Google's Chrome browser. Chrome may block SysEx access if you run this from a website, in which case download the html file locally and run it from there. 92 |
93 |
94 |

95 | 96 | Send to MIDI port: 97 | Listen on MIDI port: 98 |

99 | 100 | 101 | 102 |

103 | 104 | 105 | 117 | 129 | 130 | 131 | 132 | 133 | 134 | 135 |
106 | 107 |
108 | 109 | to slot 116 |
118 | 119 |
120 | 121 | to slot 128 |
136 |

137 | 138 | 164 | 165 | 288 | 289 | 290 | -------------------------------------------------------------------------------- /fh2_launchpad.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FH-2 Launchpad Tool 5 | 6 | 7 | 8 | 85 | 86 | 184 | 185 | 186 | 187 | 188 | 189 |

190 | At the time of writing this will work only in Google's Chrome browser or in the Opera browser. Chrome may block SysEx access if you run this from a website, in which case download the html file locally and run it from there. 191 |
192 |
193 |
194 | This version is for FH-2 firmware v1.21 and above. 195 | 196 |
197 |

198 | 199 | 200 | 201 |
202 | 203 | 204 |

205 | 206 | 207 | 208 |

209 | 210 | 373 | 374 | 375 | 376 | 377 | 381 | 382 | 405 |
406 | 407 | 550 | 551 | 552 | -------------------------------------------------------------------------------- /fh2_access.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FH-2 Access 6 | 59 | 264 | 265 | 266 |

267 | At the time of writing this will work only in Google's Chrome browser or in the Opera browser. Chrome may block SysEx access if you run this from a website, in which case download the html file locally and run it from there. 268 |
269 |
Web MIDI status: OK
270 |
271 | This version is for FH-2 firmware v1.15 and above. 272 |
273 |

274 | 275 | 276 | 277 | 278 |
279 |

280 |

Display

281 |
282 |
283 |
284 |
285 |

286 |

287 |
288 |

Keystrokes

289 | 298 |

Remote control

299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 |

Info

307 | 308 | 312 | 1034 | 1035 | -------------------------------------------------------------------------------- /fh2_preset_tool.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FH-2 Preset Tool 5 | 6 | 7 | 8 | 105 | 106 | 488 | 489 | 545 | 546 | 547 | 548 | 549 | 550 |
551 | At the time of writing this will work only in Google's Chrome browser or in the Opera browser. Chrome may block SysEx access if you run this from a website, in which case download the html file locally and run it from there. 552 |
553 |
554 | This tool should be considered a beta release. Please report bugs and provide feedback via the forum. 555 |
556 |
557 |
558 | This version is for FH-2 firmware v1.24 and above. 559 | 560 |
561 |

562 | 563 | 564 | 565 | 566 | 569 |
570 | 571 | 572 | 573 |

574 |
575 | 576 | 577 |
578 |
579 | 580 | Click to Save Preset 581 |
582 |

583 | 584 | 585 | 586 |

587 | 588 |

589 | 590 | Show Globals 591 | 592 | Show Portamento/Transpose/Envelopes 593 | 594 | Show Arpeggiators 595 | 596 | Show Triggers 597 | 598 | Show Euclidean Patterns 599 | 600 | Show Sequencers 601 |
602 | 603 | Show FH-2 Output Configurator 604 | | Show FHX-8CV Expander Outputs: 605 | 611 | 612 | Show SR Random 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 638 | 644 | 645 | 646 |
TempoSwing
TypeAmountPosition 1Position 2Position 3
647 | 648 | 649 | 650 | 651 | 652 | 653 |
654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 772 |
PortamentoTransposeEnvelopesRandomEnvelope shapesScala
AttackDecaySustainReleaseRangeDepthVelocity DepthAttackDecayReleaseEnable.scl.kbm
773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 826 |
Arpeggiator
ModeRangeGate LengthLatchRateReset
827 | 828 | 829 | 830 | 831 | 832 | 843 |
Triggers/Gates
844 | 845 | 846 | 847 | 848 | 849 | 850 | 851 | 852 | 902 |
Euclidean Patterns
PulsesStepsRotationRateGate LengthAccent RateReset
903 | 904 | 905 | 906 | 907 | 908 | 909 | 910 | 911 | 912 | 927 |
Shift Register Random
DirectionLengthRandomnessRateAttenuatorScaleKeyGate Length
928 | 929 | 930 | 931 | 932 | 933 | 974 | 1025 |
Sequencers
934 | 935 | 973 |
Note sequencers
975 | 976 | 977 | 1024 |
Global
Drum sequencers
1026 | 1027 | 1072 | 1073 | 1083 | 1084 |


1085 | 1086 | 1093 | 1094 | 1095 |

1096 | 1103 | 1104 | 1105 | 1106 | 1341 | 1342 | 1570 | 1571 | 1572 | -------------------------------------------------------------------------------- /fh2_configurator/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FH-2 Configuration Tool 5 | 6 | 7 | 8 | 79 | 80 | 587 | 588 | 806 | 807 | 808 | 809 | 810 | 811 |

812 |
813 | This version is for FH-2 firmware v1.15 and above. 814 |
815 |

816 | 817 | 818 | 819 | 820 |
821 | 822 | 823 | 824 |

825 | 826 | 827 | 828 |

829 | 830 |

831 | 832 | Show Globals 833 | 834 | Show MIDI/CV Converters 835 | 836 | Show Portamento/Transpose/Envelopes 837 | 838 | Show Arpeggiators 839 | 840 | Show Clocks 841 | 842 | Show Triggers 843 | 844 | Show Euclidean Patterns 845 | 846 | Show Sequencers 847 |
848 | 849 | Show FH-2 Output Configurator 850 | | Show FHX-8CV Expander Output Configurator: 851 | 857 | 865 | 866 | Show Gamepad 867 | 868 | Show HID Keyboard 869 | 870 | Show CV/MIDI 871 | 872 | 873 | 874 | 875 | 876 | 877 | 878 | 879 | 880 | 881 | 882 | 883 | 884 | 885 | 886 | 887 | 888 | 889 | 890 | 891 | 892 | 893 | 894 | 895 | 896 | 897 | 898 | 899 | 906 | 913 | 920 | 923 | 930 | 938 | 939 | 940 | 941 | 944 | 947 | 950 | 951 | 955 | 958 | 961 | 962 | 967 | 972 | 977 | 978 | 983 | 988 | 989 | 990 | 991 |
Legato
velocity
Global
transpose
Trigger
length
Ext Clock
Multiplier
Ext Clock
Run Control
Euclidean
Accent
Preset Program ChangeSoft
takeover
Tap TempoStart/StopInternal tempoDisplay mode/item
ChannelTypeChannelNote or CCTypeChannelNote or CCChannel/CCMinMaxChannel/CCChannel/CC
992 | 997 | 998 | 999 | 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 | 1010 | 1011 | 1012 | 1013 | 1014 | 1015 | 1016 | 1017 | 1018 | 1019 | 1020 | 1021 | 1022 | 1023 | 1024 | 1025 | 1026 | 1230 |
Enable
MIDI
Channel
Note rangeTypeBase
Output
Base
Gate
CV
Gate
Velocity
Gate
Velocity
Release
Velocity
Trigger
Envelope
Aftertouch
Random
Y
Gate
Aftertouch
Bend
Gated
Aftertouch
SustainVoice
allocation
Prevent
stealing
VoicesStrideLast
channel
Bend
range
Mono
retrigger
Interrupt
gate
Env
zero
Per voice outputsParaphonic outputsUpDown
CC
1231 | 1232 | 1233 | 1234 | 1235 | 1236 | 1237 | 1238 | 1239 | 1240 | 1241 | 1242 | 1243 | 1244 | 1245 | 1246 | 1247 | 1248 | 1249 | 1250 | 1251 | 1252 | 1253 | 1333 |
PortamentoTransposeEnvelopesRandom
AttackDecaySustainReleaseRangeDepthVelocity Depth
Preset Items - Channel/CC
1334 | 1335 | 1336 | 1337 | 1338 | 1339 | 1340 | 1341 | 1342 | 1343 | 1344 | 1345 | 1346 | 1347 | 1348 | 1349 | 1350 | 1351 | 1442 |
Arpeggiator
ModeRangeGate LengthLatchRateResetAddRemoveRestTruncateTransposeTransp. in keySet root
Preset Items - Channel/CCCommands - Channel/CC
1443 | 1444 | 1445 | 1446 | 1447 | 1448 | 1449 | 1450 | 1451 | 1498 |
Clocks
OutputTypeBaseMultiplierLengthShift
1499 | 1500 | 1501 | 1502 | 1503 | 1504 | 1505 | 1506 | 1507 | 1539 |
Triggers/Gates
OutputTypeChannelNoteEnvelope Settings
1540 | 1541 | 1542 | 1543 | 1544 | 1545 | 1546 | 1547 | 1548 | 1549 | 1550 | 1551 | 1552 | 1611 |
Euclidean Patterns
OutputOff OutputPulsesStepsRotationRateGate LengthAccent RateReset
Channel/CCChannel/CCChannel/CCChannel/CCChannel/CCChannel/CCChannel/CC
1612 | 1613 | 1614 | 1615 | 1616 | 1617 | 1618 | 1619 | 1641 | 1642 | 1656 |
Sequencers
MIDI channelInternalUSB CUSB ADINClock source
Note sequencers(for rate 0)
Drum sequencers
1657 | 1658 | 1834 | 1835 | 1836 | 1837 | 1838 | 1839 | 1840 | 1841 | 1842 | 1872 |
HID Gamepad
OutputUsageScaleOffset
1873 | 1874 | 1875 | 1876 | 1877 | 1878 | 1879 | 1880 | 1881 | 1921 |
HID Keyboard
OutputTypeKeyReleasePress
1922 | 1923 | 1924 | 1925 | 1926 | 1927 | 1928 | 1929 | 1976 |
CV/MIDIOutput to
EnableTypeChannelCC or Note0V5VInternalUSB AUSB CDIN
1977 | 1978 | 1990 | 1991 | 2418 | 2419 | 2538 | 2539 | 2540 | --------------------------------------------------------------------------------