A site for sharing, creating and organizing your Plinky presets, samples, wavetables and packs.
Use it at plinkyhub.com.
Browse and share presets with the community. Edit preset parameters in a visual editor, organize presets with categories, and star your favourites.
Upload WAV files or import samples directly from your Plinky's UF2 files. Configure slice points, base note, fine tune, and pitched/tape mode with a visual slice editor. Share samples with the community.
Create custom wavetables from 15 single-cycle WAV files (c0 through c14). The app generates a wavetab.uf2 using the same algorithm as the plinkysynth/wavetable tool, with built-in saw and sine waves added automatically. Upload wavetables directly to your Plinky via the Tunnel of Lights mode.
Bundle presets, samples and a wavetable together into a pack. Save a complete pack to your Plinky in one go, or load a pack from your Plinky to back it up and share it with others.
Write presets, samples, wavetables and full packs directly to your Plinky when it is mounted as a USB drive in Tunnel of Lights mode.
If you run into any problems or have feature requests, you can:
- Open an issue on GitHub
- Reach out to spydon on the Plinky Discord
- Flutter Web (Flutter SDK 3.41.4 or newer) compiled to WebAssembly
(
--wasm) for near-native performance in the browser. - Riverpod for state management and go_router for routing.
- Supabase (Postgres, Auth, Storage, Row-Level Security) as the backend,
accessed via
supabase_flutter. - WebUSB for direct communication with Plinky in Tunnel of Lights mode.
- flutter_soloud for audio playback and MediaPipe Hands for the webcam-based play tab.
- freezed + json_serializable for immutable models, generated via
build_runner.
- Flutter SDK 3.41.4 or newer
- A Chromium-based browser (WebUSB and WebAssembly are required)
- Supabase CLI if you want to run the backend locally
Copy .env.template to .env and fill in the Supabase credentials you want
to use:
cp .env.template .envflutter pub get
dart run build_runner build --delete-conflicting-outputsPoint SUPABASE_URL and SUPABASE_ANON_KEY in .env at your hosted project,
then launch the app in Chrome with WebAssembly enabled:
flutter run -d chrome --wasmStart the local Supabase stack (Postgres, Auth, Studio, etc.) from the repo root:
supabase startThe CLI prints a local API -> Project URL and Authentication Keys -> Publishable. Put those into .env:
SUPABASE_URL=http://127.0.0.1:54321
SUPABASE_ANON_KEY=<anon key printed by supabase start>
Note: if you are using podman on Linux with RLIMIT_NOFILE, you should do the following:
- Update the
/etc/systemd/user.confand setDefaultLimitNOFILE=1048576under the[Manager]section. - Update the PAM limits by adding the following lines to
/etc/security/limits.conf(or a file in/etc/security/limits.d/):* hard nofile 1048576 - Reboot your system for the changes to take effect.
This is because supabase requests a nofile rlimit of 1048576...
- Visit http://127.0.0.1:54321/project/default/auth/users
- Add a user with the email and password you specified in
.envasDEV_EMAILandDEV_PASSWORD- You will get a random uuid for your username (you can see this when you log in, or in the
profilestable in the database).
- You will get a random uuid for your username (you can see this when you log in, or in the
Migrations under supabase/migrations/ are applied automatically on
supabase start. Then run the app the same way:
flutter run -d chrome --wasmStop the stack with supabase stop when you are done.
If you want to reset the database to a clean state, run:
supabase db resetDon't forget to re-add your user after resetting.
flutter build web --wasm --releaseThe output in build/web/ is a static site that can be served from any
static host.
If you get a SecurityError: Failed to execute 'open' on 'USBDevice': Access denied
error when trying to connect to Plinky, you need to grant your user permission to
access the USB device.
-
Verify Plinky is connected by running
lsusb. You should see something like:Bus 001 Device 026: ID cafe:4018 Plinky PlinkySynth MIDI -
Add your user to the
plugdevgroup:sudo usermod -a -G plugdev $USERLog out and back in for the change to take effect. Verify with the
groupscommand. -
Create a udev rule:
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="cafe", MODE="0660", GROUP="plugdev"' | \ sudo tee /etc/udev/rules.d/99-plinky.rules
-
Reload udev rules:
sudo udevadm control --reload-rules
-
Reconnect Plinky by unplugging and replugging the USB cable.