# Floe> Floe is a free, open-source sample library engine. Available as an audio plugin for Windows, macOS and Linux. --- # Beta Testing > Information about beta testing for Floe Beta releases give you early access to new features and improvements before they're included in stable releases. However, they may also come with some incomplete functionality and increased risk of bugs. important On the docs website, change the version selector (top right) from 'Stable' to 'Beta' to see documentation for beta features. ## At a glance - Download and install beta releases from the [download page](/download) when available. - All your libraries, presets and settings are preserved. - Change the documentation to 'Beta' (top-right of the website) to see beta-specific docs. - Switch back to the stable version anytime by installing the latest stable release (overwriting the beta). ## Current status There are no beta versions available. The latest stable release, 2.0.2, is the newest possible version of Floe. ## How Beta Downloads Work Beta downloads are available on the [download page](/download) when there's a beta release newer than the latest stable version. If no beta link appears, it means the current stable release is already the newest version available. The download page lists all available files - read the filenames carefully and download the appropriate one for your system. Just like stable releases, most users will want the standard installer file rather than manual-installation files. The installation process is the same as for stable releases, see the [installation docs](/docs/installation/download-and-install-floe) if you need help. On Linux, substitute the beta download link into the regular install command or follow the manual-install instructions on the help page. Your libraries, presets and settings are always preserved even when switching from stable to beta versions or vice versa. ## Feedback Floe is an independent project, and your feedback helps us improve the software. If you encounter issues or have suggestions, we'd love to hear from you. For beta testing feedback in particular, we often post about the specifics that we're looking for on the [blog](/blog) page. There's many ways to provide feedback, please choose one that suits you best: - Open a [GitHub Discussion](https://github.com/floe-audio/Floe/discussions). You will need a GitHub account to do this. - Report bugs or issues on the [GitHub Issues page](https://github.com/floe-audio/Floe/issues). - Use the built-in 'Send Feedback' form in Floe itself (we're aware the text input is a bit clunky right now - it's on the roadmap). - Reach out to Sam via email. - Post on [FrozenPlain's forum](https://forum.frozenplain.com/t/floe) in the Floe section. ## Installation and Versioning Beta releases install just like stable releases and will overwrite any existing Floe installation (whether beta or stable). If you want to return to the stable version after trying a beta, simply download and install the latest stable release. Version numbers indicate release order: for example, v1.0.0-beta.2 is newer than v1.0.0-beta.1, but both are preview versions that come before the final v1.0.0 release. ## Always Stay Updated Always have the latest version of Floe - including beta features - by enabling _Include beta version when checking for updates_ in the preferences panel. This way, Floe will let you know when there's a new version available, whether it's stable or beta. --- # Mirage Compatibility > Floe is the successor to FrozenPlain's Mirage, with full backwards compatibility Floe includes full compatibility with Mirage, a sample library platform developed by FrozenPlain from 2018 to 2024. Floe evolved from this foundation - expanding into open-source development and broader platform compatibility. ## Technical Details Mirage libraries use a custom `.mdata` binary format for storing samples and metadata. The **Mirage Compatibility package** provides additional assets such as images and audio files that were previously embedded within Mirage but are handled separately in Floe. This package is automatically included with FrozenPlain's Mirage-format products, but you can also [download Mirage Compatibility](/packages/mirage-compatibility) separately. Floe automatically detects existing Mirage installations and loads libraries without requiring conversion or re-installation. Both Mirage and Floe can coexist on the same system without conflicts. For information about FrozenPlain's transition from Mirage to Floe, including product catalogue details and customer migration guidance, see [FrozenPlain's transition page](https://www.frozenplain.com/support/mirage/mirage-floe-transition). --- # Sponsorship > Support Floe's development through sponsorship Sponsoring Floe helps support its ongoing development and maintenance. As a sponsor, you can receive priority support and influence the direction of the project. Additionally, you can submit professional high-quality packages to the [Package Directory](/packages). As another service, we can also help with converting or creating Floe sample libraries. Please contact [Sam](mailto:sam@frozenplain.com) to discuss more details. * * * [![FrozenPlain Logo](https://www.frozenplain.com/icons/logo-adj.svg)](https://www.frozenplain.com) Floe and [FrozenPlain](https://www.frozenplain.com) are companion projects created by the same developer. However, Floe is intentionally encapsulated as its own platform: an outlet for Sam's open-source software passion, freely available for others to explore and build sample libraries for. It's totally free and is here for the wider music-making community. Looking to sell your own libraries? FrozenPlain offers a revenue-sharing partnership for high-quality sample libraries, handling payment processing, marketing, and distribution. [Get in touch](https://www.frozenplain.com/contact) to learn more. --- # Beta Testing > Information about beta testing for Floe Beta releases give you early access to new features and improvements before they're included in stable releases. However, they may also come with some incomplete functionality and increased risk of bugs. important On the docs website, change the version selector (top right) from 'Stable' to 'Beta' to see documentation for beta features. ## At a glance - Download and install beta releases from the [download page](/download) when available. - All your libraries, presets and settings are preserved. - Change the documentation to 'Beta' (top-right of the website) to see beta-specific docs. - Switch back to the stable version anytime by installing the latest stable release (overwriting the beta). ## Current status There are no beta versions available. The latest stable release, 2.0.2, is the newest possible version of Floe. ## How Beta Downloads Work Beta downloads are available on the [download page](/download) when there's a beta release newer than the latest stable version. If no beta link appears, it means the current stable release is already the newest version available. The download page lists all available files - read the filenames carefully and download the appropriate one for your system. Just like stable releases, most users will want the standard installer file rather than manual-installation files. The installation process is the same as for stable releases, see the [installation docs](/docs/beta/installation/download-and-install-floe) if you need help. On Linux, substitute the beta download link into the regular install command or follow the manual-install instructions on the help page. Your libraries, presets and settings are always preserved even when switching from stable to beta versions or vice versa. ## Feedback Floe is an independent project, and your feedback helps us improve the software. If you encounter issues or have suggestions, we'd love to hear from you. For beta testing feedback in particular, we often post about the specifics that we're looking for on the [blog](/blog) page. There's many ways to provide feedback, please choose one that suits you best: - Open a [GitHub Discussion](https://github.com/floe-audio/Floe/discussions). You will need a GitHub account to do this. - Report bugs or issues on the [GitHub Issues page](https://github.com/floe-audio/Floe/issues). - Use the built-in 'Send Feedback' form in Floe itself (we're aware the text input is a bit clunky right now - it's on the roadmap). - Reach out to Sam via email. - Post on [FrozenPlain's forum](https://forum.frozenplain.com/t/floe) in the Floe section. ## Installation and Versioning Beta releases install just like stable releases and will overwrite any existing Floe installation (whether beta or stable). If you want to return to the stable version after trying a beta, simply download and install the latest stable release. Version numbers indicate release order: for example, v1.0.0-beta.2 is newer than v1.0.0-beta.1, but both are preview versions that come before the final v1.0.0 release. ## Always Stay Updated Always have the latest version of Floe - including beta features - by enabling _Include beta version when checking for updates_ in the preferences panel. This way, Floe will let you know when there's a new version available, whether it's stable or beta. --- # Mirage Compatibility > Floe is the successor to FrozenPlain's Mirage, with full backwards compatibility Floe includes full compatibility with Mirage, a sample library platform developed by FrozenPlain from 2018 to 2024. Floe evolved from this foundation - expanding into open-source development and broader platform compatibility. ## Technical Details Mirage libraries use a custom `.mdata` binary format for storing samples and metadata. The **Mirage Compatibility package** provides additional assets such as images and audio files that were previously embedded within Mirage but are handled separately in Floe. This package is automatically included with FrozenPlain's Mirage-format products, but you can also [download Mirage Compatibility](/packages/mirage-compatibility) separately. Floe automatically detects existing Mirage installations and loads libraries without requiring conversion or re-installation. Both Mirage and Floe can coexist on the same system without conflicts. For information about FrozenPlain's transition from Mirage to Floe, including product catalogue details and customer migration guidance, see [FrozenPlain's transition page](https://www.frozenplain.com/support/mirage/mirage-floe-transition). --- # Sponsorship > Support Floe's development through sponsorship Sponsoring Floe helps support its ongoing development and maintenance. As a sponsor, you can receive priority support and influence the direction of the project. Additionally, you can submit professional high-quality packages to the [Package Directory](/packages). As another service, we can also help with converting or creating Floe sample libraries. Please contact [Sam](mailto:sam@frozenplain.com) to discuss more details. * * * [![FrozenPlain Logo](https://www.frozenplain.com/icons/logo-adj.svg)](https://www.frozenplain.com) Floe and [FrozenPlain](https://www.frozenplain.com) are companion projects created by the same developer. However, Floe is intentionally encapsulated as its own platform: an outlet for Sam's open-source software passion, freely available for others to explore and build sample libraries for. It's totally free and is here for the wider music-making community. Looking to sell your own libraries? FrozenPlain offers a revenue-sharing partnership for high-quality sample libraries, handling payment processing, marketing, and distribution. [Get in touch](https://www.frozenplain.com/contact) to learn more. --- # Changelog > A detailed changelog of all versions of Floe ## 2.0.3 - Fix possible crash when a host fires a timer callback without a timer being registered - Fix possible crash when loading a library background image with a very large window size - Fix possible crash when reading a corrupted or invalid package file: such files are now reported as errors - Fix possible crash and broken audio when a host or corrupted preset/DAW project provides invalid parameter values: values are now sanitised - Fix possible crash when a host sends an invalid pitch bend message ## 2.0.2 - Fix possible crash when opening the General tab of the preferences panel - Fix crash when installing packages requires more than one file-conflict decision - Fix possible crash when opening file dialogs on macOS: dialogs are now attached to Floe's window as a sheet - Fix package installation issue on macOS when attempting to install to old Mirage folder (admin required) - Improve CPU usage of pitch LFO ## 2.0.1 - Fix crash when trying to install multiple encrypted packages at once - Fix clicks in audio related to using large resonance values in the filters/EQ - Add right-click utilities to Pitch and Detune parameters such as +1 octave - Packager: change how the package name override works to be more intuitive ## 2.0.0 Massive set of new features and improvements. In summary: - UI split into 3 pages: perform, layers, effects - Granular synthesis - Arpeggiators - Visual design improved throughout including displays for filters, EQ, etc. - Improved shape of many parameters - New LFO shapes - New compressor mode - Extra band added to EQ - EQ added to the FX rack - Better settings for MIDI CC setup, and reproducibility - Random variation strip for exploring new presets - New default background image This release includes all changes listed through the beta changelogs: 1.2.0-beta.1, and 2.0.0-beta.1 through to 2.0.0-beta.6: Additionally, this version differs from 2.0.0-beta.6: - New background image - Show Modern compressor Attack and Release as milliseconds instead of percentage - Fix remaining issue with carat position in text inputs - Packager CLI: change to subcommand format: info or pack. ## 2.0.0-beta.6 - Preset favourites now survive re-saving and library updates: each preset file carries a stable UUID embedded by Floe at save time, used as the identity for favourites and the "currently loaded" indicator. Older preset files without an embedded UUID continue to work via a content-derived fallback. Existing favourites are migrated automatically. - Show the revision number of a library/preset in the browsers, e.g. v1.2. - Lua and preset banks: rename `minor_version` to `revision` to better reflect what it means - Fix legacy parameters panel 'Modernise all' sometimes not correctly retaining perfect sound compatibility when macros are involved - Packager CLI: change shape of JSON output - Tweak preset auto-description logic - On the PERFORM page, make the library name use the larger font - Fix buggy multiline text input like the description box on the Save Preset panel - Fix the lowest MIDI velocities mapping slightly too high; velocity 1 now reaches the bottom of the velocity-to-volume curve and the softest velocity layer - Add option to abbreviate parameter names in the DAW - Packager CLI: include preset\_banks in JSON output ## 2.0.0-beta.5 - Higher precision for holding shift while dragging waveform handles (loop, crossfade, offset) - Show 2 decimal places for layer loop points and sample offset - Show 1 decimal places for all percentage parameter printouts to aid precision - Fix recent regression where right-click menu for libraries didn't work - File pickers remember the last folder you used across sessions - Packager CLI: rename flags to singular form (`--library-folder`, `--preset-folder`, `--input-package`, `--output-dir`, `--info-json`), add short aliases (`-l`, `-p`, `-i`, `-o`, `-n`, `-j`, `-e`), rename `--omit-unreferenced` to `--prune`, support `--info-json -` to write JSON to stdout - Fix case where voices weren't retriggering when changing instrument/preset - Tweak PERFORM page layer layout - Fix FX Mix knob not being correct when loading an old preset that has a macro assigned to either Wet or Dry of Convolution, Chorus or Bitcrush FX. - Lua: replace `vignette_intensity` with a `background_overlay` sub-table for tuning the mid-panel vignette (colour, inner radius) and an independent panel tint when this library is the active background - Preset bank `floe-preset-bank.ini` supports an optional `library_for_visuals` field to pick which library's icon/background represents the bank ## 2.0.0-beta.4 - Fix package install failing on Linux in sandboxed environments such as steam-run - Show the underlying error in the notification when a package install fails - Instance Config (reset on transport, reset keyswitch, seed) is preserved when loading presets - Sample library creation: add 'fade\_out\_frames' to add\_region - Expanded arpeggiator Auto Rate from on/off to a menu with speed multipliers (0.25x–4x) and dotted/triplet variants. Note: existing DAW parameter automation written against the old on/off toggle may not behave as expected - Show the auto-picked rate as a read-only readout when Auto Rate is on, instead of greying out the Rate menu - Fix arpeggiator step gate being ignored when the step was followed by tied steps - Fix arpeggiator sliced instrument length and offset not loading from saved state - Show step numbers at the end of tie chains and always label the final step in the arpeggiator overview - Fix missing tooltip on LAYERS page instrument selection buttons - Add mute/solo buttons to the PERFORM page - Minor layout improvements to PERFORM page UI ## 2.0.0-beta.3 - Fix arpeggiator not resetting when loading a preset or changing instruments - Fix AU parameter automation lane order when loading a Floe 1.x session into Floe 2.x - Fix misc VST3/AU format details (clap-wrapper library bump) - Improve tag descriptions and category questions for clarity - Fix preset name not updating when undoing past initial state - Library development: use instrument ID on the library dev panel, not name - Library development: add `kit` tag ## 2.0.0-beta.2 Our biggest update to date. This follows on from 1.2.0-beta.1; we chose to skip 1.2.0 and jump straight to 2.0.0. ### Major new features - Added granular synthesis (including a random detune parameter) - Added EQ to effects rack - Added arpeggiator - GUI: split the single main page into separate Layers, Effects and Perform pages - Added perform page with access to common controls and visual display, with 'Vary' random-variation control replaces the old randomise buttons; click-position strip lets you choose how much to vary - Original/Modified toggle on Perform page to audition the original vs modified preset - 7 new LFO shapes: Random Steps, Random Glide, Pluck, Pluck Sharp, Pulse Narrow, Pulse Wide, Trapezoid - Effects rack improvements: - Bypass button for each effect - Mix knob for each effect - replacing separate Wet and Dry controls where appropriate. Loading presets that were saved with the separate wet/dry parameters are perfectly re-mapped to the new Mix and Output parameters where necessary. Loading an old DAW project with separate wet/dry actives the _legacy parameters_ system. - Bypass-all and remove-all buttons on the effects panel header - Right-click reset menus on effect headings and switchboard buttons - New EQ effect - Improve Stereo Widen effect with Bass Mono and Balanced modes - New Modern compressor algorithm alongside the original - Third EQ band per layer - New EQ band types: low-pass, high-pass and notch - Visual graphs added for the layer filter, effect filter, EQ, LFO, convolution reverb pre-filter/post-shelf, and delay filter. EQ and filter graphs have draggable nodes for editing. - Undo/redo system added - Per-layer stereo width knob - Copy/paste/reset added throughout the GUI on right-click menus: parameters, EQ bands, layer tabs, macros, envelope background, and curve maps - Reproducible playback added. New panel (3-dots menu -> Instance Config) offers features to reset variability in performances so that you can always render the exact same audio from Floe. - Added a new MIDI CC Assignments panel (3-dots menu) for viewing and controls your MIDI CC mappings to Floe parameters - New default background image - Library-provided background images can declare attribution via `floe.set_attribution_requirement`, shown as a subtle credit on the Perform page ### Improvements - Improve parameters: - Filter and EQ frequency controls now use logarithmic mapping - Compressor ratio now skews towards more control for ratios nearer 1:1 - Improved legacy parameter system - Legacy-override params now show a warning badge - Redesigned legacy parameter panel (3-dots menu -> Legacy Parameters) - 'Modernise' feature to convert params from legacy to modern - Effect filter: new 12dB and 24dB low-pass and high-pass types - Layer filter type menu reworked: clearer band-pass names, all-pass removed - New menu option to rescan all libraries and presets - Auto-generated preset descriptions for presets that have none - Quality of life improvements: - 'Unload' x-mark button on instrument selector and IR selector to clear the item - 'Unload all instruments' button on the layers page - Support encrypted packages (`.floe-pkg-enc`) that require a license key to install, with a paste button on the licence key dialog - Fix voices from jumping into the loop region if you toggle the 'reversed' mode of a playing voice. - GUI: improve browsers panels: - Cards are now expand and collapsible, selecting all items in a card is now done with a separate 'All' button. - Left panel (filters) is now dark to better differentiate it and make the cards and icons look nicer. - Sections are collapsed by default, but retains the collapse/expand state across Floe sessions. - Fix toggle not working for Favourites button - Use smaller radius corner rounding for tag buttons to match the rest of the UI - Remove 3-dots menu and instead put the filter selection modes (One, AND, OR) at the top of the filters panel. - Remove dividers between filter sections - Remove "Show Primary Filter Section Header" option. Libraries/folders are now always collapsible - more consistent and intuitive. - Expanded keyboard navigation: section headings, library/preset-bank cards, and filter buttons in the left panel are now reachable with the arrow keys and toggled with Enter - Library development: removed the ability to add custom tags for instruments/IRs. Only tags from the known set are now allowed. This change allowed for simpler and faster code and enforces standardisation. Non-standard tags are now ignored. [https://floe.audio/docs/develop/tags-and-folders](https://floe.audio/docs/develop/tags-and-folders) - Library development: new [`floe-library-inspector` CLI tool](https://floe.audio/docs/beta/develop/develop-libraries#library-inspector) for debugging libraries — dumps the parsed library as JSON or Lua, captures `print()` output, and reports orphan/missing samples - Info panel moved from the top of Floe into a menu item within the 3-dots menu. - The tabs within a layer have been adjusted: MAIN tab now contains the envelope and the filter, and the old 'Play' tab has been renamed CONFIG. - Added ability to reset parameters and groups (try right-clicking on things!) to their default settings OR the settings of the last loaded preset. - Lua: add `vignette_intensity` for controlling background image - Save and load preset functions now remember the folder that you chose and will use that when you next use the action. - LFO: show a warning icon next to the Target label when the selected destination is silent (Filter target with the filter off, or Grain Position target when not in a granular playback mode). - macOS: fix keyboard text input not working in some hosts such as Logic Pro, while still letting the host receive its own keyboard shortcuts ## 1.2.0-beta.1 Small but noticeable improvements - mostly GUI related. Behind the scenes, a huge amount of work has been put into restructuring our GUI system for upcoming features. This is the first step towards the bigger 1.2 update. Help us out by giving this beta a spin and test that it's working well. - GUI: improve crispness of all visuals - GUI: minor visual improvements throughout: even spacing, move layer menu labels to left, standardised colours, updated popup menus, legacy parameters and error panels to the new style - GUI: add instrument info strip with info about sample length, root key, number of samples - GUI: split loop controls into a new Playback tab, ready for new engine mode that need more space - GUI: notifications now appear on top of the window you have open and can be closed - Add 'Copy to Clipboard' for errors - Support installing packages with `.floe-pkg` as well as `.zip` - Help protect against rare edge-case crashes - Fix package installation errors due to a timeout - Fix rare memory bug - Fix possible memory leak related to background images - Fix possible rare crash when closing Floe - GUI: fix some strange behaviours when using the velocity curve map control - Dev-only: support a kind of hot-reload in the standalone version - File pickers: show both Mirage and Floe presets under the same file filter ## 1.1.2 Bug-fixes and robustness. Includes all changes from 1.1.2-beta.1 and 1.1.2.beta.2, plus: - Fix Windows text input - no more duplicate letters, proper focusing and passing keyboard shortcuts back to DAW - Fix some rare edge-case crashes - Fix some rare cases where macro destination changes weren't being applied ## 1.1.2-beta.2 - GUI: improve default size of Floe UI, it now considers the real DPI of the monitor if possible - GUI: only show full paths for preset banks if there's ambiguity - Fix error related to trying to install invalid ZIP files - Windows: fix error related to graphics change in 1.1.2-beta.1 - Linux: changed required glibc from 2.29 to 2.31 - Improve GUI performance slightly (batched draw-calls and smaller memory usage) - Update FLAC library and protect against edge cases - Linux: fix error related to filesystem watching - macOS: fix error related to opening a file dialog - Handle edge cases related to loading images for sample libraries ## 1.1.2-beta.1 - Improve graphics reliability on Windows (use DirectX instead of OpenGL) - GUI: fix the UI keyboard octave offset defaulting to 2 rather then 0 when first loading Floe - Fix possible memory leaks related to graphics (OpenGL texture destroying) and improve error checking - Improve automatic error reporting - Add 'drone' tag ## 1.1.1 - New monophonic mode: latch. The monophonic switch parameter is replaced by a menu with this new option. In latch mode, the note only ends when all notes are released; new key-presses are ignored and the original note continues playing unchanged. - GUI: show more decimal points with very slow LFO rates - GUI: better icon for 'missing library' on the preset browser - Add infrastructure for updating Mirage libraries to backwards-compatible Floe versions of the library. IDs are now used for libraries, instruments and IRs allowing for changing names without breaking backwards compatibility - Add 'fluctuating', 'ringing' and 'whining' tags - Package installation: support upgrading preset banks based on minor\_version field - Package installation: add 'keep both' option when user input is required - Fix EQ parameters sometimes not being correctly applied when changing presets. - Fix some parameters not loading correctly related to the velocity curves - Fix layer voices duplicating when just changing one instrument at a time - Fix error with displaying presets with many unknown libraries - Fix possible hang when installing packages - Fix incorrect loop end\_frame when set in Lua as 0 ## 1.1.0 - Fix pop sometimes possible at ping-pong loop boundary and make adjusting the loop points while playing have less audible artefacts. - Fix sometimes not correctly loading in Reaper or FL Studio, leaving UI looking correct but audio not reflective of the current state. - Fix preset being silent when convolution reverb effect had -inf dB dry level. - Fix possible crash related to file paths on Windows. - Fix possible crash related to error reporting. - Fix possible package installation failure - Fix Mirage presets sometimes being too quiet if they used certain convolution reverb IRs. - Major infrastructure improvements to how we build and release Floe. ## 1.1.0-beta.1 - **Browser UI overhaul** (instruments, presets, IRs) - Filtering mode is now 'one' mode by default, and alternate modes for 'AND' or 'OR' filtering are selected in the 3-dots menu - New 'cards' on left panel for libraries or preset-packs - Full keyboard arrow navigation, enter to select, CTRL+F/CMD+F to focus search box, page up/down, home/end, CTRL+up/down to jump sections - Search for libraries, preset-packs and tags - Favourites system - 'star' items as for easy access later - Scrollbars are less intrusive and only appear when needed - Header is more compact leaving more space for the content - Tooltips no longer get in the way of the browser items - Load images in a background thread so the GUI stays responsive - Uninstall libraries and presets by right-clicking them in the browsers. Or use the Info panel uninstall libraries. - New concept of 'preset banks' - a folder of presets can be tagged as a bank and given more metadata such as a description. To create one add `floe-preset-bank.ini` to a folder of presets. - Press escape on the keyboard to close panels - Increase threads for loading audio up to 75% of CPU cores instead of maximum of 4. - Fix silent output in Ableton Live 10 - Fix rare startup crash (#179) - Add 'Include beta version when checking for updates' preference ## 1.0.6 - Add Reset Audio Engine to the menu for stopping all sound and voices - macOS installer: use different method to try and avoid 'cannot install to system volume' error - Fix rare crash when shutting down Floe on macOS when file-browser is open - Fix rare crash when host sends an out-of-bounds parameter value - Fix 'library not found' error message repeating itself - Fix hover effect for tag button on the Save panel ## 1.0.5 - Fix issue where mute/solo buttons sometimes wouldn't correctly work - Website: improve download page layout - Add additional check for existing Mirage folders, and add ability to run this manually from the menu - Fix potential crash when host has a tempo near to 0 BPM ## 1.0.4 - Add Linux support - CLAP and VST3 ## 1.0.3 - Fix issue with Bitwig, where presets wouldn't sometimes load completely - Fix crackle possible crackle in audio when host uses an odd-sized audio buffer - Fix rare crash when MDATA file is corrupted ## 1.0.2 - Tweak the smoothing of very short attack times to allow for more sharpness - GUI: show more decimal places on parameters for less than 10 ms ## 1.0.1 - Fix crackle in audio when the hosts use audio buffers that are not a multiple of 32 frames. - Fix crackle in Bitwig Studio due to the host not correctly using the thread\_pool extension. ## 1.0.0 - Ready for widespread use. ## 0.12.2-beta - Fix sample offset start being too large and triggering an assertion failure ## 0.12.1-beta - Fix pops and clicks related to note-starting: a regression introduced in 0.12.0-beta ## 0.12.0-beta - Macros parameters: - Bottom GUI panel now has tabs: Play and Macros - Macros parameters allow for controlling multiple other parameters at once with a single knob and with a custom name - On the Macros tab, you can add and remove the parameters that are linked to each macro and control the strength of the link - Add pitch wheel support: configure the bend range using the 'Pitch Bend Range' parameter on each layer. - Add key range controls for splitting the keyboard into zones for each layer. These ranges are shown above the keyboard. They are controlled using new parameters on the Config tab of each layer. - Fix velocity curves being clear when randomising parameters - Add more information to the velocity curve tooltips - New documentation pages for velocity curves - Include instrument/preset descriptions in tooltips for open-browser buttons - Fix window size jumping if the width was exactly 1000 pixels - Fix jumps when first grabbing the resize corner - Improve smoothness of audio processing when using parameter automation; Floe's engine now processes parameter changes at a fixed interval of 32 frames. - Slightly improve top and bottom panel layout and colours - Fix noise caused by reverb history not being cleared when loading a preset - Library creation: support more than 100 velocity layers and add helper functions `midi_range_to_hundred_range` and `midi_range_to_thousand_range` ## 0.11.3-beta - Revert unintended change in intensity of Atan distortion in version 0.11-0 - unfortunately this will make presets/DAW projects (created using Floe 0.11.0-0.11.2) sound different if they used Atan distortion. - Fix regression where GUI might not update when sound is playing - Library creation: add audio\_properties for impulse response for setting gain\_db for IRs ## 0.11.2-beta - Fix rare crash when resizing the GUI to a very small size - Improve UI size control on the preferences panel so that incrementing/decrementing feels more significant - Fix memory leak ## 0.11.1-beta - Add sitemap.xml for the website - Improve the website homepage, installation, mirage, packages, roadmap pages. - Packager tool: - Add ability to merge multiple packages into one - Add ability to output a JSON file with comprehensive information about the package - Improve error reporting: show RAM, let Sentry decide on fingerprint, fix getting reports of crashes from outside of the plugin - Fix a whole bunch of rare crashes - Windows: fix uninstaller not uninstalling some small files ## 0.11.0-beta - Add new velocity -> volume curve for each layer. This replaces the old mapping buttons and the master 'Velo' button. There's now much more control. The old parameters are available in a new 'legacy' parameters section but are no longer used unless loading a DAW preset that uses them. - Add new algorithms to distortion: foldback, rectifier and ring-modulator - Fix LFO and delay time not updating with the tempo - Reduce pops and clicks with high-frequency LFOs, sharp changes in ADSR and some parameter changes - GUI: improve browsers behaviour: - Background darkens when panel is open - New close button on the top right - Remove unnecessary padding around the browser content - Single-click loads an item, double-click loads and closes the browser - Add right-click menu on libraries with option to open the library folder - Add right-click menu to presets and preset folders with option to open the folder, or delete the preset - Improve menus: - Add left/right buttons to all menus on the GUI - Allow most menus to be dragged like a slider to change the value - Add randomise button to convolution IR menu as well as left/right buttons - Make all left/right buttons on the UI the same style - Move the left/right buttons to the right of the menu so it's consistent and easy to click forward and back without having to move the mouse long distances - Make the UI window size buttons consistent with the left/right buttons - GUI: show loop points if an instrument has a single sample with built-in loop - GUI: add resize corner to the bottom right of the GUI window - Add missing tooltips for some preferences - Work-around CLAP Studio One not using the correct threads - GUI: right-click menu for the IR browser with 'unload IR' option - GUI: don't show markers on ADSR when it's inactive - GUI: Instrument browsers now have their own stat for filters (libraries, tags, etc.) allowing for more flexibility particularly with the randomise buttons - GUI: remove option to show/hide the keyboard. It's not often used, and coming soon are new features that only make sense with the keyboard shown. - Fix crash when changing tabs on the 'Legal' tab of the Info panel - Fix presets browser not showing nesting of folder on Windows - Fix rare crash when loading a library on Windows ## 0.10.3-beta - Sample library creation: add 'fade\_in\_frames' to add\_region - GUI: remove the status panel from the browsers, instead, items show a tooltip when hovered for a moment. This make the browsers less cluttered and fixes the issue where the text would be too long to fit in the status panel. - GUI: make sections in the browser collapsible - GUI: improve the layout of the browser filters ## 0.10.2-beta - Fix issue where layer volume would be automatically MIDI learned - Fix some persistent MIDI CCs not being applied ## 0.10.1-beta - Replace 'Reset all parameters' option with 'Reset State' which also clears things such as instruments. - Fix crash with floe-package when using relative paths - Fix possible error with installing/opening preset-browser - Fix a set of possible rare errors ## 0.10.0-beta - Browsers: - Add filters for folders (tree view) - Put tags into categories and add icons - Add 2 filter modes: match-all and match-any, allowing for more powerful filtering. Every filter button has a label showing the number of matching items that dynamically updates as you change the filters. - Fix instrument browser not showing waveform instruments when no Mirage libraries installed - Show library icons for each library used by a preset - Show (?) icon for missing libraries - Add `` filter for items that don't have any tags - Add "Library Developer Panel" on the GUI with tag-builder tool for generating instrument tags in Lua. - Add right-click menu to the instrument browser button with 'unload instrument' option. - Add lock/unlock mode for Save Preset panel for allowing changing presets with it still open - Sample library creation: add support for multiple Lua files by using `dofile()` - Sample library creation: add set\_required\_floe\_version function - Sample library creation: add generated Floe API definition file for Lua Language Server allowing for code completion and documentation as you type - available on the Library Developer Panel - GUI: slightly improved icons - GUI: use same toggle icon for all toggle buttons - GUI: make mute/solo buttons more obvious when they're on - Fix mute/solo buttons not greying out layers - Fix cases where mute/solo button would get stuck on - Fix preset selection buttons not working on the first click due to the scanning not having started. Now, scanning begins when the cursor is hovering over the button. ## 0.9.9-beta - Sample library creation: add start\_offset\_frames to add\_region - Sample library creation: add tune\_cents to add\_region - Normalise waveform GUI so that quiet samples are easier to see - Fix rare crash related to sample library folder scanning ## 0.9.8-beta - Fix rare error on Windows when closing the GUI when there's a file picker open - Fix rare errors in some VST3 hosts - Fix rare crash related to sample library folder scanning ## 0.9.7-beta - Fix rare crash related to closing the GUI on Floe AU - Fix rare crash related to library images - Fix rare crash related to voice stealing - Fix edge cases related to file paths on Windows ## 0.9.6-beta - Check for updates on startup; a small indicator on the Info button will appear - leading to more information on the Info panel. Can be disabled in the preferences. - Fix file picker on Windows not opened when there's missing folders - Fix rare crash in Floe AU in Ableton Live ## 0.9.5-beta - Fix potential crash in Floe AU format - Fix errors related to filesystem watching on Windows - Fix error related to sample library folders - could happen when installing a package ## 0.9.4-beta - Offer separate downloads for Intel and Apple Silicon Macs rather than a universal binary, this reduces the size of the download to ~50 MB. - Fix missing diagnostic information on macOS ## 0.9.3-beta - Fix more errors with threads - Fix memory leaks - Fix some edge cases with certain hosts - Improve automatic error reporting allowing us to fix bugs faster - Protect against hosts that try to use multiple main threads ## 0.9.2-beta - Slightly improve performance of Intel Mac builds - Fix crash with Intel Mac builds - Fix errors with threads ## 0.9.1-beta - AU: fix crash when trying to open the file/folder picker - Fix missing logo on macOS ## 0.9.0-beta - Library creation: fix specifying loop end points relative to the end of the file. - Library creation: replace always\_loop, never\_loop field with enum `loop_requirement`. - Library creation: add round\_robin\_sequencing\_group field to allow for different sets of variations. - Library creation: separate note-off round-robin sequencing group from note-on round-robin sequencing group. - Library creation: disable volume envelope for note-off regions - Library creation: improve memory usage when reading Lua scripts - Library creation: fix crash when an image file is empty - VST3: fix not responding to note-on/note-off messages when they weren't on channel 0 - GUI: on the Save Preset dialog, add the ability to store/load a preset author - GUI: make the Save Preset dialog larger and scroll to top when a new preset is loaded - Fix potential crash when reporting an error - Rename parameter right-click menu Set Value to Enter Value - Support CLAP reset() function ## 0.8.3-beta - Fix crash when error occurs in the Windows native file picker - Fix crash when given invalid arguments to CLAP activate - Fix crash when opening VST3 in FL Studio on Windows ## 0.8.2-beta - Fix crash when trying to randomise instruments, presets or IRs when there's only one of them - Fix presets folder still showing tags after a folder is removed. #120 - Fix crash when first opening the GUI ## 0.8.1-beta See the [main release notes](https://github.com/floe-audio/Floe/releases/tag/v0.8.0-beta). - Fix issue where Mirage and Floe libraries with the same name would conflict ## 0.8.0-beta First beta release of Floe. This release is feature-complete. We are looking for feedback on the new features and any bugs you find. - Add AU (Audio Unit v2) support - Brand new instrument browser supporting tags, search, and filtering by library - Brand new impulse response browser featuring all the options of the instrument browser - Brand new preset browser with tags, search, and filtering by library. Preset metadata is tracked, library information is tracked, file changes are detected, duplicate presets are hidden. - New built-in convolution reverb impulse library with 33 impulse responses - New save preset dialog with author, description, and tags - Fix instrument left/right and randomise buttons - Fix instance ID not retaining - Fix freeze when trying to resize GUI - Fix GUI opening but only ever showing black - Fix randomise parameters Note: we have jumped from 0.0.7 to 0.8.0. This is to signify the change from alpha to beta but also because it wasn't really right in the first place only incrementing by the patch number. To make the jump obvious we start the minor version at 0.8.0 rather than 0.1.0. ## 0.0.7-alpha The focus of this version has been bug fixes; in particular around loading Mirage libraries and presets. - Max voice is increased from 32 to 256 allowing for more complex instruments - Show the instrument type on the GUI: single sample, multisample or oscillator waveform - Rename 'Dynamics' knob to 'Timbre' and fix its behaviour - for instruments such as Arctic Strings, it can be used to crossfade between different sets of samples. - Fix missing code signing on Windows installer resulting in 'Unknown Publisher' warning - Fix layer filter type menu being the incorrect width - Fix crash when loop points were very close together - Improve loop modes on GUI: it's obvious when a loop is built-in or custom, what modes are available for a given instrument, why loop modes are invalid. - Add docs about looping - Fix sustain pedal incorrectly ending notes Mirage loading: - Fix incorrect loading of Mirage on/off switches - resulting in parameters being on when they should be off - Fix incorrect handling of Mirage's 'always loop' instruments - Fix incorrect conversion from Mirage's effects to Floe's effects - Improve sound matching when loading Mirage presets - Fix failure loading some FrozenPlain Squeaky Gate instruments Library creation: - Re-organise the fields for add\_region - grouping better into correct sections and allowing for easier expansion in the future. - Sample library region loops now are custom tables with `start_frame`, `end_frame`, `crossfade` and `mode` fields instead of an array. - Add `always_loop` and `never_loop` fields to sample library regions allowing for more control over custom loop usage on Floe's GUI. - Show an error if there's more than 2 velocity layers that are using 'feathering' mode. We don't support this yet. Same for timbre layers. ## 0.0.6-alpha - Add VST3 support - Standardise how tags and folders will be used in instruments, presets and impulse responses: [https://floe.audio/develop/tags-and-folders.html](https://floe.audio/develop/tags-and-folders.html) - Fix sustain pedal - Remove 'retrig CC 64' parameter from layer MIDI. This was mostly a legacy workaround from Mirage. Instead, we just use the typical behaviour that when you play the same note multiple times while holding the sustain pedal, the note plays again - stacking up. - Fix package installation crash after removing folders - Fix markers staying on ADSR envelope even when sound is silent - Fix MIDI transpose causing notes to never stop - Fix peak meters dropping to zero unexpectedly - Fix not finding Mirage libraries/presets folders ## 0.0.5-alpha - Fix text being pasted into text field when just pressing 'V' rather than 'Ctrl+V' - Windows: fix unable to use spacebar in text fields due to the host stealing the keypress - Fix crash when trying to load or save a preset from file - Improve the default background image ## 0.0.4-alpha Fix crash when opening the preset browser. ## 0.0.3-alpha Version 0.0.3-alpha is a big step towards a stable release. There's been 250 changed files with 17,898 code additions and 7,634 deletions since the last release. It's still alpha quality, and CLAP only. But if you're feeling adventurous, we'd love for you to try it out and give us feedback: - [Download Floe](https://floe.audio/installation/download-and-install-floe.html) - [Download some libraries](https://floe.audio/packages/available-packages.html) - [Install libraries](https://floe.audio/packages/install-packages.html) Error reporting has been a significant focus of this release. We want to be able to fix bugs quickly and make Floe as stable as possible. A part of this is a new a Share Feedback panel on the GUI - please use this! Floe's website has been filled out a lot too. New/edited documentation pages: - [Floe support for using CC BY libraries](https://floe.audio/usage/attribution.html) - [Autosave feature added](https://floe.audio/usage/autosave.html) - [New error reports, crash protection, feedback form](https://floe.audio/usage/error-reporting.html) - [New uninstaller for Windows](https://floe.audio/installation/uninstalling.html) ### Highlights - Add new Info panel featuring info about installed libraries. 'About', 'Metrics' and 'Licenses' have been moved here too instead of being separate panels. - Add new Share Feedback panel for submitting bug reports and feature requests - Add attribution-required panel which appears when needed with generated copyable text for fulfilling attribution requirements. Synchronised between all instances of Floe. Makes complying with licenses like CC BY easy. - Add new fields to the Lua API to support license info and attribution, such as CC BY - Add lots of new content to floe.audio - Add error reporting. We are now better able to fix bugs. When an error occurs, an anonymous report is sent to us. You can disable this in the preferences. This pairs with the new Share Feedback panel - that form can also be used to report bugs. - Add autosave feature, which efficiently saves the current state of Floe at a configurable interval. This is useful for recovering from crashes. Configurable in the preferences. - Add a Floe uninstaller for Windows, integrated into Windows' 'Add or Remove Programs' control panel - Preferences system is more robust and flexible. Preferences are saved in a small file. It syncs between all instances of Floe - even if the instances are in different processes. Additionally, you can edit the preferences file directly if you want to; the results will be instantly reflected in Floe. - Improve window resizing: fixed aspect ratio, correct remembering of previous size, correct keyboard show/hide, resizable to any size within a reasonable range. ### Other changes - Add support for packaging and installing MDATA libraries (Mirage) - Add tooltips to the preferences GUI - Add ability to select multiple packages to install at once - Rename 'settings' to 'preferences' everywhere - Rename 'Appearance' preferences to 'General' since it's small and can be used for other preferences - Make notifications dismiss themselves after a few seconds - Fix externally deleted or moved-to-trash libraries not being removed from Floe - Fix not installing to the chosen location - Fix Windows installer creating nonsense CLAP folder - Fix packager adding documents into the actual library rather than the package ## 0.0.2 - Fix Windows installer crash - Don't show a console window with the Windows installer - Better logo for Windows installer - Remove unnecessary 'Floe Folders' component from macOS installer ## 0.0.1 This is the first release of Floe. It's 'alpha quality' at the moment - there will be bugs and there are a couple of missing features. This release is designed mostly to test our release process. This release only contains the CLAP plugin. The VST3 and AU plugins will be released soon. ## Mirage Floe used to be called [Mirage](https://floe.audio/about-the-project/mirage.html). Mirage contained many of the same features seen in Floe v0.0.1. But there are large structural changes, and some new features and improvements: - Use multiple different libraries in the same instance. - CLAP version added - VST3 and AU coming soon, VST2 support dropped. - New installer: offline, no account/download-tickets needed. Libraries are installed separately. - Ability for anyone to develop sample libraries using new Lua-based sample library format. The new format features a new system to tag instruments and libraries. Hot-reload library development: changes to a library are instantly applied to Floe. - New [comprehensive documentation](https://floe.audio). - Floe now can have multiple library and preset folders. It will scan all of them for libraries and presets. This is a much more robust and flexible way to manage assets rather than trying to track individual files. - New, robust infrastructure: - Floe settings are saved in a more robust way avoiding issues with permissions/missing files. - Improved default locations for saving libraries and presets to avoid permissions issues. - New format for saving presets and DAW state - smaller and faster than before and allows for more expandability. - New settings GUI. - Floe packages: a robust way to install libraries and presets. Floe packages are zip files with a particular layout that contain libraries and presets. In the settings of Floe, you can install these packages. It handles all the details of installing/updating libraries and presets. It checks for existing installations and updates them if needed. It even checks if the files of any existing installation have been modified and will ask if you want to replace them. Everything just works as you'd expect. Technical changes: - Huge refactor of the codebase to be more maintainable and expandable. There's still more to be done yet though. - New build system using Zig; cross-compilation, dependency management, etc. - Comprehensive CI/CD pipeline for testing and creating release builds. - New 'sample library server', our system for providing libraries and audio files to Floe in a fast, async way. --- # Developing Libraries for Floe > Guide on how to create sample libraries for Floe using Lua scripting This page explains how to develop sample libraries for Floe. Creating sample libraries for Floe **requires programming knowledge**. While Floe itself is designed for all musicians, developing libraries involves writing Lua scripts to configure and map audio files. This programming-first approach enables automation, version control integration, AI-assisted workflows, bulk operations — scaling all the way to very complex libraries. It also allows creating custom functions for sample-mapping, normalisation, pitch-correction, and building instrument variations - a level of flexibility that cannot be achieved with UI-based sample-mapping tools. In the future, we're looking at tools that convert/generate Floe Lua scripts to allow non-programmers to create libraries. note We made these tools for our own use and are sharing them with the community. Consider contributing or [sponsorship](/docs/beta/about-the-project/sponsorship) if you'd like to see further investment in this area. ### What you'll need - Tools and experience writing and editing code - Understanding of sample mapping concepts (key ranges, velocity layers, etc.) - It's recommended to have experience programming other samplers like Kontakt, SFZ, Decent Sampler, etc. ## Floe's sample library format Floe's format is designed for configuring audio files into playable instruments. It does not add any audio-manipulation or custom GUIs. Floe has a ready-to-use GUI and lots of audio parameters. In the future we might add more advanced scripting/GUI creation features to the format. The format is designed to be extended whilst retaining backwards compatibility. Floe's sample library format currently supports the following features: - Velocity layers - Round-robin - Crossfade layers - Loop points with crossfade - Convolution reverb IRs - Velocity layer feathering - Trigger samples on note-off As someone in the community put it, our format is essentially _'[SFZ](https://sfzformat.com/) in Lua so you don't lose your mind'_ - which captures the gist pretty well. _The basics are covered, but there are plenty of features that other samplers might have that Floe doesn't. We expand our format to meet the needs of our products rather than add add things that we don't currently need._ ### Why a new format? No existing format met our requirements for Floe, which are: - Libraries should be plain folders of audio files. - Libraries should be portable across filesystems & operating systems. - Libraries should be configured using a proper programming language to enable creating complex libraries in a maintainable way. - The format should be extensible - allowing us to innovate in the field of sampling. - The solution should easily integrate into Floe's codebase. We're not trying to replace existing formats or create a new standard. Instead, our custom format is specifically designed to align with Floe's architecture and philosophy, enabling us to rapidly develop and deliver the high-quality sample libraries our users deserve. ### Developer friendly Floe's format is designed to be developer-friendly. It plays well into the tooling and experience of people who are used to dealing with code: - Works with version control: libraries are just folders of files, they're portable across filesystems and operating systems. - Hot reloading: Floe automatically reloads the library whenever you change a file: Lua, audio, or images. It creates a very fast feedback loop. If a change isn't picked up, use the top panel's 3-dots menu → Rescan Libraries & Presets to force a rescan. - Uses a full programming language: Lua is simple, powerful, and widely used. You can use variables, functions, loops, and conditionals to configure your library. - Floe's Lua API is simple and concise. - [`floe-library-inspector`](#library-inspector) CLI tool dumps the parsed library as JSON or Lua so you can verify exactly what Floe loaded — useful for debugging without launching the plugin. ## The structure Let's look at the structure of a Floe sample library: ``` 📂FrozenPlain - Slow/├── 📄slow.floe.lua├── 📄Licence.pdf├── 📄About Slow.html├── 📁Samples/│ ├── 📄synth_sustain_c4.flac│ └── 📄synth_sustain_d4.flac└── 📁Images/ ├── 📄background.png └── 📄icon.png ``` There's only one essential part of a Floe sample library: the `floe.lua` file. This file can have a custom name so long as it ends with `.floe.lua` - for example, `woodwind-textures.floe.lua`. The rest of the structure are conventions that are recommended but not required: - **Licence**: Sample libraries are recommended to have a file called Licence that describes the terms-of-use of the library. It can be any format: PDF, TXT, etc. - **About**: A file that describes the library. Any file format. Information about a library is useful for when someone might not have Floe's GUI available. Use this document to explain what the library contains, website links and any other information that might be useful. Floe's [packager tool](/docs/beta/develop/packaging#packager-command-line-tool) can automatically generate this file. - **Library folder name**: The folder containing the `floe.lua` file should be named: "Developer - Library Name". - **Subfolders**: Subfolders are up to the developer. We recommend 'Samples' for audio files and 'Images' for images. These can have any number of subfolders. Your `floe.lua` file can reference any file in these subfolders. ## The `floe.lua` file The `floe.lua` file is the most important part of a library. It's a script that maps and configures the audio files into playable instruments, written in the Lua 5.4 programming language. This file uses [Floe's Lua functions](/docs/beta/develop/library-lua-scripts) to create the library, create instruments, and add regions and impulse responses. It can reference any file in the library using relative paths. Here's a made-up example of a `floe.lua` file: ``` local library = floe.new_library({ name = "Iron Vibrations", tagline = "Organic sounds from resonating metal objects", library_url = "https://example.com/iron-vibrations", description = "A collection of resonating metal objects sampled using a handheld stereo recorder.", author = "Found-sound Labs", id = "Iron Vibrations - Found-sound Labs", author_url = "https://example.com", revision = 1, background_image_path = "Images/background.jpg", icon_image_path = "Images/icon.png", background_overlay = { vignette = { colour = 0x00000066, inner_radius = 0.2, }, panel_tint = { colour = 0x0000000D, }, }})local instrument = floe.new_instrument(library, { name = "Metal Fence Strike", id = "Metal Fence Strike", folder = "Fences/Steel", description = "Tonal pluck metallic pluck made from striking a steel fence.", tags = { "found sounds", "tonal percussion", "metal", "keys", "cold", "ambient", "IDM", "cinematic" }, waveform_audio_path = "Samples/file1.flac",})floe.add_region(instrument, { path = "Samples/One-shots/Resonating String.flac", root_key = 60, trigger_criteria = { trigger_event = "note-on", key_range = { 60, 64 }, velocity_range = { 0, 100 }, velocity_range_high_resolution = { 0, 1000 }, round_robin_index = 0, round_robin_sequencing_group = "group1", feather_overlapping_velocity_layers = false, auto_map_key_range_group = "group1", }, loop = { builtin_loop = { start_frame = 24, end_frame = 6600, crossfade = 100, mode = "standard", lock_loop_points = false, lock_mode = false, }, loop_requirement = "always-loop", }, timbre_layering = { layer_range = { 0, 50 }, }, audio_properties = { gain_db = -3, start_offset_frames = 0, tune_cents = 0, fade_in_frames = 0, fade_out_frames = 0, }, playback = { keytrack_requirement = "default", }, slices = {}, loop_beats = 4, native_bpm = 120,})floe.add_ir(library, { name = "Cathedral", id = "Cathedral", path = "irs/cathedral.flac", folder = "Cathedrals", tags = { "acoustic", "cathedral" }, description = "Sine sweep in St. Paul's Cathedral.", audio_properties = { gain_db = -3, },})floe.set_attribution_requirement("Samples/bell.flac", { title = "Bell Strike", license_name = "CC-BY-4.0", license_url = "https://creativecommons.org/licenses/by/4.0/", attributed_to = "John Doe", attribution_url = "https://example.com",})floe.add_named_key_range(instrument, { name = "Extended Notes", key_range = { 80, 128 },})floe.set_required_floe_version("2.0.2+f4ca1ba2")local extended_table = floe.extend_table({ foo = "" }, {})local hundred_range = floe.midi_range_to_hundred_range({ 0, 127 })local thousand_range = floe.midi_range_to_thousand_range({ 0, 127 })return library ``` `floe.new_library()` must be called and returned it at the end of the script. All other features are optional. When Floe runs your Lua file, it will show you any errors that occur along with a line number and a description. ## How to get started 1. Create a new folder in one of Floe's [sample library folders](/docs/beta/usage/folders). We recommend naming it 'Author Name - Library Name'. 2. Create a file in that folder called `my-library.floe.lua`. 3. Create a subfolder called `Samples` and put your audio files in there. 4. Open the Lua file in your text editor. If you're not already familiar with an editor, then Sublime Text or Visual Studio Code are reasonable choices. 5. Use the `floe.new_library()` function to create your library, filling in all the fields marked `[required]` in the [Floe's Lua reference](/docs/beta/develop/library-lua-scripts). 6. Use `floe.new_instrument()` to create an instrument, and then add regions to it using `floe.add_region()`, again, filling in the fields that are documented. 7. At the end of the file, return the library object you just created: `return library`. 8. Floe automatically detects whenever any library file changes and will tell you if there's any errors. If a library is correctly configured, it will instantly appear in Floe. For a fuller view of what was parsed — regions, loop points, missing samples — run [`floe-library-inspector`](#library-inspector). ### Approach to sample mapping You can start by manually writing individual `add_region` calls for each sample, filling out the required information as you go. When things start getting repetitive or you need to apply consistent logic across many samples, you'll want to leverage Lua's programming features: - **[Signet](https://github.com/SamWindell/Signet)** to analyse your samples and generate metadata files - **Variables and tables** to store information about your samples - **Loops** to process multiple samples with the same logic - **Functions** to calculate parameters like tuning, velocity ranges, and key ranges - **Pattern matching** to extract information from filenames This programming approach can make it much more practical to work with larger sample sets - you write the mapping logic once and let the code apply it to all your samples. ## Using Signet The command line tool [Signet](https://github.com/SamWindell/Signet) in an excellent aid for developing Floe samples libraries. Signet can export data about your samples in Lua format which you can then use in your `floe.lua` file using `dofile`. For example, this file is generated by Signet: ``` -- signet . print-info --format lua --path-as-key -- NOTE: Signet can also detect the pitch of your samples when -- you use the `--detect-pitch` flag with print-info.return { ["my-sample-a.flac"] = { bit_depth = 16, channels = 2, crest_factor = 16.5734, crest_factor_db = 24.3883, frames = 208341, length_seconds = 4.34044, metadata = nil, peak_db = -3.00036, peak_frame = 5927, rms_db = -27.3886, sample_rate = 48000 }, ["my-sample-b.flac"] = { bit_depth = 24, channels = 2, crest_factor = 8.90268, crest_factor_db = 18.9904, frames = 2299122, length_seconds = 47.8984, metadata = nil, peak_db = -3, peak_frame = 877676, rms_db = -21.9904, sample_rate = 48000 },} ``` Then in your Floe Lua file you have access to all the information about your samples allowing you to easily create instruments and regions. With the features of a full programming language and Floe's hot-reloading of scripts, it's easy to create complex configurations and bulk-tweak tuning, normalisation, loop points, and other parameters of an instrument. For example, normalising all samples to a target level can be done using a simple calculation based on the sample's `peak_db` value. We often find it's useful to partially move levels towards a target level rather than fully normalising them in order to retain some of the character of the instrument. This can be computed in the Lua and tweaked as needed, with the results being immediately audible in Floe. Floe doesn't generate this kind of audio data for you because it can be slow to scan large folders of samples. It's better for the sample library developer to generate it once with Signet and bake it into a Lua file, instead of the sample library users having to wait every time they load the library. ## Library inspector `floe-library-inspector` is a small CLI tool for debugging libraries. It parses your library and dumps everything Floe loaded as JSON (or Lua with `--format=lua`) — surfacing parse errors, captured `print()` output, and any orphan or missing audio files. _Downloads will appear here with the next beta release._ ``` Inspect a Floe sample library and dump structured information to stdout.Output includes library metadata, captured Lua print() output, parse errors,instruments, regions, IRs, and orphan/missing sample files. Defaults to JSON;use --format=lua for a loadable Lua chunk.Useful when developing or debugging sample libraries: it surfaces parse errorsalongside everything Floe actually loaded, so you can sanity-check the resultof your Lua script. The JSON output is also well-suited as input to AI agents.Examples (piping JSON output into jq): # Check whether the library parsed and show any error: floe-library-inspector ./my-lib/my-lib.floe.lua | jq '.parse' # Top-level library metadata (name, author, version, counts): floe-library-inspector ./my-lib/my-lib.floe.lua | jq '.library' # List orphan and missing sample files: floe-library-inspector ./my-lib/my-lib.floe.lua | jq '.samples' # List every instrument id and how many regions it has: floe-library-inspector ./my-lib/my-lib.floe.lua \ | jq '.instruments[] | {id, num_regions}' # List every sample path referenced by an instrument: floe-library-inspector ./my-lib/my-lib.floe.lua \ | jq -r '.instruments[].regions[].sample_path' # Show the key/velocity range of every region of an instrument: floe-library-inspector ./my-lib/my-lib.floe.lua \ | jq '.instruments[] | select(.id=="My Inst") | .regions[].trigger' # List IR ids and their file paths: floe-library-inspector ./my-lib/my-lib.floe.lua | jq '.irs[] | {id, path}'Usage: floe-library-inspector [OPTIONS]Optional arguments: --format Output format: 'json' (default) or 'lua'. Lua output is a single `return { ... }`chunk loadable with Lua's load()/dofile(). ``` ## Creating high-quality samples ### Levels It's important to ensure your audio samples have the the right levels. This makes browsing and switching samples in Floe a consistent, nice experience. Additionally, Floe offers the ability to layer sounds together; this process is more ergonomic when instruments have similar volume levels. [Signet](https://github.com/SamWindell/Signet) can be a useful tool for changing the levels of your samples. When changing the volume levels of a realistic multi-sampled instrument, you probably don't want to normalise each sample individually because part of the character of the instrument is its volume variation. Instead, you should change the gain of the instrument _as a whole_. Signet has features for this. It also has features for proportionally moving levels towards a target level. This allows you to keep some of the character of an instrument while nudging it towards a more consistent level. Here are some guidelines for levels: - Each sample's peak level should be less than -3 dB. - Playing the instrument should barely cause Floe's peak meter to reach its yellow region. Another way to levels could be this: RMS levels for an instrument _as a whole_ should be around -18 dB. Play the instrument polyphonically and watch the RMS level. If the instrument is designed to be monophonic, then adjust for that. - The noise floor should be as low as possible: -60 dB is a good target. Use high-quality noise reduction tools to remove noise from your samples if you need to. Noise levels can quickly stack up with a multi-sampled instrument played polyphonically. Being too aggressive with algorithmic noise reduction can make your samples sound unnatural - so it's a balance. - Impulse responses should be normalised by their energy (power) levels: `signet my-impulses norm -100 --mode energy --independently && signet my-impulses norm 0`. Or if not using Signet, then adjust their levels so that they feel similar to the volume levels of Floe's built-in IRs. ### Sample rate, bit depth, and file format Floe only supports FLAC and WAV files. We recommend using FLAC for your samples. It's lossless and can reduce the file size by 50% to 70% compared to WAV. Floe loads FLAC files very quickly. We find 44.1 kHz and 16-bit is often a perfectly reasonable choice. 48 kHz and 24-bit might also be appropriate in certain cases. FLAC also supports bit-depths between 16 and 24 bits (such as 20-bit). Floe supports these too. ### Volume envelopes of samples Floe blurs the line between a sampler and a sample-based synthesizer. It has lots of parameters for manipulating the sound in real-time. If your sample is a single continuous sound, then don't include a fade-in or fade-out in the sample. Floe has a GUI for volume envelopes that offer more control: they can be adjusted to any value, automated by the DAW, and they are independent of the playback speed of the sample. If you have a sample that is stretched across a keyboard range, it will be sped-up or slowed-down in order to be the correct pitch. If there's a volume fade, then the speed of the fade will change depending on the pitch of the voice. This is not normally a desirable effect. If your sound has important timbral variation over time, then don't cut that away. Only if the sound is a constant tone should you remove the fade in/out. ## Background images Floe allows libraries to have a custom background image that appear behind the interface when the library is loaded. These images are configured in your [Lua script](/docs/beta/develop/library-lua-scripts) through Floe's `new_library` function. Floe accepts any image. It uses "cover" scaling with top-left positioning — in other words, it scales up the image (maintaining its aspect ratio) until it covers the entire background of Floe. However, for optimal results consider these characteristics: - Roughly 16:9 aspect ratio to match the plugin GUI proportions - Approximately 1500 pixels wide as a starting point (consider high-DPI displays) - Consistent colour palettes and brightness levels throughout the image - Darker or mid-tone images rather than bright ones for better text readability - Avoid dramatic contrasts between very dark and very bright regions The most critical consideration is interface readability. Since Floe's knobs, buttons, and text render on top of your background image, the image needs consistent tones to ensure controls remain clearly visible. While some variation is acceptable, remember that interface legibility is paramount. Additionally, Floe has options to add a coloured vignette on the background image and an overlay tint to its blurred panels via options in the Lua code. Experiment with these options, starting with very transparent colours. --- # Develop Preset Banks > Best practices for developing preset banks for Floe Floe's preset management is open; it's just based on the files and folders on your computer. Presets are saved as individual files using the save button at the top of Floe's UI. These files can be freely renamed and put into subfolders; this is how categories and hierarchies are created in the preset browser. ## Preset Banks A _preset bank_ is small, optional, extension to this concept. By creating a `floe-preset-bank.ini` inside a folder of presets, it becomes a preset bank, where the entire tree of presets in the folder and all its subfolders become more easily identifiable and can feature metadata such as a subtitle and ID. Creating a bank is normally a good idea for custom presets: the preset browser can isolate the bank, present it with the best name, and surface it at the top level. In the preset browser, the icon for the bank is taken from the sample library used by the bank's presets. If the bank contains presets that depend on multiple different libraries, a 'mixed' icon is shown instead to denote that the bank spans more than one library. Alternatively, you can instruct Floe using the _preset bank file_ to use the visuals from a given library ID. The _preset bank file_ is a simple INI text file with the following fields - all are optional: ``` ; A short and descriptive name for the preset bank.subtitle = My Preset Bank Name; Any kind of unique identifier. Typically you might use a reverse; domain style string. Used so Floe can identify the bank uniquely.id = com.myname.mypresetbank; A revision number - just a single integer. When installing a; package, Floe can use this alongside the ID to determine if a bank; can be updated rather than installed to a new location. Revisions; are only designed for simple additions/fixes. If you make major; changes, it's probably better to create a new preset bank,; "My Bank 2", with a new ID. On the preset browser, this number will; be displayed with a 'v1.' prefix to make it clear to users that the; change is incremental and backwards-compatible.; The key `minor_version` is also accepted for this.revision = 1; The id_string of an installed sample library whose icon should; represent this bank in the preset browser. If omitted, or if the; library isn't installed, Floe falls back to deriving the icon from; the libraries used by the bank's presets.library_for_visuals = FrozenPlain - Slow ``` You can create this INI file with any text editor such as Notepad or TextEdit. You just need to type in the various `field = value` with new lines between them. A side note for the particularly discerning user: Floe automatically identifies some well-known factory preset folders as preset banks even without the metadata file present. This is because some banks were created before the preset bank feature was added. We chose to enrich them with metadata retroactively. ## Packaging Once you've created your folder of presets and added a `floe-preset-bank.ini` file (optional but recommended), you can package it up for distribution. Read about packaging on the [packaging](/docs/beta/develop/packaging) page. Use the packager command-line tool, or alternatively package it manually. To manually package your bank first rename your bank folder to something like `My Preset Bank`. Next, put that into a folder called `Presets`. Next, put `Presets` into another folder `My Preset Bank - Floe Package`, then right-click and ZIP that folder. You should now have a ZIP called `My Preset Bank - Floe Package.zip` with a subfolder `Presets` and your bank folder inside that. Rename the `.zip` to `.floe-pkg`. The resulting file will contain the structure that _Floe packages_ require (Presets subfolder at the top level). Test your package by trying to install it using Floe's _Install package_ button. Refer to the packaging page for more details if needed. ## Best Practices - Make presets all feel the same volume: the master peak meter on Floe's GUI should just be the yellow zone when the preset is played at its fullest. - Give each preset a unique, descriptive name suggesting its tone or usage. Don't use all capital letters. Don't include a 'type' prefix such as "PAD - " or "LD - ". - Add as many tags as is relevant to the preset. Read more about tags on the [tags and folders](/docs/beta/develop/tags-and-folders) page. - Keep the description short and ending with a period. - Organise presets into folders using your file browser. You can rename presets and folders as you like. See the best practises for folders on the tags and folders page. --- # Library Lua Scripts > Documentation for the Lua API used to create Floe sample libraries The `floe.lua` file is the most important part of a Floe sample library. This page serves as documentation for all the functions that you can use in your script to create and configure the library and its instruments. Floe runs your script using Lua v5.4, providing you with access to these [standard libraries](https://www.lua.org/manual/5.4/manual.html#6): `math`, `string`, `table` and `utf8`. The other standard libraries are not available - including the `require` function. This is to minimise security risks. If there are any errors in your script, Floe will show them on the GUI along with a line number and a description of the problem. We are working on a standalone version of Floe that will allow you to more easily debug your Lua by outputting debug information to the console. ## Multiple files `dofile()` is available, so you can split your script into multiple files if you want to. Floe's `dofile` implementation is the same as the standard Lua version except that you can only specify files relative to the library folder — that is, the folder that contains the `floe.lua` file. For example, you could have a folder next to `floe.lua` called `Lua` and put a file in there called `data.lua`. You could then load that file with `dofile("Lua/data.lua")`. To pass data between files, you would typically use the ["module" pattern](http://lua-users.org/wiki/ModuleDefinition) (except using `dofile` instead of `require`). ## Library Functions Use these functions to create your sample library. Take note of the `[required]` annotations - omitting fields marked with these will cause an error. ### `floe.new_library` Creates a new library. It takes one parameter: a table of configuration. It returns a new library object. You should only create one library in your script. Return the library at the end of your script. The library is the top-level object. It contains all the instruments, regions, and impulse responses. ``` -- Creates a new library. You should only create one library in your script. -- Return the library at the end of your script.local library = floe.new_library({ -- The name of the library. Keep it short and use tagline for more details. -- [required] name = "Iron Vibrations", -- A few words to describe the library. [required] tagline = "Organic sounds from resonating metal objects", -- The URL for this Floe library. -- [optional, default: no url] library_url = "https://example.com/iron-vibrations", -- A description of the library. You can be verbose and use newlines (\n). -- [optional, default: no description] description = "A collection of resonating metal objects sampled using a handheld stereo recorder.", -- Who created this library. Keep it short, use the description for more -- details. [required] author = "Found-sound Labs", -- A unique identifier for this library. Specifying this field overrides the -- default ID of "library-name - author". It can be any text, its only meaning -- is to uniquely identify this library from others. However, in rare cases it -- may be shown on the UI so it should be human-readable and representative of -- the library. This field is useful if you want to change the name of the -- library: set this to the previous ID (otherwise the ID will change to -- "new-library-name - author") and bump the revision field. -- [optional, default: "library-name" - "author"] id = "Iron Vibrations - Found-sound Labs", -- URL relating to the author or their work. -- [optional, default: ] author_url = "https://example.com", -- The revision number of this library. Bump this whenever you publish a -- backwards-compatible update (additional content, fixes, tweaks); breaking -- changes are not allowed - you'd need to create a new library such as: -- "Strings v2". The legacy name `minor_version` is also accepted. -- [optional, default: 1] revision = 1, -- Path relative to this script for the background image. It should be a jpg -- or png. Look at Floe's 'Develop Libraries' docs for recommended specs. -- [optional, default: ] background_image_path = "Images/background.jpg", -- Path relative to this script for the icon image. It should be a square jpg -- or png. -- [optional, default: ] icon_image_path = "Images/icon.png", -- Controls the vignette and panel-tint drawn over the background image when -- this library is the active background. -- [optional, default: defaults] background_overlay = { -- Configures the radial vignette drawn over the background image when -- this library is the active background. -- [optional, default: defaults] vignette = { -- Edge colour of the vignette as a 0xRRGGBBAA integer. The alpha -- component controls the strength of the effect; set it to 0 to -- disable. -- [optional, default: 0x00000000] colour = 0x00000066, -- Radius of the unaffected centre area, as a proportion of the -- panel's smaller dimension. 0 means the vignette starts at the -- centre; values near 1 confine it to the very edges. On a range from -- 0 to 1. -- [optional, default: 0.2] inner_radius = 0.2, }, -- Configures a flat colour tint drawn over the blurred mid-panel surface. -- Independent of the vignette. -- [optional, default: no tint] panel_tint = { -- A flat tint drawn over the blurred mid-panel surfaces, as a -- 0xRRGGBBAA integer. Set alpha to 0 to disable. -- [optional, default: 0x00000000] colour = 0x0000000D, }, }}) ``` ### `floe.new_instrument` Creates a new instrument on the library. It takes 2 parameters: the library object and a table of configuration. It returns a new instrument object. You can call this function multiple times to create multiple instruments. An instrument is like a musical instrument. It is a sound-producing entity that consists of one or more samples (samples are specified in regions). Each library can have multiple instruments. You can use Floe's [Tag Builder GUI](/docs/beta/develop/tags-and-folders#instrument-tags) to generate tag tables. ``` -- Creates a new instrument on the library. You can call this multiple times to -- create multiple instruments.local instrument = floe.new_instrument(library, { -- The name of the instrument. [required] name = "Metal Fence Strike", -- A unique identifier for the instrument. If not specified, it will be the -- name of the instrument. Either way, IDs must be unqiue within a library. It -- can be any text but it's recommended to use a human-readable identifier -- (similar to the name). IDs are how presets and settings refer to -- instruments. -- [optional, default: same as name] id = "Metal Fence Strike", -- Specify a folder to group instruments under a common heading. It may -- contain slashes to represent a hierarchy. See -- https://floe.audio/develop/tags-and-folders.html for more information. -- [optional, default: no folders] folder = "Fences/Steel", -- A description of the instrument. Start with a capital letter an end with a -- period. -- [optional, default: no description] description = "Tonal pluck metallic pluck made from striking a steel fence.", -- An array of strings to denote properties of the instrument. See -- https://floe.audio/develop/tags-and-folders.html for more information. -- [optional, default: no tags] tags = { "found sounds", "tonal percussion", "metal", "keys", "cold", "ambient", "IDM", "cinematic" }, -- Path to an audio file relative to this script that should be used as the -- waveform on Floe's GUI. -- [optional, default: first region path] waveform_audio_path = "Samples/file1.flac",}) ``` ### `floe.add_region` Adds a region to an instrument. It takes 2 parameters: the instrument object and a table of configuration. Doesn't return anything. You can call this function multiple times to create multiple regions. A region is a part of an instrument. It defines an audio file and the conditions under which it will be played. For example, you might have a region that plays the audio file `Piano_C3.flac` when the note C3 is played. Each instrument must have one or more regions. ``` -- Adds a region to an instrument. You can call this multiple times to create -- multiple regions. Each instrument must have one or more regions.floe.add_region(instrument, { -- A path to an audio file, relative to this current lua file. [required] path = "Samples/One-shots/Resonating String.flac", -- The pitch of the audio file as a number from 0 to 127 (a MIDI note number). -- On a range from 0 to 127. [required] root_key = 60, -- How this region should be triggered. -- [optional, default: defaults] trigger_criteria = { -- What event triggers this region. Must be one of: "note-on" or -- "note-off". -- [optional, default: note-on] trigger_event = "note-on", -- The pitch range of the keyboard that this region is mapped to. These -- should be MIDI note numbers, from 0 to 128. The start number is -- inclusive, the end is exclusive. -- [optional, default: { 60, 64 }] key_range = { 60, 64 }, -- The velocity range of the keyboard that this region is mapped to. This -- should be an array of 2 numbers ranging from 0 to 100. The start number -- is inclusive, the end is exclusive. Use the -- velocity_range_high_resolution instead if you need more than 100 -- velocity layers. -- [optional, default: { 0, 100 }] velocity_range = { 0, 100 }, -- Alternative to velocity_range that allows for 1000 velocity layers -- instead of 100. -- [optional, default: { 0, 1000 }] velocity_range_high_resolution = { 0, 1000 }, -- Trigger this region only on this round-robin index. For example, if -- this index is 0 and there are 2 other groups with round-robin indices -- of 1 and 2 with the same round_robin_sequencing_group and -- trigger_event, then this region will trigger on every third press of a -- key only. round_robin_index should begin at 0 and be consecutive. The -- total number of round-robins is calculated automatically. -- [optional, default: no round-robin] round_robin_index = 0, -- Group together regions that have this same string, so that their -- round_robin_index is part of a separate sequence to other -- round_robin_sequencing_groups. Use this when you have multiple sets of -- regions that have a different number of round-robins with the same -- trigger_event. -- [optional, default: instrument-wide group] round_robin_sequencing_group = "group1", -- If another region in this instrument is triggered at the same time as -- this one and is overlapping this, and also has this option enabled, -- then both regions will play crossfaded in a proportional amount for the -- overlapping area, creating a smooth transition between velocity layers. -- Only works if there's exactly 2 overlapping layers. -- [optional, default: false] feather_overlapping_velocity_layers = false, -- For every region that has this same string, automatically set the start -- and end values for each region's key range based on its root key. -- [optional, default: no auto-map] auto_map_key_range_group = "group1", }, -- Loop configuration. -- [optional, default: defaults] loop = { -- Define a built-in loop. -- [optional, default: no built-in loop] builtin_loop = { -- The start of the loop in frames. Inclusive. It can be negative -- meaning index the file from the end rather than the start. -- [required] start_frame = 24, -- The end of the loop in frames. Exclusive. It can be negative -- meaning index the file from the end rather than the start. 0 means -- the end of the file. [required] end_frame = 6600, -- The number of frames to crossfade. [required] crossfade = 100, -- The mode of the loop. Must be one of: "standard" or "ping-pong". -- [optional, default: standard] mode = "standard", -- If true, the start, end and crossfade values cannot be overriden by -- a custom loop from Floe's GUI. -- [optional, default: ] lock_loop_points = false, -- If true, the loop mode value cannot be overriden by a custom mode -- from Floe's GUI. -- [optional, default: ] lock_mode = false, }, -- The requirement for this region to loop. Must be one of: -- "default" => Default looping behaviour. -- "always-loop" => This region will always loop - either using the built -- in loop, a user defined loop, or a default built-in loop. -- "never-loop" => This region will never loop even if there is a -- user-defined loop. Set all regions of an instrument to this to entirely -- disable looping for the instrument. -- [optional, default: default] loop_requirement = "always-loop", }, -- Timbre layering configuration. -- [optional, default: no timbre layering] timbre_layering = { -- The start and end point, from 0 to 100, of the Timbre knob on Floe's -- GUI that this region should be heard. You should overlap this range -- with other timbre layer ranges. Floe will create an even crossfade of -- all overlapping sounds. The start number is inclusive, end is -- exclusive. This region's velocity_range should be the full range. -- [optional, default: no timbre layering] layer_range = { 0, 50 }, }, -- Audio properties. -- [optional, default: defaults] audio_properties = { -- Apply a gain to the audio data in decibels. -- [optional, default: 0] gain_db = -3, -- The number of frames to skip at the start of the audio data. -- [optional, default: 0] start_offset_frames = 0, -- Tune the audio data in cents. -- [optional, default: 0] tune_cents = 0, -- The number of frames to fade in the audio data, applied at the start -- after any start_offset_frames. If the region has slices, the fade is -- applied at the start of each slice instead. -- [optional, default: 0] fade_in_frames = 0, -- The number of frames to fade out the audio data, applied at the end of -- the sample. If the region has slices, the fade is applied at the end of -- each slice instead. -- [optional, default: 0] fade_out_frames = 0, }, -- Playback configuration. -- [optional, default: defaults] playback = { -- The requirement for keytracking. Must be one of: "default", "always" or -- "never". -- [optional, default: default] keytrack_requirement = "default", }, -- An array of slices that divide this region's audio into segments for -- tempo-synced playback. Each slice defines a start frame and a relative -- length. The system sums all length_proportion values to determine the total -- number of steps; each slice's proportion of the total determines its -- playback duration in the sequence. -- [optional, default: no slices] slices = {}, -- The musical length of the loop in beats (e.g. 4 for a 1-bar loop in 4/4, 8 -- for 2 bars). Required when slices are set. Used by the arpeggiator's -- auto-rate to pick a tempo division that matches the loop's native timing. -- On a range from 1 to 255. -- [optional, default: ] loop_beats = 4, -- The BPM the loop was recorded at. Required when slices are set. Used by the -- arpeggiator's auto-rate together with loop_beats to compute each step's -- native duration. On a range from 1 to 999. -- [optional, default: ] native_bpm = 120,}) ``` ### `floe.add_named_key_range` Gives a name to a key range of this instrument. It takes 2 parameters: the instrument object and a table of configuration. Doesn't return anything. For example, with a multi-sampled keyboard instrument, you might mark the ranges beyond the natural range of the real instrument as "Extended" ranges. Alternatively, if the instrument contains multiple sounds, you can name each sound: "Kick", "Snare", etc. You can call this multiple times to create multiple named key ranges. ``` -- Gives a name to a key range of this instrument. For example, with a -- multi-sampled keyboard instrument, you might mark the ranges beyond the natural -- range of the real instrument as "Extended" ranges. You can call this multiple -- times to create multiple named key ranges. Alternatively, if the instrument -- contains multiple sounds, you can name each sound: "Kick", "Snare", etc. Don't -- overlap ranges.floe.add_named_key_range(instrument, { -- The name of the key range. [required] name = "Extended Notes", -- The range of the keyboard to give a name to. These should be MIDI note -- numbers, from 0 to 128. The start number is inclusive, the end is -- exclusive. [required] key_range = { 80, 128 },}) ``` ### `floe.add_ir` Adds a reverb impulse response to the library. It takes 2 parameters: the library object and a table of configuration. Doesn't return anything. You can call this function multiple times to create multiple impulse responses. ``` -- Adds a reverb impulse response to the library. You can call this multiple times -- to create multiple impulse responses.floe.add_ir(library, { -- The name of the IR. [required] name = "Cathedral", -- A unique identifier for the IR. If not specified, it will be the name of -- the IR. Either way, IR IDs must be unqiue within a library. It can be any -- text but it's recommended to use a human-readable identifier (similar to -- the name). IDs are how presets and settings refer to IRs. -- [optional, default: same as name] id = "Cathedral", -- File path to the impulse response file, relative to this script. [required] path = "irs/cathedral.flac", -- Specify a folder to group IRs under a common heading. It may contain -- slashes to represent a hierarchy. See -- https://floe.audio/develop/tags-and-folders.html for more information. -- [optional, default: no folders] folder = "Cathedrals", -- An array of strings to denote properties of the IR. See -- https://floe.audio/develop/tags-and-folders.html for more information. -- [optional, default: no tags] tags = { "acoustic", "cathedral" }, -- A description of the IR. Start with a capital letter an end with a period. -- [optional, default: no description] description = "Sine sweep in St. Paul's Cathedral.", -- Audio properties. -- [optional, default: defaults] audio_properties = { -- Apply a gain to the audio data in decibels. -- [optional, default: 0] gain_db = -3, },}) ``` ### `floe.set_attribution_requirement` Sets the attribution information for a particular file or folder. It takes 2 parameters: a path to the file or folder whose license information you want to set, and a table of configuration. If the path is a folder, the attribution requirement will be applied to all audio files in that folder and its subfolders. You can also point it at the library's `background_image_path` to credit the cover image — when set, a subtle credit line appears on the Perform page. ``` -- Sets the attribution information for a particular file or folder. If the path -- is a folder, the attribution requirement will be applied to all audio files in -- that folder and its subfolders. You can also point it at the library's -- background_image_path to credit the cover image — when set, a subtle credit -- line appears on the Perform page.floe.set_attribution_requirement("Samples/bell.flac", { -- The title of the work. [required] title = "Bell Strike", -- Name of the license. [required] license_name = "CC-BY-4.0", -- URL to the license. [required] license_url = "https://creativecommons.org/licenses/by/4.0/", -- The name/identification of the persons or entities to attribute the work -- to. [required] attributed_to = "John Doe", -- URL to the original work if possible. -- [optional, default: ] attribution_url = "https://example.com",}) ``` ### `floe.set_required_floe_version` Sets the minimum required version of Floe for this library. It takes one parameter: a string representing the version number (a [semantic version](https://semver.org/)). It's best to set this at the top of your `floe.lua` file so that Floe can check the version before running the script. Calling this function is recommended so that older versions of Floe behave predictably when trying to load an unsupported library. ``` -- Sets the required Floe version for this library. If the current Floe version is -- lower than the required version, an error will be raised.floe.set_required_floe_version("2.0.2+f4ca1ba2") ``` ## Support Function Floe provides some additional functions to make developing libraries easier. ### `floe.extend_table` Extends a table with another table, including all sub-tables. It takes 2 parameters: the base table and the table to extend it with. The base table is not modified. The extension table is modified and returned. It has all the keys of the base table plus all the keys of the extended table. If a key exists in both tables, the value from the extension table is used. Floe doesn't have the concept of 'groups' like other formats like SFZ or Kontakt have. Instead, this function offers a way to apply a similar configuration to multiple regions. Alternatively, you can use functions and loops in Lua to add regions in a more dynamic way. ``` local group1 = { trigger_criteria = { trigger_event = "note-on", velocity_range = { 0, 100 }, auto_map_key_range_group = "group1", feather_overlapping_velocity_regions = false, },}floe.add_region(instrument, floe.extend_table(group1, { path = "One-shots/Resonating String 2.flac", root_key = 65,}))floe.add_region(instrument, floe.extend_table(group1, { path = "One-shots/Resonating String 3.flac", root_key = 68,})) ``` ### `floe.midi_range_to_hundred_range` and `floe.midi_range_to_thousand_range` Floe prefers to use a range from 0 to 100 or 0 to 1000 (where the end value is exclusive, A.K.A. one-past the last) for velocity rather than MIDI 1.0's typical range of 0 to 127 (where the end value is inclusive). These functions convert from the MIDI range to the Floe range. Useful when converting existing libraries to Floe. ``` -- Converts a MIDI note range (where the end value is inclusive) to Floe's 0-100 -- range (where the end value is exclusive, A.K.A, one-past the last). Takes a -- table with two integers for start and end. Returns the same format but -- remapped.local hundred_range = floe.midi_range_to_hundred_range({ 0, 127 })-- Converts a MIDI note range (where the end value is inclusive) to Floe's 0-1000 -- range (where the end value is exclusive, A.K.A, one-past the last). Takes a -- table with two integers for start and end. Returns the same format but -- remapped.local thousand_range = floe.midi_range_to_thousand_range({ 0, 127 }) ``` ## Lua Language Server If you are using the [Lua Language Server](https://luals.github.io/), you can get autocompletion and diagnostics for Floe's Lua API by using the following configuration. 1. Open Floe, and click on the 3-dot menu at the top of the window. Click "Library Developer Tools" and open the "Utilities" tab. 2. Click on the "Install Lua definitions" button. This will generate the necessary file on your system. 3. For the Lua LSP to find the definitions, you need to create a `.luarc.json` file in the same folder as your `floe.lua` file. 4. Paste the following code into the `.luarc.json` file: ``` { "runtime": { "version": "Lua 5.4" }, "workspace": { "library": [ "<< paste definitions file path >>" ] }} ``` 5. Replace the string with the path that is copied to your clipboard when you click the "Copy Lua definitions path" button in the Library Developer Tools. 6. Done. ## Lua LSP Definitions This file is also generated by the "Install Lua definitions" button in the Library Developer Tools. ``` ---@meta FloeAPI---@class FloeInstrumentConfig---@field name string The name of the instrument.---@field id? string A unique identifier for the instrument. If not specified, it will be the name of the instrument. Either way, IDs must be unqiue within a library. It can be any text but it's recommended to use a human-readable identifier (similar to the name). IDs are how presets and settings refer to instruments.---@field folder? string Specify a folder to group instruments under a common heading. It may contain slashes to represent a hierarchy. See https://floe.audio/develop/tags-and-folders.html for more information.---@field description? string A description of the instrument. Start with a capital letter an end with a period.---@field tags? string[] An array of strings to denote properties of the instrument. See https://floe.audio/develop/tags-and-folders.html for more information.---@field waveform_audio_path? string Path to an audio file relative to this script that should be used as the waveform on Floe's GUI.---@class FloeImpulseResponseAudioPropsConfig---@field gain_db? number Apply a gain to the audio data in decibels.---@class FloeBuiltinLoopConfig---@field start_frame number The start of the loop in frames. Inclusive. It can be negative meaning index the file from the end rather than the start.---@field end_frame number The end of the loop in frames. Exclusive. It can be negative meaning index the file from the end rather than the start. 0 means the end of the file.---@field crossfade number The number of frames to crossfade.---@field mode? "standard"|"ping-pong" The mode of the loop.---@field lock_loop_points? boolean If true, the start, end and crossfade values cannot be overriden by a custom loop from Floe's GUI.---@field lock_mode? boolean If true, the loop mode value cannot be overriden by a custom mode from Floe's GUI.---@class FloeRegionLoopConfig---@field builtin_loop? FloeBuiltinLoopConfig Define a built-in loop.---@field loop_requirement? "default"|"always-loop"|"never-loop" The requirement for this region to loop.---@class FloeRegionAudioPropsConfig---@field gain_db? number Apply a gain to the audio data in decibels.---@field start_offset_frames? number The number of frames to skip at the start of the audio data.---@field tune_cents? number Tune the audio data in cents.---@field fade_in_frames? number The number of frames to fade in the audio data, applied at the start after any start_offset_frames. If the region has slices, the fade is applied at the start of each slice instead.---@field fade_out_frames? number The number of frames to fade out the audio data, applied at the end of the sample. If the region has slices, the fade is applied at the end of each slice instead.---@class FloeRegionTimbreLayeringConfig---@field layer_range? number[] The start and end point, from 0 to 100, of the Timbre knob on Floe's GUI that this region should be heard. You should overlap this range with other timbre layer ranges. Floe will create an even crossfade of all overlapping sounds. The start number is inclusive, end is exclusive. This region's velocity_range should be the full range.---@class FloeRegionPlaybackConfig---@field keytrack_requirement? "default"|"always"|"never" The requirement for keytracking.---@class FloeRegionSliceConfig---@field start_frame number The frame position in the audio file where this slice begins.---@field length_proportion number A unitless value representing the relative duration of this slice when played in a tempo-synced sequence, similar to CSS flex-grow. The system sums all length_proportion values to determine the total number of steps, and each slice's proportion determines its playback duration.---@class FloeTriggerCriteriaConfig---@field trigger_event? "note-on"|"note-off" What event triggers this region.---@field key_range? number[] The pitch range of the keyboard that this region is mapped to. These should be MIDI note numbers, from 0 to 128. The start number is inclusive, the end is exclusive.---@field velocity_range? number[] The velocity range of the keyboard that this region is mapped to. This should be an array of 2 numbers ranging from 0 to 100. The start number is inclusive, the end is exclusive. Use the velocity_range_high_resolution instead if you need more than 100 velocity layers.---@field velocity_range_high_resolution? number[] Alternative to velocity_range that allows for 1000 velocity layers instead of 100.---@field round_robin_index? number Trigger this region only on this round-robin index. For example, if this index is 0 and there are 2 other groups with round-robin indices of 1 and 2 with the same round_robin_sequencing_group and trigger_event, then this region will trigger on every third press of a key only. round_robin_index should begin at 0 and be consecutive. The total number of round-robins is calculated automatically.---@field round_robin_sequencing_group? string Group together regions that have this same string, so that their round_robin_index is part of a separate sequence to other round_robin_sequencing_groups. Use this when you have multiple sets of regions that have a different number of round-robins with the same trigger_event.---@field feather_overlapping_velocity_layers? boolean If another region in this instrument is triggered at the same time as this one and is overlapping this, and also has this option enabled, then both regions will play crossfaded in a proportional amount for the overlapping area, creating a smooth transition between velocity layers. Only works if there's exactly 2 overlapping layers.---@field auto_map_key_range_group? string For every region that has this same string, automatically set the start and end values for each region's key range based on its root key.---@class FloeFileAttributionConfig---@field title string The title of the work.---@field license_name string Name of the license.---@field license_url string URL to the license.---@field attributed_to string The name/identification of the persons or entities to attribute the work to.---@field attribution_url? string URL to the original work if possible.---@class FloeNamedKeyRangeConfig---@field name string The name of the key range.---@field key_range number[] The range of the keyboard to give a name to. These should be MIDI note numbers, from 0 to 128. The start number is inclusive, the end is exclusive.---@class FloeBackgroundOverlayVignetteConfig---@field colour? number Edge colour of the vignette as a 0xRRGGBBAA integer. The alpha component controls the strength of the effect; set it to 0 to disable.---@field inner_radius? number Radius of the unaffected centre area, as a proportion of the panel's smaller dimension. 0 means the vignette starts at the centre; values near 1 confine it to the very edges.---@class FloeBackgroundOverlayPanelTintConfig---@field colour? number A flat tint drawn over the blurred mid-panel surfaces, as a 0xRRGGBBAA integer. Set alpha to 0 to disable.---@class FloeImpulseResponseConfig---@field name string The name of the IR.---@field id? string A unique identifier for the IR. If not specified, it will be the name of the IR. Either way, IR IDs must be unqiue within a library. It can be any text but it's recommended to use a human-readable identifier (similar to the name). IDs are how presets and settings refer to IRs.---@field path string File path to the impulse response file, relative to this script.---@field folder? string Specify a folder to group IRs under a common heading. It may contain slashes to represent a hierarchy. See https://floe.audio/develop/tags-and-folders.html for more information.---@field tags? string[] An array of strings to denote properties of the IR. See https://floe.audio/develop/tags-and-folders.html for more information.---@field description? string A description of the IR. Start with a capital letter an end with a period.---@field audio_properties? FloeImpulseResponseAudioPropsConfig Audio properties.---@class FloeRegionConfig---@field path string A path to an audio file, relative to this current lua file.---@field root_key number The pitch of the audio file as a number from 0 to 127 (a MIDI note number).---@field trigger_criteria? FloeTriggerCriteriaConfig How this region should be triggered.---@field loop? FloeRegionLoopConfig Loop configuration.---@field timbre_layering? FloeRegionTimbreLayeringConfig Timbre layering configuration.---@field audio_properties? FloeRegionAudioPropsConfig Audio properties.---@field playback? FloeRegionPlaybackConfig Playback configuration.---@field slices? table[] An array of slices that divide this region's audio into segments for tempo-synced playback. Each slice defines a start frame and a relative length. The system sums all length_proportion values to determine the total number of steps; each slice's proportion of the total determines its playback duration in the sequence.---@field loop_beats? number The musical length of the loop in beats (e.g. 4 for a 1-bar loop in 4/4, 8 for 2 bars). Required when slices are set. Used by the arpeggiator's auto-rate to pick a tempo division that matches the loop's native timing.---@field native_bpm? number The BPM the loop was recorded at. Required when slices are set. Used by the arpeggiator's auto-rate together with loop_beats to compute each step's native duration.---@class FloeBackgroundOverlayConfig---@field vignette? FloeBackgroundOverlayVignetteConfig Configures the radial vignette drawn over the background image when this library is the active background.---@field panel_tint? FloeBackgroundOverlayPanelTintConfig Configures a flat colour tint drawn over the blurred mid-panel surface. Independent of the vignette.---@class FloeLibraryConfig---@field name string The name of the library. Keep it short and use tagline for more details.---@field tagline string A few words to describe the library.---@field library_url? string The URL for this Floe library.---@field description? string A description of the library. You can be verbose and use newlines (\n).---@field author string Who created this library. Keep it short, use the description for more details.---@field id? string A unique identifier for this library. Specifying this field overrides the default ID of "library-name - author". It can be any text, its only meaning is to uniquely identify this library from others. However, in rare cases it may be shown on the UI so it should be human-readable and representative of the library. This field is useful if you want to change the name of the library: set this to the previous ID (otherwise the ID will change to "new-library-name - author") and bump the revision field.---@field author_url? string URL relating to the author or their work.---@field revision? number The revision number of this library. Bump this whenever you publish a backwards-compatible update (additional content, fixes, tweaks); breaking changes are not allowed - you'd need to create a new library such as: "Strings v2". The legacy name `minor_version` is also accepted.---@field background_image_path? string Path relative to this script for the background image. It should be a jpg or png. Look at Floe's 'Develop Libraries' docs for recommended specs.---@field icon_image_path? string Path relative to this script for the icon image. It should be a square jpg or png.---@field background_overlay? FloeBackgroundOverlayConfig Controls the vignette and panel-tint drawn over the background image when this library is the active background.---@class floefloe = {}-- Creates a new library. You should only create one library in your script. -- Return the library at the end of your script.---@param config FloeLibraryConfig---@return lightuserdata libraryfunction floe.new_library(config) end-- Creates a new instrument on the library. You can call this multiple times to -- create multiple instruments.---@param library lightuserdata---@param config FloeInstrumentConfig---@return lightuserdata instrumentfunction floe.new_instrument(library, config) end-- Adds a region to an instrument. You can call this multiple times to create -- multiple regions. Each instrument must have one or more regions.---@param instrument lightuserdata---@param config FloeRegionConfigfunction floe.add_region(instrument, config) end-- Adds a reverb impulse response to the library. You can call this multiple times -- to create multiple impulse responses.---@param library lightuserdata---@param config FloeImpulseResponseConfigfunction floe.add_ir(library, config) end-- Sets the attribution information for a particular file or folder. If the path -- is a folder, the attribution requirement will be applied to all audio files in -- that folder and its subfolders. You can also point it at the library's -- background_image_path to credit the cover image — when set, a subtle credit -- line appears on the Perform page.---@param file_path string---@param config FloeFileAttributionConfigfunction floe.set_attribution_requirement(file_path, config) end-- Gives a name to a key range of this instrument. For example, with a -- multi-sampled keyboard instrument, you might mark the ranges beyond the natural -- range of the real instrument as "Extended" ranges. You can call this multiple -- times to create multiple named key ranges. Alternatively, if the instrument -- contains multiple sounds, you can name each sound: "Kick", "Snare", etc. Don't -- overlap ranges.---@param instrument lightuserdata---@param config FloeNamedKeyRangeConfigfunction floe.add_named_key_range(instrument, config) end-- Sets the required Floe version for this library. If the current Floe version is -- lower than the required version, an error will be raised.---@param version_string stringfunction floe.set_required_floe_version(version_string) end-- Extends a table with another table, including all sub-tables. The base table is -- not modified. The extension table is modified and returned with all keys from -- both tables. If a key exists in both, the extension table value is used.---@param base_table table---@param t table---@return table extended_tablefunction floe.extend_table(base_table, t) end-- Converts a MIDI note range (where the end value is inclusive) to Floe's 0-100 -- range (where the end value is exclusive, A.K.A, one-past the last). Takes a -- table with two integers for start and end. Returns the same format but -- remapped.---@param midi_range table---@return table hundred_rangefunction floe.midi_range_to_hundred_range(midi_range) end-- Converts a MIDI note range (where the end value is inclusive) to Floe's 0-1000 -- range (where the end value is exclusive, A.K.A, one-past the last). Takes a -- table with two integers for start and end. Returns the same format but -- remapped.---@param midi_range table---@return table thousand_rangefunction floe.midi_range_to_thousand_range(midi_range) end_G.floe = floe ``` --- # Packages Page Submissions > Documentation for developers to submit packages to Floe's Package Directory Do you have a Floe package you'd like to add to the [Package Directory](/packages)? We're happy to help you get it listed. - If you're familiar with development workflows, please submit a [pull request](https://github.com/floe-audio/Floe/pulls) with a new entry to `package-database.json` following the schema below. - Otherwise, please [contact us](https://github.com/floe-audio/floe/discussions) and we'll help add your package. All packages must be compatible with the current Floe version and meet basic quality standards for audio, scripting, and presentation. Packages from larger-budget developers/studios may require [sponsorship](/docs/beta/about-the-project/sponsorship). ## Database Schema The package database (`website/static/package-database.json`) contains information about available Floe packages displayed on the website's packages page. Each entry represents a package that users can discover and install. - **`name`** - Package display name - **`slug`** - Lowercase version of name using dashes instead of spaces - used to make the URL - **`developer`** - Developer/studio name - **`developer_icon`** - URL to developer icon/logo - **`background_image`** - URL to package preview image - **`attribution_required`** - Boolean, shows ATTRIBUTION badge if true - **`description`** - HTML description with links allowed - **`category`** - `"community"` or `"professional"`, see below - **`direct_download_link`** - Direct download URL (null if external) - **`external_product_page`** - Developer's product page URL - **`instruments`** - Number of instruments in package - **`presets`** - Number of presets in package - **`irs`** - Number of impulse responses in package ## Categories **Community** - Open-source libraries, passion projects, independent conversions from other formats. Always free. Open to submissions from individual creators and non-commercial entities. **Professional** - High-quality libraries from established developers/studios. May be free or paid. [Requires project sponsorship](/docs/beta/about-the-project/sponsorship). --- # Package libraries & presets for distribution > How to create Floe Packages to distribute your sample libraries and presets The easiest and most reliable way to distribute your Floe content is with [Floe Packages](/docs/beta/installation/install-packages#what-is-a-package). Floe Packages are `.floe-pkg` files (ZIP files internally) containing **sample libraries** (which provide instruments and IRs) and/or **presets** (ready-to-use professional sounds). Packages are what users download and install into Floe. Floe also accepts `.zip` file extension. Floe offers an easy-to-use GUI for [installing packages](/docs/beta/installation/install-packages). This installation process carefully considers existing content, versions, installation preferences, and whether installed libraries have been modified. The result should 'just work' or provide clear instructions on what to do next. As with Floe's sample library format, openness is key. That's why Floe Packages are just ZIP files with a specific structure and a `.floe-pkg` extension. Anyone can create them and anyone can open them (rename to `.zip` to extract). Additionally, it gives the user the option to extract them manually rather than use Floe's GUI if they wish. Create Floe Packages using our command-line tool or any ZIP program. We often recommend not leaving packages with the `.zip` extension though because the common thing to do with ZIPs is extract them, which is not what Floe's 'Install Package' button wants, leading to confusion. Instead, always change the file extension to `.floe-pkg`. ## Encrypted packages Floe also supports encrypted packages. Whilst not open, these are implemented in a spirit of Floe's hassle-free philosophy. A license key is needed to unlock the package. No internet connection is required. ## Packager command-line tool If you're comfortable with such things, we have a command-line tool to create Floe Packages. It ensures everything is set up correctly and adds a couple of nice-to-have features, particularly for users who want to install the package manually rather than with Floe's GUI. However, for regular packages, you can use any ZIP program to create them. Just make sure they follow the structure described in the next section, and rename the resulting `.zip` to `.floe-pkg`. Creating encrypted packages requires `floe-packager` and is not yet documented. #### Download - **Floe Packager Windows**: [Floe-Packager-v2.0.2-Windows.zip](https://github.com/floe-audio/Floe/releases/download/v2.0.2/Floe-Packager-v2.0.2-Windows.zip) (13 MB) - **Floe Packager macOS Apple Silicon**: [Floe-Packager-v2.0.2-macOS-Apple-Silicon.zip](https://github.com/floe-audio/Floe/releases/download/v2.0.2/Floe-Packager-v2.0.2-macOS-Apple-Silicon.zip) (1 MB) - **Floe Packager macOS Intel**: [Floe-Packager-v2.0.2-macOS-Intel.zip](https://github.com/floe-audio/Floe/releases/download/v2.0.2/Floe-Packager-v2.0.2-macOS-Intel.zip) (1 MB) - **Floe Packager Linux**: [Floe-Packager-v2.0.2-Linux.tar.gz](https://github.com/floe-audio/Floe/releases/download/v2.0.2/Floe-Packager-v2.0.2-Linux.tar.gz) (14 MB) Download the program, extract it, and run it from the command line. #### Usage Here's the output of `floe-packager --help`: ``` Packages libraries and presets into a Floe package file (.floe-pkg or .floe-pkg-enc).Existing packages can be merged into the output. Multiple libraries and preset foldersare supported. Additionally:- Validates any Lua files.- Ensures libraries have a License file.- Adds an 'About' document for each library.- Adds an 'Installation' document for the package.- Embeds a checksum file into the package for better change detection if the package is installed manually.Encrypted workflow: run gen-key once per product line and store the key securely (orgenerate the key by some other means). Pass it to pack via --package-key for every versionso that a single license key unlocks all of them.Usage: floe-packager [OPTIONS]Commands: pack Build a Floe package (.floe-pkg) from libraries and presets. Existing packages can be merged into the output. info Write a JSON manifest describing the package's instruments, presets, tags, etc., without producing a package file. gen-key Generate a random package key and print it to stdout.Run 'floe-packager --help' for more information on a command.Build a Floe package (.floe-pkg) from libraries and presets. Existing packages can be merged into the output.Usage: floe-packager pack [OPTIONS]Positional arguments: Directory to write the package into. Created if missing. The package filename is auto-generated.Optional arguments: -l, --library-folder ... Library folder to include (repeatable) -p, --preset-folder ... Preset folder to include (repeatable) -i, --input-package ... Existing package file to merge into the output. Files from --library-folder and --preset-folder take precedence on conflict. (repeatable) --prune Silently drop files that aren't used: for libraries, files not referenced from Lua (samples, images, IRs) or the .lua/license files; for preset folders, files that aren't presets or preset-bank info files. Without this, such files are warned about but still included. -n, --package-name Override the auto-generated package name. --package-key 64-character hex key for encrypting the package (gen-key can create one). When present, produces an encrypted .floe-pkg-enc instead of a plain .floe-pkg. Reuse the same key across versions so existing license keys stay valid.Write a JSON manifest describing the package's instruments, presets, tags, etc., without producing a package file.Usage: floe-packager info [OPTIONS]Positional arguments: JSON file path to write the manifest to. Use '-' to write to stdout.Optional arguments: -l, --library-folder ... Library folder to include (repeatable) -p, --preset-folder ... Preset folder to include (repeatable) -i, --input-package ... Existing package file to merge into the output. Files from --library-folder and --preset-folder take precedence on conflict. (repeatable) --prune Silently drop files that aren't used: for libraries, files not referenced from Lua (samples, images, IRs) or the .lua/license files; for preset folders, files that aren't presets or preset-bank info files. Without this, such files are warned about but still included. -n, --package-name Override the auto-generated package name.Generate a random package key and print it to stdout.Usage: floe-packager gen-key [OPTIONS] ``` #### Examples These examples use bash syntax. ``` # Creates a .floe-pkg from the Slow library and the Slow Factory Presets.# Slow and "Slow Factory Presets" are folders in the current directory../floe-packager --library-folder "Slow" \ --preset-folder "Slow Factory Presets" \ --output-dir .# Creates a .floe-pkg containing multiple libraries and no presets./floe-packager --library-folder "C:/Users/Sam/Floe-Dev/Strings" \ "C:/Users/Sam/Floe-Dev/Common-IRs" \ --output-dir "C:/Users/Sam/Floe-Dev/Releases" \ --package-name "FrozenPlain - Strings" ``` ## Package structure If you're not using the packager tool, you need to know the structure of the Floe Package. It's very simple. Requirements of a floe package: - The package must contain a folder called `Libraries` and/or a folder called `Presets`. If present, these folders must contain the libraries and presets respectively. Be careful that your ZIP program is not adding an extra folder when you create the ZIP file. There should not be a top-level folder in the ZIP file, just the `Libraries` and/or `Presets` folders. #### Example: single library & factory presets ``` 📦FrozenPlain - Arctic Strings Package.floe-pkg/├── 📁Libraries│ └── 📁Arctic Strings│ ├── 📄arctic-strings.floe.lua│ ├── 📁Samples│ │ ├── 📄strings_c4.flac│ │ └── 📄strings_d4.flac│ └── 📁Images│ ├── 📄background.png│ └── 📄icon.png└── 📁Presets └── 📁Arctic Strings Factory ├── 📁Realistic │ ├── 📄Octaved.floe-preset │ └── 📄Soft.floe-preset └── 📁Synthetic ├── 📄Bright.floe-preset └── 📄Warm.floe-preset ``` #### Example: multiple libraries ``` 📦Audioata - Synthwave Bundle Package.floe-pkg/├── 📁Libraries│ ├── 📁Synthwave Bass│ │ ├── 📄synthwave-bass.floe.lua│ │ └── 📁Samples│ │ ├── 📄bass_c1.flac│ │ └── 📄bass_d1.flac│ ├── 📁Synthwave Drums│ │ ├── 📄synthwave-drums.floe.lua│ │ └── 📁Samples│ │ ├── 📄kick.flac│ │ └── 📄snare.flac│ └── 📁Synthwave Synths│ ├── 📄synthwave-synths.floe.lua│ └── 📁Samples/│ ├── 📄synth_c4.flac│ └── 📄synth_d4.flac└── 📁Presets └── 📁Synthwave Factory ├── 📄Clean Pad.floe-preset ├── 📄Dirty Lead.floe-preset ├── 📄Nebula Drone.floe-preset ├── 📄Punchy Kickdrum.floe-preset ├── 📄Backing FX.floe-preset └── 📄Full Effect.floe-preset ``` --- # Tags and folders > Best practices for using tags and folders in Floe sample libraries Floe has 2 complimentary features for browsing, searching and filtering: tags and folders. Presets, instruments, and impulse responses all use tags and folders. For developers, there are best practises for how to use tags and folders to offer the best experience for the user. On this page, we use the term 'item' to mean either preset, instrument, or impulse response: these all use tags and folders in a similar way. ## Folders Folders are used to group items under a common heading. Folders should be categories that relate to the theme or objective of the library. For example, for Lost Reveries, we wanted to explore the technique of using three complimentary timbres to layer into a full-spectrum sound, so we choose folders: "Low", "Mid" and "Air". Another example might be a library of field recordings, folders might be "Urban/London", "Urban/York" or "Nature/New Forest". Folders may contain slashes to represent a hierarchy, just like a filepath. For example: "Piano/1978 Steinway". Use this to specify broad categories that narrow down to specific categories. It's not usually best to have more than 2 levels of hierarchy. It's best to have 5 to 30 items per folder. Folders with only a couple of items clutter the GUI and don't offer much value. Folders with too many items loose their focus. Folders might overlap with tags but, in general, they are more abstract and can use phrases that only make sense in the context of the library as a whole. However, if it makes sense to group items under a common heading such as 'Percussion' (a common tag), then that's fine too — but you should also add this as a tag. ## Tags Tags are the properties of an item. They are used for filtering and searching items across all libraries. Tags must come from the standard pool of tags so that there is a common language that enables standard usage across all libraries. Any tags not in the standard pool are ignored. Add as many relevant tags as possible. ## Instrument tags Instrument tags are set in the sample library's Lua file when calling `floe.new_instrument`. However, writing tags manually is quite laborious. Floe has a utility that allows you to use the GUI to select tags. It will write these tags as Lua code, ready to be included in your `floe.lua` file. `Lua/instrument_tags.lua`: ``` -- This file is generated by Floe's tag builder.return { ["Air - Restless Canopy"] = { "ambient", "bittersweet", "breathy", "dreamy", "ethereal", "nostalgic", "resonant", "smooth", "synthesized", "texture", }, -- ...} ``` `floe.lua`: ``` local instrument_tags = dofile("Lua/instrument_tags.lua")-- ...local instrument_name = "Air - Restless Canopy"local instrument = floe.new_instrument(library, { name = instrument_name, tags = instrument_tags[instrument_name], -- ...}) ``` This Tag Builder is found by clicking on the 3-dots menu at the top of Floe, and then selecting "Library Developer Tools". The tag builder works for whatever instrument is loaded in the first layer of Floe. As you click on tags, the generated Lua code will be placed in the library's folder in a subfolder called `Lua`. ## Standard tags We take a pragmatic approach to defining this set of standard tags. Rather than try to be completely comprehensive and technically accurate, we instead aim to strike a balance between correctness and common usage within the music production space. The goal of tags is to help users find the item they need. You can suggest edits to this list via Github or other means. For best results setting tags, go over each of the following questions and add all tags that apply to the item. ### 1. 🔊 Sound source: Where did the sound come from? | Tag | Description | | :-- | :-- | | `acoustic` | Originating from a real instrument | | `field recording` | Environmental or location recordings | | `found sounds` | Real objects not traditionally used for music | | `hybrid` | Combines acoustic/vocal sounds with processed/synthesized elements | | `synthesized` | Generated by algorithms or circuits | | `vocal` | Originating from a human voice | It's strongly recommended to specify a sound-source for instruments and impulse responses. This is sometimes not applicable for presets. ### 2. 🎻 Real instrument category: Does it fit in a real instrument category? `brass`, `cello`, `choir`, `double bass`, `drums`, `electric bass`, `folk`, `guitar`, `keyboard`, `organ`, `percussion`, `piano`, `plucked strings`, `strings`, `struck strings`, `tonal percussion`, `violin`, `wind`. **plucked strings:** Plucked strings such as guitar, harp, mandolin **strings:** Bowed strings such as violin, viola, cello, double bass **struck strings:** Struck strings such as hammered dulcimer, santur These are mostly relevant for acoustic or hybrid sounds, but can be used for synthesized sounds that emulate these instruments. ### 3. 👥 Number of players: How many players are involved? | Tag | Description | | :-- | :-- | | `solo` | Single player | | `ensemble` | Multiple players | This is typically used for acoustic sounds. Synthesized sounds usually don't have this tag. ### 4. ➡️ Sound type (long duration): If it's a long-duration sound, what type is it? | Tag | Description | | :-- | :-- | | `drone` | Sustained, minimal, static foundation with little movement | | `pad` | Playable harmonic support, pitched and chord-capable | | `texture` | Sustained atmospheric element, typically less of a musical pitch than \`pad\` | | `soundscape` | A complete environment or scene, complex sonic space | | `underscore` | Background tones or sequences for underneath dialogue | | `noise` | Non-pitched and constant, similar to white noise | Pick from here if the sound sustains. Mutually exclusive with short-duration and sequence sound types. ### 5. ↔️ Sound type (short duration): If it's a short-duration sound, what type is it? | Tag | Description | | :-- | :-- | | `hit` | Single impactful sound with pitch and percussive elements | | `keys` | Piano or keyboard-like | | `kit` | Different sounds mapped across keys, such as a drum kit | | `oneshot` | Non-looping single sound, typically not for playing chromatically | | `pluck` | Short melodic notes | | `stab` | Extra-short melodic notes | Pick from here if the sound is brief or transient. Mutually exclusive with long-duration and sequence sound types. ### 6. 🔁 Sound type (sequence or pattern): If it's a sequence or pattern, what type is it? | Tag | Description | | :-- | :-- | | `arp` | Arpeggiated pattern of notes | | `sequence` | Sequenced pattern timbre changes | | `loop` | Sampled repeating phrase | Pick from here if the sound is a repeating or arpeggiated pattern. Mutually exclusive with long- and short-duration sound types. ### 7. 🎛️ Sound type (role in a track): What type of sound is it? | Tag | Description | | :-- | :-- | | `lead` | Foreground melodic element | | `bass` | Low-frequency foundation | | `riser` | Building tension element | | `downer` | Descending tension element | | `sound fx` | Special effect sound | | `transition` | Section change element | ### 8. 🪵 Material: Is it made from a specific material? `glass`, `ice`, `metal`, `plastic`, `rubber`, `stone`, `wood`. This is typically used for non-standard instruments in the \`acoustic\` or \`found sounds\` categories. ### 9. 🏛️ Reverb type: What reverb type is it? `cathedral`, `chamber`, `church`, `hall`, `large room`, `open air`, `small room`, `studio`, `unusual`. Strongly recommended for impulse responses. Not applicable for instruments or presets. ### 10. 🙂 Mood (positive): What mood does the item evoke? `bright`, `dreamy`, `ethereal`, `hopeful`, `nostalgic`, `peaceful`, `playful`. **bright:** Positive, uplifting, clear It's usually recommended to specify moods for synthesised instruments and presets. Not typically used for well-known acoustic instruments. ### 11. 😟 Mood (negative): What mood does the item evoke? `aggressive`, `chaotic`, `dark`, `disturbing`, `eerie`, `melancholic`, `menacing`, `tense`. **dark:** Unhappy, dim, unpleasant It's usually recommended to specify moods for synthesised instruments and presets. Not typically used for well-known acoustic instruments. ### 12. 😐 Mood (mixed): What mood does the item evoke? `bittersweet`, `hypnotic`, `mysterious`, `quirky`, `subdued`. It's usually recommended to specify moods for synthesised instruments and presets. Not typically used for well-known acoustic instruments. ### 13. 🎭 Mood (thematic): What mood does the item evoke? `dramatic`, `dystopian`, `epic`, `experimental`, `fantasy`, `heroic`, `noir`, `romantic`, `thriller`, `horror`, `sci-fi`, `western`. It's usually recommended to specify moods for synthesised instruments and presets. Not typically used for well-known acoustic instruments. ### 14. 🎶 Pitch: What are its pitch characteristics? | Tag | Description | | :-- | :-- | | `multi-pitched` | Contains multiple distinct notes (excluding octave unison) | | `non-pitched` | Lacks identifiable musical pitch | | `dissonant` | Contains harmonically clashing pitches | Useful for non-typical sounds that have notable pitch characteristics. A sound is assumed to possess a musical pitch unless otherwise stated. ### 15. 🚂 Timbre (modulation): What is its timbre like? | Tag | Description | | :-- | :-- | | `evolving` | Significantly notable slow morphing changes over time | | `fluctuating` | Significant fast or semi-fast irregular movement | | `glitched` | Digital error artefacts | | `grainy` | Audibly composed of tiny grains | | `pulsing` | Obvious rhythmic pulse | ### 16. 🎷 Timbre (real instrument tone): What is its timbre like? | Tag | Description | | :-- | :-- | | `brassy` | Like brass instruments | | `breathy` | Containing air noise, like wind instruments | | `strings-like` | Characteristic resonance of string instruments | | `reedy` | Characteristic of reed instruments | | `choir-like` | Characteristic of choral voices | | `organ-like` | Characteristic of an organ | | `percussive` | Short, sharp attack | ### 17. 🎚️ Timbre (synthesis technique): What is its timbre like? | Tag | Description | | :-- | :-- | | `analog` | Warm, imprecise, vintage character | | `FM` | Frequency modulation synthesis | | `granular` | Granular synthesis | | `physical modelling` | Simulating real-world physics | ### 18. 💎 Timbre (frequency): What is its timbre like? | Tag | Description | | :-- | :-- | | `airy` | Soft, open, high-frequency hiss | | `circuit bent` | Characteristic of modified electronic devices | | `cold` | Thin, clinical, lacking warmth | | `digital` | Clean, precise, computer-generated character | | `distorted` | Overdriven, crushed, non-linear | | `full-spectrum` | Wide frequency range | | `fuzzy` | Indistinct, soft-edged, unclear | | `glassy` | Clear, fragile, transparent | | `gritty` | Rough, textured, unpolished | | `harsh` | Abrasive, aggressive high frequencies | | `hissing` | Sibilant, white noise | | `lo-fi` | Tape, vinyl, or bitcrush-style degradation — hiss, crackle, wow/flutter, reduced fidelity | | `lush` | Full, rich, densely layered | | `metallic` | Resonant, hard, bright, like metal | | `muddy` | Unclear low-mid frequencies | | `muffled` | Dampened high frequencies | | `nasal` | Strong mid-range resonance | | `noisy` | Contains noise components, imperfect. If the sound is 100% noise use \`noise\` instead. | | `pure` | Free from noise, clean sine-like quality | | `resonant` | Strong resonant peaks in frequency | | `ringing` | Clear high unrelenting resonant sound | | `rumbly` | Very low frequency non-pitch sustained noise | | `saturated` | Subtly distorted, harmonically enhanced | | `smooth` | Even, consistent, without sharp edges | | `thin` | Lacking in fullness, narrow frequency range | | `warm` | Pleasant mid-range and low-mid-range, rounded harmonics | | `whining` | High-pitched fluctuating sound | ### 19. 🎵 Genre: What genres might this item fit best into? `80s`, `EDM`, `IDM`, `ambient`, `blues`, `chillout`, `chiptune`, `cinematic`, `disco`, `downtempo`, `drum & bass`, `dubstep`, `electronic`, `folk (genre)`, `funk`, `future bass`, `glitch`, `hip-hop`, `house`, `industrial`, `jazz`, `lo-fi`, `metal (genre)`, `orchestral`, `pop`, `rock`, `synthwave`, `techno`, `trance`, `trap`, `vaporwave`, `world`. **lo-fi:** Tape, vinyl, or bitcrush-style degradation — hiss, crackle, wow/flutter, reduced fidelity Specifying at least one genre is recommended for all presets and instruments. --- # Frequently asked questions > {/* ### Can I add my own samples into Floe? Floe does not support ad-hoc sampling at the moment. We describe Floe as a _sample library platform_ rather than a sampler (alternatively you could describe it as an open ROMpler). It is a platform for comprehensive, polished products. If you are a software developer, you can use our Lua tools to make your own sample libraries for Floe. ### Does Floe load SFZ/Soundfont/other formats? No, Floe currently only loads the Floe sample library format, an open format with similar ideas to SFZ but using the Lua programming language. Floe also supports the legacy Mirage sample library format used by some FrozenPlain libraries. --- # Glossary > {/* To best understand Floe, it's helpful to know exactly what we mean when we mention specific terms: - **[Package](/docs/beta/installation/install-packages#what-is-a-package)** — the portable distribution container used to download and install Floe content (`.floe-pkg` or `.floe-pkg-enc`). Packages may contain sample libraries, presets, or both. - **[Sample Library](/docs/beta/reference/sample-libraries)** — a collection of mapped, playable sounds along with images, tags, and other metadata. Sample libraries provide the _instruments_ and _impulse responses_ that Floe loads. - **[Instrument](/docs/beta/reference/instruments)** — a playable sound source loaded into one of Floe's 3 layers, such as a sampled piano or an ambient drone (provided by a sample library). - **[Impulse Response](/docs/beta/usage/effects#convolution-reverb)** — a sample that determines the character of Floe's Convolution Reverb effect (provided by a sample library). - **[Preset](/docs/beta/usage/presets)** — a production-ready snapshot of all of Floe's parameters and options, along with a name, description, and tags. --- # Overview > A tour of Floe's window and how sound flows through it ## What is Floe? Floe is an audio plugin for your digital audio workstation (DAW). It's a platform for performing, finding, and transforming sounds from compatible sample libraries. It hosts sample-based instruments (sampled pianos, synths, textures, and so on) and exposes an extensive set of parameters for venturing into _sample-based synthesis_. A comprehensive presets system with powerful browsers, macros, a random variation generator, and other features make it a formidable engine for sample libraries. It focuses on ease-of-use and performance, designed to offer a curated experience for producing music rather than overwhelming complexity. ## Library platform Floe is not designed for ad-hoc sampling — you can't currently import your own samples. Instead, it's an open platform for professional, curated, sample-library products. For those with programming experience, the means to make custom libraries is fully open. ## Key features - 3 independent layers to blend and mix - even across different libraries - Totally free and open-source; offline, no logins, no catches - 11 effects in a reorderable rack - Powerful [granular synthesis](/docs/beta/usage/granular) - Per-layer [arpeggiator](/docs/beta/usage/arpeggiator) - Comprehensive [browsers](/docs/beta/usage/browsers) for finding the right sound or preset - [Random variation generator](/docs/beta/usage/randomisation) - CPU efficient - Resizable UI - All baseline features: ADSR, filters, EQ, MIDI CC & sustain pedal support - Sound design friendly: undo/redo, A/B comparison for preset edits, macro knobs - [Free sample libraries](/packages) ### New in version 2 Floe is improving: the recent free version 2 update of Floe offers a substantial set of new features and improvements. Read about the update in the [blog post](/blog/floe-2-0-0-beta-2). ## The UI ![Floe's main window with its four regions highlighted](/images/screenshots/overview.png) 1 2 3 4 5 1. **Top panel** — global controls: preset name and browser, save, undo/redo, the main menu, and master volume. 2. **Main content** — showing the background image of the sample library, with one of 3 selectable tabs: [_Perform_](/docs/beta/usage/perform) shows the distraction-free basic view, [_Layers_](/docs/beta/usage/layers) exposes the per-layer parameters for each of the three layers, and [_Effects_](/docs/beta/usage/effects) is the reorderable effects rack. 3. **Bottom panel** — the keyboard, plus context-sensitive controls (key ranges, macros, etc.) depending on the active tab. 4. **Main tabs** — switches the main content between _Perform_, _Layers_, and _Effects_. 5. **Resize corner** — drag to scale the window (fixed aspect ratio). The _window size_ buttons in the preferences panel do the same. In some DAWs such as Logic Pro, you must grab this exact point of Floe, not the corner of DAW window wrapping it. ## Signal flow Notes are sent in parallel to three identical layers — each hosting its own instrument with per-layer envelope, tuning, filter and LFO. The layers are combined and fed through a shared, reorderable effects rack, then a master volume. ## Tips - Knobs and sliders respond to click-and-drag (up/down or left/right). Hold `shift` for fine adjustments, `ctrl`/`cmd`+click to reset to default, double-click to type a value, and right-click for more options. - Hovering over most elements displays a tooltip with a brief description. Tooltips can be disabled in the preferences panel. - Floe is designed to be efficient with your CPU and can be added multiple times in a single project; multiple instances will share resources such as sample libraries to keep memory usage low. --- # Quick Start Guide > {/* Get up and running with Floe in just a few simple steps. ## Before you start Floe is an **engine** — it's empty without sample libraries. If you already have packages (perhaps sent to your email), jump below to _Setting up Floe_. Otherwise, browse the [packages](/packages) page first to discover free and paid options. ## Setting up Floe 1. **[Download Floe](/download)** and install it on your computer. 2. **Download your packages** of your choice. 3. **Open your DAW**. 4. **Add the Floe plugin** - often found as a 'virtual instrument' under 'Floe Audio' in your plugin list. 5. **[Install your packages](/docs/beta/installation/install-packages)** by opening the Floe's Preferences and clicking the **Install package** button. 6. **Select your downloaded package** file(s). After a few moments, your libraries and presets will be available to use. ## Load a preset Now, let's make some sound: 1. **Open the preset browser** by clicking the preset name at the top of Floe's window. 2. **Choose a preset** by clicking on one from the list on the right. 3. **Play some notes** on your MIDI keyboard or DAW piano roll. 4. **Close the preset browser** using the button or clicking outside the browser. ## Change an instrument A _Preset_ is a full production-ready setup of all of Floe's sounds and parameters. An _Instrument_ on the other hand, is a single sound-generator within Floe. These are loaded into any of Floe's 3 layers. Instruments are the building blocks in Floe. Sometimes an instrument is a single sample, sometimes it's a detailed multi-sampled emulation of a real instrument. 1. **Open the instrument browser** by clicking the instrument name in the layer you want to change. An instrument name might be something like _Xylophone_ or _Analog Pad_. 2. **Choose an instrument** by clicking on one from the list on the right. 3. **Play some notes** on your MIDI keyboard or DAW piano roll and notice how the sound has changed. note Floe is continuously improving. Share your feedback or feature ideas on GitHub, forums or via email. --- # Installing Floe > Instructions for downloading and installing Floe on Windows, macOS, and Linux Simply [download](/download) and run the installer for your operating system. For thoroughness, this page provides detailed installation instructions for each platform. Windows macOS Linux ## Requirements On Windows, Floe is available in the CLAP and VST3 formats. We recommend using the CLAP version where possible. Requirements: - Windows 10 or later - 64-bit computer - x86-64 processor with SSE2 support (almost all processors in a Windows PC since ~2006 have this) - 64-bit CLAP or VST3 host. CLAP hosts include Reaper, Bitwig, FL Studio (2024 or newer) and Studio One Pro (v7 or newer). VST3 hosts include Cubase, Studio One, Ableton Live, Reason, and more. Just to be extra clear: there's no 'standalone' application and no AAX (Pro Tools) support. We hope to expand Floe's compatibility in the future. ## Overview To install Floe, download the installer from the [downloads](/download) page and extract it (normally double-click). Double click on the installer EXE file and follow the instructions. ### Alternative: Manual Installation (Advanced) Normally you'll want to use the installer, but there could be some cases where you'd prefer to install Floe manually. To allow for this, we provide a zip file that contains Floe's plugin files; these can also be found on the [downloads](/download) page. Extract it and move the files to your plugin folders. - **CLAP:** Move `Floe.clap` into `C:\Program Files\Common Files\CLAP` - **VST3:** Move `Floe.vst3` into `C:\Program Files\Common Files\VST3` * * * ### How to update Floe To update Floe, simply download and run the latest installer again. It will replace the old version in a backwards-compatible way — your DAW projects won't break. Alternatively, if you manually installed Floe, install the latest files - replacing the old ones. ### Checking for updates Floe can automatically check for available updates. It does this in a simple, non-intrusive way. When a newer version is available, a red dot will appear on the 3-dots menu in Floe's window. ![Floe red dot update indicator](/images/screenshots/update-indicator.png) Open the menu and click "Info" to show you the options: ignore the update, or visit the download or changelog pages. Ignoring the update means the red dot will disappear until a newer version is available. ![Floe info panel update info](/images/screenshots/check-for-updates.png) ### Disabling automatic update checks You can disable automatic update checks by unchecking the "Check for updates" option in Floe's preferences panel. ### Beta updates There is also a checkbox on the preferences panel for receiving update notifications for the latest release, including if there's a newer beta version available. This is only recommended in certain situations. See the [Beta Testing](/docs/beta/about-the-project/beta-testing) page for more information. --- # Install Packages > How to install Floe packages containing sample libraries and presets ### At a glance Download your package file(s). Click the 'Install package' button in Floe's Preferences panel. Direct it to the package file. ### Full instructions Firstly, if you haven't already, [download & install Floe](/download). Next, load up the Floe plugin in your DAW. Download your chosen package(s) (`.floe-pkg` or `.floe-pkg-enc` files containing sample libraries and presets). To install: 1. Open Floe's Preferences panel ( cog icon) 2. Go to the Packages tab 3. Click 'Install package' and select your package file(s) 4. Done - libraries/presets are immediately available The package files can be deleted after installation. No restart required. ![Floe Preferences panel showing the Packages tab](/images/screenshots/install-packages.png) ## Advanced Details ### What is a package? A package is the portable distribution container used by Floe. It's exclusively used as the format for **downloading and installing content**. A package may contain: - Samples Libraries - Presets/Preset Banks Typically, a package contains one sample library, and a bank of factory presets for the library. But alternatively, a package could also contain only presets, or a collection of sample libraries, or any combination. Floe doesn't remember packages after installation; they're just a means to get content onto your computer. Packages are created using Floe's [packaging tools](/docs/beta/develop/packaging), or using a ZIP utility. ### Encrypted packages Some packages use the `.floe-pkg-enc` format. Installation is the same as any other package — click 'Install package' and select the file — with one extra step: Floe prompts for a license key. Encrypted packages require Floe version 2 or later. ![License key prompt](/assets/images/encrypted-package-key-required-ada43de387f73d3c97c39fbd812f252a.png) Paste the license key provided by the package developer, then click **Activate**. The whole process is offline; no internet connection or account is required. A license key is personal to you and embeds your identifying information. Once installed, Floe shows who the package is licensed to: ![Installed encrypted package showing license holder](/assets/images/encrypted-package-installed-4e4b0d6b5f7cab9dab0c4ee87284000d.png) ### ZIPs As of Floe version 2, Floe's default for packages now use `.floe-pkg` or `.floe-pkg-enc` format. The default used to be `.zip` files. Floe still supports packages in ZIP format. We switched to `floe-pkg` because it's natural to extract a ZIP as soon as you download it, but Floe's 'Install Package' button wanted the ZIP un-extracted, often leaving to confusion and hassle. If you still have a package ZIP, you can still install it. Don't extract it, leave it as a ZIP file and direct Floe to it using 'Install Package'. If you're on macOS: be aware that Safari automatically extracts ZIP files after downloading. To prevent this, open Safari's settings and uncheck **Open "safe" files after downloading** in the General tab. ### Install to a custom location 1. Create custom folders using Finder/File Explorer such as "Floe Libraries" and "Floe Presets" 2. Add them to Floe's preferences under their respective heading 3. Select them on the Package _install folder_ menus #### Full details By default, Floe installs content to standard folders on your main drive. This can be changed though by selecting custom folders in the Preferences panel's Packages tab. If you've not done this before, the dropdowns for _install folder_ menus might only show 'Default' locations. You need to first tell Floe about your custom folders and then select them here. To do that, use your file browser program (Finder/File Explorer) and create the folder(s) where you want to keep Floe content and add them on Floe's preferences. Floe uses separate folders for sample libraries versus presets, so you might want to create one for each. For example, on your _SAMPLES_ hard drive, create folders: "Floe Libraries" and "Floe Presets". Add these 2 folders on Floe's preferences panels and select them as the default installation locations. Further details about folder management can be found on the [Folders](/docs/beta/usage/folders) page. ### How 'Install package' works Floe handles the installation process intelligently. It will check existing installations across all known folders, check for conflicts and handle upgrades. It will even detect if you've modified a library and give you the option to keep your modified version. It will ask you about skipping or overwriting if it needs too. It will never duplicate libraries unnecessarily. ### Manually installing For non-encrypted packages, (`.floe-pkg` or `.zip`), you can manually install libraries and presets by extracting the package file into the correct folders (instead of using the 'install package' button). Despite the different extension, `.floe-pkg` are also just ZIP files. You might want to first rename it to `.zip` and then extract it using any ZIP extraction tool - often just a matter of double-clicking on it. 1. Extract the package file. 2. Open Floe. 3. Open the Preferences panel using the gear icon at the top. 4. Open the Folders tab. 5. Here you can control which folders Floe looks for libraries and presets in. Copy/move the contents of the package's Libraries into one of Floe's library folders, and the same for Presets into one Floe's presets folder. 6. Done. No need to restart Floe. Note: `.floe-pkg-enc` (encrypted) packages cannot be manually extracted; they must be installed through Floe using a license key. ### Convert floe-pkg to zip No conversion needed! Just change the file extension from 'floe-pkg' to 'zip'. This only works for `.floe-pkg` files, not encrypted `.floe-pkg-enc` files. There are countless ways to do this. As quick guidance for our users: - On macOS Finder: right-click the file -> Get Info -> edit Name & Extension. - On Windows File Explorer: View -> Show -> File name extensions. Then right-click the file and rename. ### Uninstalling packages Floe doesn't track packages - they are just the installation format. However, you can uninstall libraries and presets. Visit the [Uninstalling](/docs/beta/installation/uninstalling) page for full instructions. ### Mirage Compatibility If the package is a [Mirage](/docs/beta/about-the-project/mirage) library and you are getting errors about missing Mirage Compatibility, [download Mirage Compatibility Package.floe-pkg](https://github.com/FrozenPlain/floe-mirage-compatibility/releases/download/v1.2/FrozenPlain.-.Mirage.Compatibility.Package.floe-pkg) and install it like any other package. --- # Uninstalling > Instructions for uninstalling Floe and removing libraries and presets You can uninstall sample libraries, presets, and Floe itself by following the steps below. If you want to completely remove Floe, follow all the steps in order. _Packages_ are not uninstalled directly because they're just the distribution format for sample libraries and presets; Floe doesn't 'remember' packages. If you uninstall or overwrite a library, preset or preset bank by accident you can typically recover the item from your computer's Trash or Recycle Bin. You may find that item in the trash has a suffix such as '(old)'. Once restored you may rename the file/folder to remove this suffix. ## Uninstall sample libraries 1. Open Floe 2. Click on the 3-dots menu at the top, then "Info". 3. For each installed libraries, click the _uninstall_ button. You can also do this by right-clicking on the library name in the instrument/IR browser and choosing 'Uninstall'. ![Uninstall library](/images/screenshots/uninstall-library.png) ## Uninstall presets 1. Open Floe 2. Open the preset browser by clicking on the preset name at the top. 3. Right-click on the heading of each preset bank and choose 'Uninstall' Repeat for all installed preset banks. ![Uninstall preset bank](/images/screenshots/uninstall-preset-bank.png) ## Uninstall Floe plugin ### Windows On Windows, Floe can be uninstalled using the standard method for uninstalling software, via the 'Add or Remove Programs' control panel. See the [Windows documentation here](https://support.microsoft.com/en-gb/windows/uninstall-or-remove-apps-and-programs-in-windows-4b55f974-2cc6-2d2b-d092-5905080eaf98). Close your DAW before running the uninstaller. **This uninstalls Floe, but not libraries or presets.** This uninstaller also supports uninstalling Mirage, the predecessor to Floe. ### / macOS or Linux To uninstall Floe on macOS or Linux, you must delete Floe's files manually. Visit the [file locations](/docs/beta/reference/file-locations) page to find where Floe's files are located on your system. For each of these locations, delete the files and folders. The key files to delete are the plugin files. However, you might also want to delete Floe's small additional files for thoroughness. --- # Attribution > Information about attribution requirements for sample libraries in Floe ## At a glance If a sample library requires attribution: - Floe will show you the required attribution text. - Copy-and-paste this text alongside wherever you share your music. - You own your music (sell it, relicense it, etc.) - you just need to credit the creator of the sounds. The above bullet points assume the license is the "Creative Commons Attribution 4.0 International" license — a very common attribution-required license. ## About attribution-required licenses A license tells you what you can and can't do with a sample library. Most developers choose a license that allows you to use the sounds in your music without having to credit them. However, some developers choose an attribution-required license such as the widely-used [Creative Commons Attribution](https://creativecommons.org/licenses/by/4.0/) license (also known as "CC BY"). This license allows you to use the sounds for free, even in commercial projects, as long as you credit the creator by including a bit of attribution text along with your music. For example, you might include the text in a caption on your website, in the album notes or in a credits roll (or any ["reasonable manner"](https://creativecommons.org/licenses/by/4.0/legalcode.en#s3a2)). The music that you create with sounds under this license is yours: you can sell it, stream it, relicense it or give it away; you are just required to credit the sound's creator. For some people, giving attribution is a deal-breaker. But here's some reasons why it might not be so bad: - Attributions can support the creators of sounds - providing them with recognition, traffic, and potential customers. - Sharing where your sounds come from helps other musicians find great sounds too - increasing the quality of music everywhere. - Attributions can look professional and show a high level of care in your work. ## How Floe helps Floe makes it dead-easy to comply with attribution requirements. When you load a sound from a library that requires attribution, Floe will show a small icon in the top of the window. Clicking this will show you the exact text that you can copy-and-paste wherever you need to. Floe tracks all attribution requirements across all instances of Floe, so you only need to do it once. ![Attribution GUI](/assets/images/attributions-gui-d88fd4073e51e72bb4c0817c718e0618.png) _Example of the attribution GUI in Floe_ ## Disclaimer Whilst this page is based on careful research and understanding of the topic, it is not legal advice. --- # Autosave > How Floe's autosave feature works and how to use it Floe reduces the chance of you losing your work by automatically saving its state frequently. Autosaves are useful if either Floe or the DAW crashes unexpectedly — hopefully a very rare occurrence. But they're also useful for other reasons such as accidentally removing a track, or changing parameters in a way you didn't intend. Every instance of Floe has an auto-generated name, for example: dawn-205. You can see this in the top panel of Floe's window. This is useful because it helps identify which instance of Floe an autosave came from so that you can correctly restore it. Autosave files also contain the date and time they were created. The autosave feature has reasonable default settings, but you can edit them in the Preferences panel too. Autosaves are just preset files. You can load them as you would a preset file. Autosaves can be found here: - Windows: `C:\Users\Public\Floe\Autosaves` - macOS: `/Users/Shared/Floe/Autosaves` - Linux: `~/Floe/Autosaves` Some additional things to note: - The autosave system is efficient - it shouldn't noticeably slow your computer down. - Floe will automatically delete autosaves older than a given number of days. - Floe will only keep a certain number of autosaves per instance. If the limit is reached, the oldest autosave will be deleted to make room for the new one. - Autosaves are tiny files, typically around 2 Kb in size. Your computer won't run out of space because of them. In the future we'd like to add a friendly interface for browsing and restoring autosaves. --- # Error Reporting > How Floe handles error reporting and feedback Floe strives to be reliable for professional work. To help us achieve this we have various systems in place. ## Error reports If Floe detects that something has gone wrong, it will submit a totally anonymous error report to us. This report contains information about the error, the state of Floe leading up to the error, and information about the computer Floe is running on. This enables us to get the key information to fix bugs quickly without having to get you to manually gather and send us information. You can disable all online reporting in the Preferences panel if you wish. Floe is open source, so you can also inspect the code to see how this works. ## Send feedback Floe has a form that you can use to submit bug reports, feature requests, or general feedback. This is found by clicking on the 'Send Feedback' button in the three-dots menu at the top of Floe's window. Please use this to report any issues you encounter. We want to know about it and want to fix it. ## Crash protection Floe tries to never crash the host. If Floe detects that something has gone wrong, it will enter an unresponsive mode rather than crashing the host. It won't produce any sound and it can't be interacted with. In this rare situation, make note of the instance name at the top of Floe's window, such as 'dawn-205'. Then, remove the plugin from your DAW and re-add it. You can then restore your work from an [autosave](/docs/beta/reference/autosave) with the instance name you just noted. Anonymous crash information will usually be reported to us automatically for us to address the issue. --- # File Locations > Quick reference guide for where Floe stores its files on Windows, macOS, and Linux This page provides a quick reference for where Floe creates and stores its files on your system. Windows macOS Linux ## Public files - Default sample libraries folder: `C:\Users\Public\Floe\Libraries\` - Default presets folder: `C:\Users\Public\Floe\Presets\` - Preferences: `C:\Users\Public\Floe\Preferences\floe.ini` - Autosaves: `C:\Users\Public\Floe\Autosaves\` ## Plugins - CLAP plugin: `C:\Program Files\Common Files\CLAP\Floe.clap` - VST3 plugin: `C:\Program Files\Common Files\VST3\Floe.vst3` ## Auxiliary files - Persistent store: `%APPDATA%\Floe\persistent_store` - Device ID: `%APPDATA%\Floe\device_id` - Logs: `%LOCALAPPDATA%\Floe\Logs\` ## Mirage files These are only relevant if you used to have [Mirage](/docs/beta/about-the-project/mirage) installed. - Preferences: `C:\ProgramData\Mirage\Settings\mirage.json` - Preferences (alternate): `C:\Users\\AppData\Local\FrozenPlain\Mirage\mirage.json` - VST2: `C:\Program Files\VSTPlugins\mirage64.dll` - VST2 (alternate): `C:\Program Files\Steinberg\VSTPlugins\mirage64.dll` - VST2 (alternate): `C:\Program Files\Common Files\VST2\mirage64.dll` - VST2 (alternate): `C:\Program Files\Common Files\Steinberg\VST2\mirage64.dll` ## Notes Auxiliary files can be deleted at any time (although you may have to re-set some preferences) - they will be recreated by Floe the next time it starts up. `floe.ini` is user-editable. We currently do not have have documentation for its contents. But the mechanisms are in place: changes you make to this file are instantly reflected in Floe. Floe's UI preferences panel also edits this file. `persistent_store` is a small binary file for storing things that are preferable to persist between sessions. `device_id` is a randomly generated ID that we use when error-reporting is switched on so that we can identify 'devices' and get data on the error/crash rate of our releases. Logs are small diagnostic text files that can be useful when troubleshooting issues. --- # Instruments > Instruments are Floe's core building block An instrument is a playable sound source. It might be something like 'Upright Piano' or 'Ambient Drone'. It might be a single sample that loops, or a multisampled instrument with many samples mapped across the keyboard along with velocity layers and round robins. Instruments are loaded into any of Floe's 3 [layers](/docs/beta/usage/layers) using a powerful _[browser](/docs/beta/usage/browsers)_ which lets you easily find instruments across all your installed libraries. A layer that has no instrument loaded will say 'None' instead of the instrument name - click this to open the browser. Instruments are provided via sample libraries, developed using Floe's open developer tools. --- # Legacy Parameters > How Floe ensures backwards compatibility ## At a glance Sometimes when loading an old DAW project some parameters on Floe might have exclamation icons next to them - don't panic! Your sound is perfectly safe and stable. What's happened is that an update Floe has added new parameters. The old parameter still exists and works the same but it's hidden out of sight - that's what the exclamation means. To resolve, you have 2 options: - Do nothing! If you don't need to further edit the preset, you can just leave it with the legacy parameters. Floe is stable in this state and sounds identical to when it was saved. - Update or 'modernise' the legacy parameter. Do this if you want to edit the preset further. It will allow you to use the main UI and new parameters without the icons blocking you. Modernisation performs a lossless migration from the old parameter to the new version. It's normally perfectly safe to do this but there's a couple of important caveats. Please read below. ## Overview Floe strives for perfect backwards compatibility: a preset or DAW project saved with any version of Floe will load up sounding exactly the same in any later version. To make this possible without dragging an ever-growing pile of outdated UI into the main interface, Floe **never deletes a parameter**. When a parameter needs to change, we add a new parameter to the main UI and move the old one out of sight as a "legacy" parameter that quietly keeps doing its old job. ## When does a parameter become legacy? A parameter becomes legacy when we change it in a way that would otherwise alter how an existing project sounds. We try to keep this to a minimum. Common reasons: - **Adding new options to a menu** — for example, new LFO shapes, new filter types, or new modes for monophonic voice behaviour. Automation written against the old menu would land on different values in a wider menu, so we add a new menu parameter and keep the old one for compatibility. - **Improving a parameter's feel** — adjusting how the knob's position maps to the audible value so the response is better spread across the range, or has a more intuitive projection at low or high values. - **Combining or simplifying** several controls into one, where the new control isn't a 1-to-1 substitute for any single old one. In every case the old parameter stays alive behind the scenes so your projects sound the same, and a new modern parameter appears on the main UI. ## Presets vs. DAW projects When you load a **preset**, Floe typically automatically modernises any legacy values it finds: the audibly-equivalent value is copied onto the modern parameter and the legacy slot is cleared. You'll see no legacy parameters and the modern UI controls work as expected. When you load a **DAW project**, Floe can't modernise automatically because _it has no way of knowing whether your DAW is automating a legacy parameter_ — silently changing the target would break your automation. So instead, Floe keeps the legacy value intact, lets the legacy parameter override its modern equivalent, and shows a small yellow warning badge on the affected control. The Legacy Parameters panel (accessible from the 3-dots menu) lists every legacy parameter that is currently overriding a modern control. ## What the modern control looks like while overridden While a legacy override is in effect, the modern control on the main UI is **greyed out and not interactive** — there's no point dragging it because the legacy value is what reaches the audio engine. The yellow warning badge in its corner is clickable; it opens the Legacy Parameters panel directly. The control's knob position and any associated visualisers (filter response curves, EQ displays, envelope shapes, etc.) reflect the _modern_ parameter's underlying value, not the legacy value driving the audio. **The sound you hear is correct** — it's the legacy value being applied — but the on-screen position and graphics show the modern parameter underneath. Once the override is cleared, the display, interactivity and audio all match up again. ## Modernising a legacy parameter "Modernisting" (or "updating") hands control over from the legacy parameter to its modern replacement, copying across an audibly-equivalent value so the sound doesn't change. The Legacy Parameters panel offers two ways to do this: - **Update all** — modernises every overriding parameter at once. - **Update (per row)** — modernises a single parameter. Your project will sound exactly as it did before, and from then on the modern control on the main UI is live again. If you have any DAW automation targeting one of these parameters, **don't modernise it without first removing or re-creating that automation**: Floe decides whether a legacy parameter is "overriding" purely by checking whether its value is at the default, so live automation will re-engage the override the moment it writes a non-default value, and the modern control will go unresponsive again. The recommended order: 1. **Check your DAW** for any automation lanes targeting the legacy parameter. 2. If there is automation, **delete it in your DAW** (and, if you still want that automation, recreate it on the modern parameter). 3. Open the Legacy Parameters panel and click **Modernise** (per row) or **Modernise all**. If you have no DAW automation on a legacy parameter, you can skip step 2 — modernising is then completely safe. --- # Parameters > A list of all parameters in Floe ## Shorten parameter names In your DAW, the names of Floe's parameters are long and descriptive, such as "Effect Distortion On". You can switch to abbreviated names if you need the names to show in a smaller width, for example, "Dist On". Enable this option on Floe's preferences panel. You might need to close and re-open your DAW for this change to take effect. ## Parameter table For reference purposes, this section lists all of Floe's parameters in case you need to look up specific IDs or details. For more of a usage guide, consult the documentation pages on layers, effects, looping, etc. | Module | Name | ID | Abbreviated Name | Description | | --- | --- | --- | --- | --- | | Layer 1 | Volume | 160 | L1 Volume | Layer volume | | Layer 1 | Mute | 161 | L1 Mute | Mute this layer | | Layer 1 | Solo | 162 | L1 Solo | Mute all other layers | | Layer 1 | Pan | 163 | L1 Pan | Left/right balance | | Layer 1 | Detune Cents | 164 | L1 Detune Cents | Layer pitch in cents; hold shift for finer adjustment | | Layer 1 | Pitch Semitones | 165 | L1 Pitch Semitones | Layer pitch in semitones | | Layer 1/Playback/Loop | Start | 167 | L1Lp Start | Loop-start | | Layer 1/Playback/Loop | End | 168 | L1Lp End | Loop-end | | Layer 1/Playback/Loop | Crossfade Size | 169 | L1Lp Crossfade Size | Crossfade length; this smooths the transition from the loop-end to the loop-start | | Layer 1/Playback/Loop | Sample Start Offset | 171 | L1Lp Sample Start Offset | Change the starting point of the sample | | Layer 1/Playback/Loop | Reverse On | 172 | L1Lp Reverse On | Play the sound in reverse | | Layer 1/Main/Volume Envelope | On | 173 | L1Vol On | Enable/disable the volume envelope; when disabled, each sound will play out entirely | | Layer 1/Main/Volume Envelope | Attack | 174 | L1Vol Attack | Volume fade-in length | | Layer 1/Main/Volume Envelope | Decay | 175 | L1Vol Decay | Volume ramp-down length (after the attack) | | Layer 1/Main/Volume Envelope | Sustain | 176 | L1Vol Sustain | Volume level to sustain (after decay) | | Layer 1/Main/Volume Envelope | Release | 177 | L1Vol Release | Volume fade-out length (after the note is released) | | Layer 1/Main/Filter | On | 178 | L1Filt On | Enable/disable the filter | | Layer 1/Main/Filter | Legacy Cutoff Frequency | 179 | L1Filt Legacy Cutoff Frequency | Legacy cutoff parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/Main/Filter | Legacy Resonance | 180 | L1Filt Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/Main/Filter | Legacy Type | 181 | L1Filt Legacy Type | Legacy filter type parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/Main/Filter | Envelope Amount | 182 | L1Filt Envelope Amount | How strongly the envelope should control the filter cutoff | | Layer 1/Main/Filter | Attack | 183 | L1Filt Attack | Length of initial ramp-up | | Layer 1/Main/Filter | Decay | 184 | L1Filt Decay | Length ramp-down after attack | | Layer 1/Main/Filter | Sustain | 185 | L1Filt Sustain | Level to sustain after decay has completed | | Layer 1/Main/Filter | Release | 186 | L1Filt Release | Length of ramp-down after note is released | | Layer 1/LFO | On | 187 | L1Lfo On | Enable/disable the Low Frequency Oscillator (LFO) | | Layer 1/LFO | Legacy Shape | 188 | L1Lfo Legacy Shape | Legacy LFO shape parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/LFO | Mode | 189 | L1Lfo Mode | Oscillator phase mode. Retrigger: each voice has its own phase, Free: all voices that are playing simultaneously will have the same phase | | Layer 1/LFO | Amount | 190 | L1Lfo Amount | Intensity of the LFO effect | | Layer 1/LFO | Target (Legacy) | 191 | L1Lfo Target (Legacy) | Legacy LFO target parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/LFO | Time (Tempo Synced) | 192 | L1Lfo Time (Tempo Synced) | LFO rate (synced to the host) | | Layer 1/LFO | Time (Hz) | 193 | L1Lfo Time (Hz) | LFO rate (in Hz) | | Layer 1/LFO | Sync On | 194 | L1Lfo Sync On | Sync the LFO speed to the host | | Layer 1/EQ | On | 195 | L1Eq On | Turn on or off the equaliser effect for this layer | | Layer 1/EQ/Band 1 | Legacy Frequency | 196 | L1EqB1 Legacy Frequency | Legacy band 1 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/EQ/Band 1 | Legacy Resonance | 197 | L1EqB1 Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/EQ/Band 1 | Gain | 198 | L1EqB1 Gain | Band 1: volume gain at the frequency | | Layer 1/EQ/Band 1 | Legacy Type | 199 | L1EqB1 Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/EQ/Band 2 | Legacy Frequency | 200 | L1EqB2 Legacy Frequency | Legacy band 2 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/EQ/Band 2 | Legacy Resonance | 201 | L1EqB2 Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/EQ/Band 2 | Gain | 202 | L1EqB2 Gain | Band 2: volume gain at the frequency | | Layer 1/EQ/Band 2 | Legacy Type | 203 | L1EqB2 Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/Config | Legacy Velocity Mapping | 204 | L1 Legacy Velocity Mapping | Choose how MIDI velocity should affect the volume of this layer. There are 6 modes that can be selected for this parameter via the buttons on the GUI. By setting one layer to be quiet at high velocities and another layer to be quiet at low velocities you can create an instrument that sounds different based on how hard the notes are played. (0) Ignore velocity, always play full volume. (1) Loudest at high velocity, quietist at low velocity (2) Loudest at low velocity, quietist at high velocity (3) Loudest at high velocity, quietist at middle velocity and below (4) Loudest at middle velocity, quietist at both high and low velocities (5) Loudest at bottom velocity, quietist at middle velocity and above, | | Layer 1/Config | Keytrack On | 205 | L1 Keytrack On | Tune the sound to match the key played; if disabled it will always play the sound at its root pitch | | Layer 1/Config | Legacy Monophonic On | 206 | L1 Legacy Monophonic On | Only allow one voice of each sound to play at a time | | Layer 1/Config | MIDI Transpose On | 208 | L1 MIDI Transpose On | Transpose the mapping of samples by the given semitone offset, meaning a higher/lower sample may be triggered instead of stretching/shrinking the audio by large amounts (only useful if the instrument is multi-sampled) | | Layer 1/Playback/Loop | Loop Mode | 209 | L1Lp Loop Mode | The mode for looping the samples | | Layer 1/Config | Key Range Low | 210 | L1 Key Range Low | The lowest key that will trigger this layer; if the key is lower than this, the layer will not play | | Layer 1/Config | Key Range High | 211 | L1 Key Range High | The highest key that will trigger this layer; if the key is higher than this, the layer will not play | | Layer 1/Config | Key Range Low Fade | 212 | L1 Key Range Low Fade | The length of the volume fade-in at the low end of the key range | | Layer 1/Config | Key Range High Fade | 213 | L1 Key Range High Fade | The length of the volume fade-out at the high end of the key range | | Layer 1/Config | Pitch Bend Range | 214 | L1 Pitch Bend Range | The pitch range in semitones of the MIDI pitch wheel | | Layer 1/Config | Monophonic Mode | 215 | L1 Monophonic Mode | Control voice behavior when notes overlap. Off: multiple voices play simultaneously (polyphonic). Retrigger: new notes stop previous notes. Latch: first note plays until all keys are released, new notes are ignored | | Layer 1/Playback | Play Mode | 216 | L1 Play Mode | How this layer plays its samples | | Layer 1/Playback/Granular | Length | 217 | L1Grn Length | Duration of each grain snippet | | Layer 1/Playback/Granular | Speed | 218 | L1Grn Speed | How fast the grain position moves through the sample | | Layer 1/Playback/Granular | Position | 219 | L1Grn Position | Where in the sample grains are sourced from | | Layer 1/Playback/Granular | Density | 220 | L1Grn Density | Controls how densely grains overlap, relative to the grain length. At the midpoint, grains play end-to-end. Lower values add gaps between grains for a sparse texture; higher values make grains overlap for a denser, richer sound | | Layer 1/Playback/Granular | Spread | 221 | L1Grn Spread | Region around the playhead where grains can start from. Small values focus grains near the playhead, large values spread them across a wider area | | Layer 1/Playback/Granular | Smooth | 222 | L1Grn Smooth | Crossfade between grains to remove clicks. Low is hard cuts, high is full overlap fade | | Layer 1/Playback/Granular | Pan | 223 | L1Grn Pan | Randomise the stereo position of each grain. At 0% all grains play centred, at 100% grains can be panned anywhere from fully left to fully right | | Layer 1/Playback/Granular | Detune | 224 | L1Grn Detune | Randomise the pitch of each grain. At 0% all grains play at the original pitch, at 100% grains can be detuned up to a semitone up or down | | Layer 1/Playback/Granular | Direction | 225 | L1Grn Direction | Chance that grains spawn playing in the opposite direction to the main playhead. At 0% all grains play in the main direction, at 100% there's a 50/50 chance of each grain playing forwards or backwards | | Layer 1/Playback/Granular | Harmony | 226 | L1Grn Harmony | Chance that grains spawn at one of the selected harmony intervals instead of the root pitch. Configure which intervals are active using the Intervals button | | Layer 1/LFO | Legacy Shape V2 | 227 | L1Lfo Legacy Shape V2 | Legacy LFO shape parameter (v2). Kept for backwards-compatibility with DAW automation | | Layer 1/LFO | Target | 228 | L1Lfo Target | The parameter that the LFO will modulate | | Layer 1/Main/Filter | Resonance | 229 | L1Filt Resonance | The intensity of the volume peak at the cutoff frequency | | Layer 1/Arp | Note Order | 230 | L1Arp Note Order | Order in which held notes are played | | Layer 1/Arp | Trigger | 231 | L1Arp Trigger | Free: arpeggiator keeps running when new notes are pressed. Retrigger: arpeggiator restarts from step 1 | | Layer 1/Arp | Rate | 232 | L1Arp Rate | Arpeggiator rate (synced to host tempo) | | Layer 1/Arp | Length | 233 | L1Arp Length | Number of active steps in the arpeggiator pattern | | Layer 1/Arp | Arpeggiator Mode | 234 | L1Arp Arpeggiator Mode | Played Notes: arpeggiates held notes. Fixed Notes: plays a recorded note sequence | | Layer 1/Arp | Humanise | 235 | L1Arp Humanise | Add random timing variation to note starts and velocity. Higher values create looser, more human-like performance | | Layer 1/Arp | Auto Rate | 236 | L1Arp Auto Rate | Let Floe decide the rate so that the loop plays near to its original recorded rate rather than having to add large silent gaps between slices. The rate that Floe chooses varies depending on your host tempo. | | Layer 1/Arp | Polyrate | 237 | L1Arp Polyrate | Each octave plays at a different rate. Double means each octave up is 2x faster. 3:2 and 4:3 create polyrhythmic relationships between octaves | | Layer 1/Arp | One Shot | 238 | L1Arp One Shot | When enabled, the arpeggiator plays through the sequence once and then stops instead of looping | | Layer 1/EQ/Band 1 | Resonance | 239 | L1EqB1 Resonance | Band 1: sharpness of the peak | | Layer 1/EQ/Band 2 | Resonance | 240 | L1EqB2 Resonance | Band 2: sharpness of the peak | | Layer 1/Arp | Arpeggiator | 241 | L1Arp Arpeggiator | Enable/disable the arpeggiator | | Layer 1/LFO | Shape | 242 | L1Lfo Shape | Oscillator shape, including random and percussive waveforms | | Layer 1/EQ/Band 1 | Type | 244 | L1EqB1 Type | Band 1: type of EQ band | | Layer 1/EQ/Band 2 | Type | 245 | L1EqB2 Type | Band 2: type of EQ band | | Layer 1/EQ/Band 3 | Legacy Frequency | 246 | L1EqB3 Legacy Frequency | Legacy band 3 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/EQ/Band 3 | Resonance | 247 | L1EqB3 Resonance | Band 3: sharpness of the peak | | Layer 1/EQ/Band 3 | Gain | 248 | L1EqB3 Gain | Band 3: volume gain at the frequency | | Layer 1/EQ/Band 3 | Type | 249 | L1EqB3 Type | Band 3: type of EQ band | | Layer 1/Main/Filter | Cutoff Frequency | 250 | L1Filt Cutoff Frequency | The frequency at which the filter should take effect | | Layer 1/EQ/Band 1 | Frequency | 251 | L1EqB1 Frequency | Band 1: frequency of this band | | Layer 1/EQ/Band 2 | Frequency | 252 | L1EqB2 Frequency | Band 2: frequency of this band | | Layer 1/EQ/Band 3 | Frequency | 253 | L1EqB3 Frequency | Band 3: frequency of this band | | Layer 1/Main/Filter | Type | 254 | L1Filt Type | Filter type | | Layer 1 | Stereo Width | 255 | L1 Stereo Width | Layer stereo width: negative narrows toward mono, positive widens | | Layer 2 | Volume | 320 | L2 Volume | Layer volume | | Layer 2 | Mute | 321 | L2 Mute | Mute this layer | | Layer 2 | Solo | 322 | L2 Solo | Mute all other layers | | Layer 2 | Pan | 323 | L2 Pan | Left/right balance | | Layer 2 | Detune Cents | 324 | L2 Detune Cents | Layer pitch in cents; hold shift for finer adjustment | | Layer 2 | Pitch Semitones | 325 | L2 Pitch Semitones | Layer pitch in semitones | | Layer 2/Playback/Loop | Start | 327 | L2Lp Start | Loop-start | | Layer 2/Playback/Loop | End | 328 | L2Lp End | Loop-end | | Layer 2/Playback/Loop | Crossfade Size | 329 | L2Lp Crossfade Size | Crossfade length; this smooths the transition from the loop-end to the loop-start | | Layer 2/Playback/Loop | Sample Start Offset | 331 | L2Lp Sample Start Offset | Change the starting point of the sample | | Layer 2/Playback/Loop | Reverse On | 332 | L2Lp Reverse On | Play the sound in reverse | | Layer 2/Main/Volume Envelope | On | 333 | L2Vol On | Enable/disable the volume envelope; when disabled, each sound will play out entirely | | Layer 2/Main/Volume Envelope | Attack | 334 | L2Vol Attack | Volume fade-in length | | Layer 2/Main/Volume Envelope | Decay | 335 | L2Vol Decay | Volume ramp-down length (after the attack) | | Layer 2/Main/Volume Envelope | Sustain | 336 | L2Vol Sustain | Volume level to sustain (after decay) | | Layer 2/Main/Volume Envelope | Release | 337 | L2Vol Release | Volume fade-out length (after the note is released) | | Layer 2/Main/Filter | On | 338 | L2Filt On | Enable/disable the filter | | Layer 2/Main/Filter | Legacy Cutoff Frequency | 339 | L2Filt Legacy Cutoff Frequency | Legacy cutoff parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/Main/Filter | Legacy Resonance | 340 | L2Filt Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/Main/Filter | Legacy Type | 341 | L2Filt Legacy Type | Legacy filter type parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/Main/Filter | Envelope Amount | 342 | L2Filt Envelope Amount | How strongly the envelope should control the filter cutoff | | Layer 2/Main/Filter | Attack | 343 | L2Filt Attack | Length of initial ramp-up | | Layer 2/Main/Filter | Decay | 344 | L2Filt Decay | Length ramp-down after attack | | Layer 2/Main/Filter | Sustain | 345 | L2Filt Sustain | Level to sustain after decay has completed | | Layer 2/Main/Filter | Release | 346 | L2Filt Release | Length of ramp-down after note is released | | Layer 2/LFO | On | 347 | L2Lfo On | Enable/disable the Low Frequency Oscillator (LFO) | | Layer 2/LFO | Legacy Shape | 348 | L2Lfo Legacy Shape | Legacy LFO shape parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/LFO | Mode | 349 | L2Lfo Mode | Oscillator phase mode. Retrigger: each voice has its own phase, Free: all voices that are playing simultaneously will have the same phase | | Layer 2/LFO | Amount | 350 | L2Lfo Amount | Intensity of the LFO effect | | Layer 2/LFO | Target (Legacy) | 351 | L2Lfo Target (Legacy) | Legacy LFO target parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/LFO | Time (Tempo Synced) | 352 | L2Lfo Time (Tempo Synced) | LFO rate (synced to the host) | | Layer 2/LFO | Time (Hz) | 353 | L2Lfo Time (Hz) | LFO rate (in Hz) | | Layer 2/LFO | Sync On | 354 | L2Lfo Sync On | Sync the LFO speed to the host | | Layer 2/EQ | On | 355 | L2Eq On | Turn on or off the equaliser effect for this layer | | Layer 2/EQ/Band 1 | Legacy Frequency | 356 | L2EqB1 Legacy Frequency | Legacy band 1 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/EQ/Band 1 | Legacy Resonance | 357 | L2EqB1 Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/EQ/Band 1 | Gain | 358 | L2EqB1 Gain | Band 1: volume gain at the frequency | | Layer 2/EQ/Band 1 | Legacy Type | 359 | L2EqB1 Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/EQ/Band 2 | Legacy Frequency | 360 | L2EqB2 Legacy Frequency | Legacy band 2 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/EQ/Band 2 | Legacy Resonance | 361 | L2EqB2 Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/EQ/Band 2 | Gain | 362 | L2EqB2 Gain | Band 2: volume gain at the frequency | | Layer 2/EQ/Band 2 | Legacy Type | 363 | L2EqB2 Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/Config | Legacy Velocity Mapping | 364 | L2 Legacy Velocity Mapping | Choose how MIDI velocity should affect the volume of this layer. There are 6 modes that can be selected for this parameter via the buttons on the GUI. By setting one layer to be quiet at high velocities and another layer to be quiet at low velocities you can create an instrument that sounds different based on how hard the notes are played. (0) Ignore velocity, always play full volume. (1) Loudest at high velocity, quietist at low velocity (2) Loudest at low velocity, quietist at high velocity (3) Loudest at high velocity, quietist at middle velocity and below (4) Loudest at middle velocity, quietist at both high and low velocities (5) Loudest at bottom velocity, quietist at middle velocity and above, | | Layer 2/Config | Keytrack On | 365 | L2 Keytrack On | Tune the sound to match the key played; if disabled it will always play the sound at its root pitch | | Layer 2/Config | Legacy Monophonic On | 366 | L2 Legacy Monophonic On | Only allow one voice of each sound to play at a time | | Layer 2/Config | MIDI Transpose On | 368 | L2 MIDI Transpose On | Transpose the mapping of samples by the given semitone offset, meaning a higher/lower sample may be triggered instead of stretching/shrinking the audio by large amounts (only useful if the instrument is multi-sampled) | | Layer 2/Playback/Loop | Loop Mode | 369 | L2Lp Loop Mode | The mode for looping the samples | | Layer 2/Config | Key Range Low | 370 | L2 Key Range Low | The lowest key that will trigger this layer; if the key is lower than this, the layer will not play | | Layer 2/Config | Key Range High | 371 | L2 Key Range High | The highest key that will trigger this layer; if the key is higher than this, the layer will not play | | Layer 2/Config | Key Range Low Fade | 372 | L2 Key Range Low Fade | The length of the volume fade-in at the low end of the key range | | Layer 2/Config | Key Range High Fade | 373 | L2 Key Range High Fade | The length of the volume fade-out at the high end of the key range | | Layer 2/Config | Pitch Bend Range | 374 | L2 Pitch Bend Range | The pitch range in semitones of the MIDI pitch wheel | | Layer 2/Config | Monophonic Mode | 375 | L2 Monophonic Mode | Control voice behavior when notes overlap. Off: multiple voices play simultaneously (polyphonic). Retrigger: new notes stop previous notes. Latch: first note plays until all keys are released, new notes are ignored | | Layer 2/Playback | Play Mode | 376 | L2 Play Mode | How this layer plays its samples | | Layer 2/Playback/Granular | Length | 377 | L2Grn Length | Duration of each grain snippet | | Layer 2/Playback/Granular | Speed | 378 | L2Grn Speed | How fast the grain position moves through the sample | | Layer 2/Playback/Granular | Position | 379 | L2Grn Position | Where in the sample grains are sourced from | | Layer 2/Playback/Granular | Density | 380 | L2Grn Density | Controls how densely grains overlap, relative to the grain length. At the midpoint, grains play end-to-end. Lower values add gaps between grains for a sparse texture; higher values make grains overlap for a denser, richer sound | | Layer 2/Playback/Granular | Spread | 381 | L2Grn Spread | Region around the playhead where grains can start from. Small values focus grains near the playhead, large values spread them across a wider area | | Layer 2/Playback/Granular | Smooth | 382 | L2Grn Smooth | Crossfade between grains to remove clicks. Low is hard cuts, high is full overlap fade | | Layer 2/Playback/Granular | Pan | 383 | L2Grn Pan | Randomise the stereo position of each grain. At 0% all grains play centred, at 100% grains can be panned anywhere from fully left to fully right | | Layer 2/Playback/Granular | Detune | 384 | L2Grn Detune | Randomise the pitch of each grain. At 0% all grains play at the original pitch, at 100% grains can be detuned up to a semitone up or down | | Layer 2/Playback/Granular | Direction | 385 | L2Grn Direction | Chance that grains spawn playing in the opposite direction to the main playhead. At 0% all grains play in the main direction, at 100% there's a 50/50 chance of each grain playing forwards or backwards | | Layer 2/Playback/Granular | Harmony | 386 | L2Grn Harmony | Chance that grains spawn at one of the selected harmony intervals instead of the root pitch. Configure which intervals are active using the Intervals button | | Layer 2/LFO | Legacy Shape V2 | 387 | L2Lfo Legacy Shape V2 | Legacy LFO shape parameter (v2). Kept for backwards-compatibility with DAW automation | | Layer 2/LFO | Target | 388 | L2Lfo Target | The parameter that the LFO will modulate | | Layer 2/Main/Filter | Resonance | 389 | L2Filt Resonance | The intensity of the volume peak at the cutoff frequency | | Layer 2/Arp | Note Order | 390 | L2Arp Note Order | Order in which held notes are played | | Layer 2/Arp | Trigger | 391 | L2Arp Trigger | Free: arpeggiator keeps running when new notes are pressed. Retrigger: arpeggiator restarts from step 1 | | Layer 2/Arp | Rate | 392 | L2Arp Rate | Arpeggiator rate (synced to host tempo) | | Layer 2/Arp | Length | 393 | L2Arp Length | Number of active steps in the arpeggiator pattern | | Layer 2/Arp | Arpeggiator Mode | 394 | L2Arp Arpeggiator Mode | Played Notes: arpeggiates held notes. Fixed Notes: plays a recorded note sequence | | Layer 2/Arp | Humanise | 395 | L2Arp Humanise | Add random timing variation to note starts and velocity. Higher values create looser, more human-like performance | | Layer 2/Arp | Auto Rate | 396 | L2Arp Auto Rate | Let Floe decide the rate so that the loop plays near to its original recorded rate rather than having to add large silent gaps between slices. The rate that Floe chooses varies depending on your host tempo. | | Layer 2/Arp | Polyrate | 397 | L2Arp Polyrate | Each octave plays at a different rate. Double means each octave up is 2x faster. 3:2 and 4:3 create polyrhythmic relationships between octaves | | Layer 2/Arp | One Shot | 398 | L2Arp One Shot | When enabled, the arpeggiator plays through the sequence once and then stops instead of looping | | Layer 2/EQ/Band 1 | Resonance | 399 | L2EqB1 Resonance | Band 1: sharpness of the peak | | Layer 2/EQ/Band 2 | Resonance | 400 | L2EqB2 Resonance | Band 2: sharpness of the peak | | Layer 2/Arp | Arpeggiator | 401 | L2Arp Arpeggiator | Enable/disable the arpeggiator | | Layer 2/LFO | Shape | 402 | L2Lfo Shape | Oscillator shape, including random and percussive waveforms | | Layer 2/EQ/Band 1 | Type | 404 | L2EqB1 Type | Band 1: type of EQ band | | Layer 2/EQ/Band 2 | Type | 405 | L2EqB2 Type | Band 2: type of EQ band | | Layer 2/EQ/Band 3 | Legacy Frequency | 406 | L2EqB3 Legacy Frequency | Legacy band 3 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/EQ/Band 3 | Resonance | 407 | L2EqB3 Resonance | Band 3: sharpness of the peak | | Layer 2/EQ/Band 3 | Gain | 408 | L2EqB3 Gain | Band 3: volume gain at the frequency | | Layer 2/EQ/Band 3 | Type | 409 | L2EqB3 Type | Band 3: type of EQ band | | Layer 2/Main/Filter | Cutoff Frequency | 410 | L2Filt Cutoff Frequency | The frequency at which the filter should take effect | | Layer 2/EQ/Band 1 | Frequency | 411 | L2EqB1 Frequency | Band 1: frequency of this band | | Layer 2/EQ/Band 2 | Frequency | 412 | L2EqB2 Frequency | Band 2: frequency of this band | | Layer 2/EQ/Band 3 | Frequency | 413 | L2EqB3 Frequency | Band 3: frequency of this band | | Layer 2/Main/Filter | Type | 414 | L2Filt Type | Filter type | | Layer 2 | Stereo Width | 415 | L2 Stereo Width | Layer stereo width: negative narrows toward mono, positive widens | | Layer 3 | Volume | 480 | L3 Volume | Layer volume | | Layer 3 | Mute | 481 | L3 Mute | Mute this layer | | Layer 3 | Solo | 482 | L3 Solo | Mute all other layers | | Layer 3 | Pan | 483 | L3 Pan | Left/right balance | | Layer 3 | Detune Cents | 484 | L3 Detune Cents | Layer pitch in cents; hold shift for finer adjustment | | Layer 3 | Pitch Semitones | 485 | L3 Pitch Semitones | Layer pitch in semitones | | Layer 3/Playback/Loop | Start | 487 | L3Lp Start | Loop-start | | Layer 3/Playback/Loop | End | 488 | L3Lp End | Loop-end | | Layer 3/Playback/Loop | Crossfade Size | 489 | L3Lp Crossfade Size | Crossfade length; this smooths the transition from the loop-end to the loop-start | | Layer 3/Playback/Loop | Sample Start Offset | 491 | L3Lp Sample Start Offset | Change the starting point of the sample | | Layer 3/Playback/Loop | Reverse On | 492 | L3Lp Reverse On | Play the sound in reverse | | Layer 3/Main/Volume Envelope | On | 493 | L3Vol On | Enable/disable the volume envelope; when disabled, each sound will play out entirely | | Layer 3/Main/Volume Envelope | Attack | 494 | L3Vol Attack | Volume fade-in length | | Layer 3/Main/Volume Envelope | Decay | 495 | L3Vol Decay | Volume ramp-down length (after the attack) | | Layer 3/Main/Volume Envelope | Sustain | 496 | L3Vol Sustain | Volume level to sustain (after decay) | | Layer 3/Main/Volume Envelope | Release | 497 | L3Vol Release | Volume fade-out length (after the note is released) | | Layer 3/Main/Filter | On | 498 | L3Filt On | Enable/disable the filter | | Layer 3/Main/Filter | Legacy Cutoff Frequency | 499 | L3Filt Legacy Cutoff Frequency | Legacy cutoff parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/Main/Filter | Legacy Resonance | 500 | L3Filt Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/Main/Filter | Legacy Type | 501 | L3Filt Legacy Type | Legacy filter type parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/Main/Filter | Envelope Amount | 502 | L3Filt Envelope Amount | How strongly the envelope should control the filter cutoff | | Layer 3/Main/Filter | Attack | 503 | L3Filt Attack | Length of initial ramp-up | | Layer 3/Main/Filter | Decay | 504 | L3Filt Decay | Length ramp-down after attack | | Layer 3/Main/Filter | Sustain | 505 | L3Filt Sustain | Level to sustain after decay has completed | | Layer 3/Main/Filter | Release | 506 | L3Filt Release | Length of ramp-down after note is released | | Layer 3/LFO | On | 507 | L3Lfo On | Enable/disable the Low Frequency Oscillator (LFO) | | Layer 3/LFO | Legacy Shape | 508 | L3Lfo Legacy Shape | Legacy LFO shape parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/LFO | Mode | 509 | L3Lfo Mode | Oscillator phase mode. Retrigger: each voice has its own phase, Free: all voices that are playing simultaneously will have the same phase | | Layer 3/LFO | Amount | 510 | L3Lfo Amount | Intensity of the LFO effect | | Layer 3/LFO | Target (Legacy) | 511 | L3Lfo Target (Legacy) | Legacy LFO target parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/LFO | Time (Tempo Synced) | 512 | L3Lfo Time (Tempo Synced) | LFO rate (synced to the host) | | Layer 3/LFO | Time (Hz) | 513 | L3Lfo Time (Hz) | LFO rate (in Hz) | | Layer 3/LFO | Sync On | 514 | L3Lfo Sync On | Sync the LFO speed to the host | | Layer 3/EQ | On | 515 | L3Eq On | Turn on or off the equaliser effect for this layer | | Layer 3/EQ/Band 1 | Legacy Frequency | 516 | L3EqB1 Legacy Frequency | Legacy band 1 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/EQ/Band 1 | Legacy Resonance | 517 | L3EqB1 Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/EQ/Band 1 | Gain | 518 | L3EqB1 Gain | Band 1: volume gain at the frequency | | Layer 3/EQ/Band 1 | Legacy Type | 519 | L3EqB1 Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/EQ/Band 2 | Legacy Frequency | 520 | L3EqB2 Legacy Frequency | Legacy band 2 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/EQ/Band 2 | Legacy Resonance | 521 | L3EqB2 Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/EQ/Band 2 | Gain | 522 | L3EqB2 Gain | Band 2: volume gain at the frequency | | Layer 3/EQ/Band 2 | Legacy Type | 523 | L3EqB2 Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/Config | Legacy Velocity Mapping | 524 | L3 Legacy Velocity Mapping | Choose how MIDI velocity should affect the volume of this layer. There are 6 modes that can be selected for this parameter via the buttons on the GUI. By setting one layer to be quiet at high velocities and another layer to be quiet at low velocities you can create an instrument that sounds different based on how hard the notes are played. (0) Ignore velocity, always play full volume. (1) Loudest at high velocity, quietist at low velocity (2) Loudest at low velocity, quietist at high velocity (3) Loudest at high velocity, quietist at middle velocity and below (4) Loudest at middle velocity, quietist at both high and low velocities (5) Loudest at bottom velocity, quietist at middle velocity and above, | | Layer 3/Config | Keytrack On | 525 | L3 Keytrack On | Tune the sound to match the key played; if disabled it will always play the sound at its root pitch | | Layer 3/Config | Legacy Monophonic On | 526 | L3 Legacy Monophonic On | Only allow one voice of each sound to play at a time | | Layer 3/Config | MIDI Transpose On | 528 | L3 MIDI Transpose On | Transpose the mapping of samples by the given semitone offset, meaning a higher/lower sample may be triggered instead of stretching/shrinking the audio by large amounts (only useful if the instrument is multi-sampled) | | Layer 3/Playback/Loop | Loop Mode | 529 | L3Lp Loop Mode | The mode for looping the samples | | Layer 3/Config | Key Range Low | 530 | L3 Key Range Low | The lowest key that will trigger this layer; if the key is lower than this, the layer will not play | | Layer 3/Config | Key Range High | 531 | L3 Key Range High | The highest key that will trigger this layer; if the key is higher than this, the layer will not play | | Layer 3/Config | Key Range Low Fade | 532 | L3 Key Range Low Fade | The length of the volume fade-in at the low end of the key range | | Layer 3/Config | Key Range High Fade | 533 | L3 Key Range High Fade | The length of the volume fade-out at the high end of the key range | | Layer 3/Config | Pitch Bend Range | 534 | L3 Pitch Bend Range | The pitch range in semitones of the MIDI pitch wheel | | Layer 3/Config | Monophonic Mode | 535 | L3 Monophonic Mode | Control voice behavior when notes overlap. Off: multiple voices play simultaneously (polyphonic). Retrigger: new notes stop previous notes. Latch: first note plays until all keys are released, new notes are ignored | | Layer 3/Playback | Play Mode | 536 | L3 Play Mode | How this layer plays its samples | | Layer 3/Playback/Granular | Length | 537 | L3Grn Length | Duration of each grain snippet | | Layer 3/Playback/Granular | Speed | 538 | L3Grn Speed | How fast the grain position moves through the sample | | Layer 3/Playback/Granular | Position | 539 | L3Grn Position | Where in the sample grains are sourced from | | Layer 3/Playback/Granular | Density | 540 | L3Grn Density | Controls how densely grains overlap, relative to the grain length. At the midpoint, grains play end-to-end. Lower values add gaps between grains for a sparse texture; higher values make grains overlap for a denser, richer sound | | Layer 3/Playback/Granular | Spread | 541 | L3Grn Spread | Region around the playhead where grains can start from. Small values focus grains near the playhead, large values spread them across a wider area | | Layer 3/Playback/Granular | Smooth | 542 | L3Grn Smooth | Crossfade between grains to remove clicks. Low is hard cuts, high is full overlap fade | | Layer 3/Playback/Granular | Pan | 543 | L3Grn Pan | Randomise the stereo position of each grain. At 0% all grains play centred, at 100% grains can be panned anywhere from fully left to fully right | | Layer 3/Playback/Granular | Detune | 544 | L3Grn Detune | Randomise the pitch of each grain. At 0% all grains play at the original pitch, at 100% grains can be detuned up to a semitone up or down | | Layer 3/Playback/Granular | Direction | 545 | L3Grn Direction | Chance that grains spawn playing in the opposite direction to the main playhead. At 0% all grains play in the main direction, at 100% there's a 50/50 chance of each grain playing forwards or backwards | | Layer 3/Playback/Granular | Harmony | 546 | L3Grn Harmony | Chance that grains spawn at one of the selected harmony intervals instead of the root pitch. Configure which intervals are active using the Intervals button | | Layer 3/LFO | Legacy Shape V2 | 547 | L3Lfo Legacy Shape V2 | Legacy LFO shape parameter (v2). Kept for backwards-compatibility with DAW automation | | Layer 3/LFO | Target | 548 | L3Lfo Target | The parameter that the LFO will modulate | | Layer 3/Main/Filter | Resonance | 549 | L3Filt Resonance | The intensity of the volume peak at the cutoff frequency | | Layer 3/Arp | Note Order | 550 | L3Arp Note Order | Order in which held notes are played | | Layer 3/Arp | Trigger | 551 | L3Arp Trigger | Free: arpeggiator keeps running when new notes are pressed. Retrigger: arpeggiator restarts from step 1 | | Layer 3/Arp | Rate | 552 | L3Arp Rate | Arpeggiator rate (synced to host tempo) | | Layer 3/Arp | Length | 553 | L3Arp Length | Number of active steps in the arpeggiator pattern | | Layer 3/Arp | Arpeggiator Mode | 554 | L3Arp Arpeggiator Mode | Played Notes: arpeggiates held notes. Fixed Notes: plays a recorded note sequence | | Layer 3/Arp | Humanise | 555 | L3Arp Humanise | Add random timing variation to note starts and velocity. Higher values create looser, more human-like performance | | Layer 3/Arp | Auto Rate | 556 | L3Arp Auto Rate | Let Floe decide the rate so that the loop plays near to its original recorded rate rather than having to add large silent gaps between slices. The rate that Floe chooses varies depending on your host tempo. | | Layer 3/Arp | Polyrate | 557 | L3Arp Polyrate | Each octave plays at a different rate. Double means each octave up is 2x faster. 3:2 and 4:3 create polyrhythmic relationships between octaves | | Layer 3/Arp | One Shot | 558 | L3Arp One Shot | When enabled, the arpeggiator plays through the sequence once and then stops instead of looping | | Layer 3/EQ/Band 1 | Resonance | 559 | L3EqB1 Resonance | Band 1: sharpness of the peak | | Layer 3/EQ/Band 2 | Resonance | 560 | L3EqB2 Resonance | Band 2: sharpness of the peak | | Layer 3/Arp | Arpeggiator | 561 | L3Arp Arpeggiator | Enable/disable the arpeggiator | | Layer 3/LFO | Shape | 562 | L3Lfo Shape | Oscillator shape, including random and percussive waveforms | | Layer 3/EQ/Band 1 | Type | 564 | L3EqB1 Type | Band 1: type of EQ band | | Layer 3/EQ/Band 2 | Type | 565 | L3EqB2 Type | Band 2: type of EQ band | | Layer 3/EQ/Band 3 | Legacy Frequency | 566 | L3EqB3 Legacy Frequency | Legacy band 3 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/EQ/Band 3 | Resonance | 567 | L3EqB3 Resonance | Band 3: sharpness of the peak | | Layer 3/EQ/Band 3 | Gain | 568 | L3EqB3 Gain | Band 3: volume gain at the frequency | | Layer 3/EQ/Band 3 | Type | 569 | L3EqB3 Type | Band 3: type of EQ band | | Layer 3/Main/Filter | Cutoff Frequency | 570 | L3Filt Cutoff Frequency | The frequency at which the filter should take effect | | Layer 3/EQ/Band 1 | Frequency | 571 | L3EqB1 Frequency | Band 1: frequency of this band | | Layer 3/EQ/Band 2 | Frequency | 572 | L3EqB2 Frequency | Band 2: frequency of this band | | Layer 3/EQ/Band 3 | Frequency | 573 | L3EqB3 Frequency | Band 3: frequency of this band | | Layer 3/Main/Filter | Type | 574 | L3Filt Type | Filter type | | Layer 3 | Stereo Width | 575 | L3 Stereo Width | Layer stereo width: negative narrows toward mono, positive widens | | Effect/Distortion | Type | 3 | Dist Type | Distortion algorithm type | | Effect/Distortion | Drive | 4 | Dist Drive | Distortion amount | | Effect/Distortion | On | 5 | Dist On | Enable/disable the distortion effect | | Effect/Bitcrush | Bits | 6 | Bitc Bits | Audio resolution | | Effect/Bitcrush | Sample Rate | 7 | Bitc Sample Rate | Sample rate | | Effect/Bitcrush | Legacy Wet | 8 | Bitc Legacy Wet | Legacy processed-signal volume. Kept for backwards-compatibility with DAW automation | | Effect/Bitcrush | Legacy Dry | 9 | Bitc Legacy Dry | Legacy unprocessed-signal volume. Kept for backwards-compatibility with DAW automation | | Effect/Bitcrush | On | 10 | Bitc On | Enable/disable the bitcrush effect | | Effect/Compressor | Legacy Threshold | 11 | Comp Legacy Threshold | Legacy threshold parameter. Kept for backwards-compatibility with DAW automation | | Effect/Compressor | Legacy Ratio | 12 | Comp Legacy Ratio | Legacy ratio parameter. Kept for backwards-compatibility with DAW automation | | Effect/Compressor | Gain | 13 | Comp Gain | Additional control for volume after compression | | Effect/Compressor | Auto Gain | 14 | Comp Auto Gain | Automatically re-adjust the gain to stay consistent regardless of compression intensity | | Effect/Compressor | On | 15 | Comp On | Enable/disable the compression effect | | Effect/Filter | On | 16 | Filt On | Enable/disable the filter | | Effect/Filter | Legacy Cutoff Frequency | 17 | Filt Legacy Cutoff Frequency | Legacy cutoff parameter. Kept for backwards-compatibility with DAW automation | | Effect/Filter | Legacy Resonance | 18 | Filt Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Effect/Filter | Legacy Gain | 19 | Filt Legacy Gain | Legacy gain parameter. Kept for backwards-compatibility with DAW automation | | Effect/Filter | Legacy Type | 20 | Filt Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Effect/StereoWiden | Width | 21 | Ster Width | Increase or decrease the stereo width | | Effect/StereoWiden | On | 22 | Ster On | Turn the stereo widen effect on or off | | Effect/Chorus | Rate | 23 | Chr Rate | Chorus modulation rate | | Effect/Chorus | Legacy High-pass | 24 | Chr Legacy High-pass | Legacy high-pass parameter. Kept for backwards-compatibility with DAW automation | | Effect/Chorus | Depth | 25 | Chr Depth | Chorus effect intensity | | Effect/Chorus | Legacy Wet | 26 | Chr Legacy Wet | Legacy processed-signal volume. Kept for backwards-compatibility with DAW automation | | Effect/Chorus | Legacy Dry | 27 | Chr Legacy Dry | Legacy unprocessed-signal volume. Kept for backwards-compatibility with DAW automation | | Effect/Chorus | On | 28 | Chr On | Enable/disable the chorus effect | | Effect/Filter | Resonance | 29 | Filt Resonance | The intensity of the volume peak at the cutoff frequency | | Effect/Filter | Gain | 30 | Filt Gain | Volume gain of shelf/peak filter | | Effect/StereoWiden | Mode | 31 | Ster Mode | Stereo widening algorithm: Balanced (constant-power M/S), Legacy (original behaviour, kept for old presets), or Bass Mono (mono below the crossover, widened above) | | Effect/StereoWiden | Bass Mono | 32 | Ster Bass Mono | Frequencies below this point are summed to mono (Bass Mono mode only) | | Effect/Compressor | Type | 33 | Comp Type | The compressor algorithm to use | | Effect/Compressor | Attack | 34 | Comp Attack | How quickly the compressor responds to a rise in level | | Effect/Compressor | Release | 35 | Comp Release | How quickly the compressor recovers after the level drops | | Effect/Compressor | Mix | 36 | Comp Mix | Blend between the dry input and the compressed signal | | Effect/Convolution Reverb | Legacy High-pass | 65 | Conv Legacy High-pass | Legacy high-pass parameter. Kept for backwards-compatibility with DAW automation | | Effect/Convolution Reverb | Legacy Wet | 66 | Conv Legacy Wet | Legacy processed-signal volume. Kept for backwards-compatibility with DAW automation | | Effect/Convolution Reverb | Legacy Dry | 67 | Conv Legacy Dry | Legacy unprocessed-signal volume. Kept for backwards-compatibility with DAW automation | | Effect/Convolution Reverb | On | 68 | Conv On | Enable/disable the convolution reverb effect | | Effect/Reverb | Decay Time | 69 | Rvrb Decay Time | Reverb decay time | | Effect/Reverb | Pre Low Cutoff | 70 | Rvrb Pre Low Cutoff | Low-pass filter cutoff before reverb | | Effect/Reverb | Pre High Cutoff | 71 | Rvrb Pre High Cutoff | High-pass filter cutoff before reverb | | Effect/Reverb | Low Cutoff | 72 | Rvrb Low Cutoff | Low-pass filter cutoff after reverb | | Effect/Reverb | Low Gain | 73 | Rvrb Low Gain | Low-pass filter gain | | Effect/Reverb | High Cutoff | 74 | Rvrb High Cutoff | High-pass filter cutoff after reverb | | Effect/Reverb | High Gain | 75 | Rvrb High Gain | High-pass filter gain | | Effect/Reverb | Chorus Amount | 76 | Rvrb Chorus Amount | Chorus effect amount | | Effect/Reverb | Chorus Frequency | 77 | Rvrb Chorus Frequency | Chorus effect frequency | | Effect/Reverb | Size | 78 | Rvrb Size | Reverb size | | Effect/Reverb | Delay | 79 | Rvrb Delay | Reverb delay | | Effect/Reverb | Mix | 80 | Rvrb Mix | Processed signal volume | | Effect/Reverb | On | 81 | Rvrb On | Enable/disable the reverb effect | | Effect/Phaser | Feedback | 82 | Phs Feedback | Feedback amount | | Effect/Phaser | Mod Rate | 83 | Phs Mod Rate | Speed at which the phaser filters modulate | | Effect/Phaser | Center Frequency | 84 | Phs Center Frequency | Center frequency of the phaser filters | | Effect/Phaser | Shape | 85 | Phs Shape | Shape of the phaser filter's peaks | | Effect/Phaser | Mod Depth | 86 | Phs Mod Depth | The range over which the phaser filters modulate | | Effect/Phaser | Stereo Amount | 87 | Phs Stereo Amount | Adds a stereo effect by offsetting the left and right filters | | Effect/Phaser | Mix | 88 | Phs Mix | Mix between the wet and dry signals | | Effect/Phaser | On | 89 | Phs On | Enable/disable the phaser effect | | Effect/Delay | Mode | 90 | Dly Mode | Delay type | | Effect/Delay | Filter Cutoff | 91 | Dly Filter Cutoff | High/low frequency reduction | | Effect/Delay | Filter Spread | 92 | Dly Filter Spread | Width of the filter | | Effect/Delay | Time Left (ms) | 93 | Dly Time Left (ms) | Left delay time (in milliseconds) | | Effect/Delay | Legacy Time Right (ms) | 94 | Dly Legacy Time Right (ms) | Right delay time (in milliseconds) | | Effect/Delay | Time Left (Tempo Synced) | 95 | Dly Time Left (Tempo Synced) | Left delay time (synced to the host tempo) | | Effect/Delay | Time Right (Tempo Synced) | 96 | Dly Time Right (Tempo Synced) | Right delay time (synced to the host tempo) | | Effect/Delay | On | 97 | Dly On | Synchronise timings to the host's BPM | | Effect/Delay | Mix | 98 | Dly Mix | Level of processed signal | | Effect/Delay | On | 99 | Dly On | Enable/disable the delay effect | | Effect/Delay | Feedback | 100 | Dly Feedback | How much the signal repeats | | Effect/Filter | Type | 105 | Filt Type | Filter type | | Effect/Filter | Cutoff Frequency | 106 | Filt Cutoff Frequency | Frequency of filter effect | | Effect/Chorus | High-pass | 107 | Chr High-pass | High-pass filter cutoff | | Effect/Convolution Reverb | High-pass | 108 | Conv High-pass | Wet high-pass filter cutoff | | Effect/Bitcrush | Mix | 109 | Bitc Mix | Blend between the dry input and the bitcrushed signal | | Effect/Bitcrush | Output | 110 | Bitc Output | Output level after the mix | | Effect/Chorus | Mix | 111 | Chr Mix | Blend between the dry input and the chorused signal | | Effect/Chorus | Output | 112 | Chr Output | Output level after the mix | | Effect/Convolution Reverb | Mix | 113 | Conv Mix | Blend between the dry input and the convolution reverb signal | | Effect/Convolution Reverb | Output | 114 | Conv Output | Output level after the mix | | Effect/Distortion | Mix | 115 | Dist Mix | Blend between the dry input and the distorted signal | | Effect/StereoWiden | Mix | 116 | Ster Mix | Blend between the dry input and the stereo-widened signal | | Effect/Filter | Mix | 117 | Filt Mix | Blend between the dry input and the filtered signal | | Effect/Compressor | Threshold | 118 | Comp Threshold | The threshold that the audio has to pass above before the compression should start taking place | | Effect/Compressor | Ratio | 119 | Comp Ratio | The intensity of compression (high ratios mean more compression) | | Effect/EQ | On | 120 | Eq On | Enable/disable the equaliser effect | | Effect/EQ | Mix | 121 | Eq Mix | Mix between the wet and dry signals | | Effect/EQ/Band 1 | Type | 122 | EqB1 Type | Band 1: type of EQ band | | Effect/EQ/Band 1 | Frequency | 123 | EqB1 Frequency | Band 1: frequency of this band | | Effect/EQ/Band 1 | Resonance | 124 | EqB1 Resonance | Band 1: sharpness of the peak | | Effect/EQ/Band 1 | Gain | 125 | EqB1 Gain | Band 1: volume gain at the frequency | | Effect/EQ/Band 2 | Type | 126 | EqB2 Type | Band 2: type of EQ band | | Effect/EQ/Band 2 | Frequency | 127 | EqB2 Frequency | Band 2: frequency of this band | | Effect/EQ/Band 2 | Resonance | 128 | EqB2 Resonance | Band 2: sharpness of the peak | | Effect/EQ/Band 2 | Gain | 129 | EqB2 Gain | Band 2: volume gain at the frequency | | Effect/EQ/Band 3 | Type | 130 | EqB3 Type | Band 3: type of EQ band | | Effect/EQ/Band 3 | Frequency | 131 | EqB3 Frequency | Band 3: frequency of this band | | Effect/EQ/Band 3 | Resonance | 132 | EqB3 Resonance | Band 3: sharpness of the peak | | Effect/EQ/Band 3 | Gain | 133 | EqB3 Gain | Band 3: volume gain at the frequency | | Master | Volume | 0 | Mst Volume | Master volume | | Master | Legacy Velocity To Volume Strength | 1 | Mst Legacy Velocity To Volume Strength | Legacy parameter. The amount that the MIDI velocity affects the volume of notes; 100% means notes will be silent when the velocity is very soft, and 0% means that notes will play full volume regardless of the velocity | | Master | Timbre | 2 | Mst Timbre | The intstruments timbre. Not every instrument contains timbre information; instruments that do will be highlighted when you click on this knob. | | Macro | 1 | 101 | 1 | A macro that can be assigned to any parameter in the plugin. The macro will affect all parameters that are assigned to it. | | Macro | 2 | 102 | 2 | A macro that can be assigned to any parameter in the plugin. The macro will affect all parameters that are assigned to it. | | Macro | 3 | 103 | 3 | A macro that can be assigned to any parameter in the plugin. The macro will affect all parameters that are assigned to it. | | Macro | 4 | 104 | 4 | A macro that can be assigned to any parameter in the plugin. The macro will affect all parameters that are assigned to it. | --- # Sample Libraries > What is a Floe sample library Sample libraries are collections of mapped, playable sounds along with images, tags, and other metadata. Without sample libraries, Floe can't produce any sound. Sample libraries often have a theme or focus, such as 'Music Box Suite' — multisampled music box instruments, or 'Lost Reveries' — a collection of ambient single-sample ambient tones. A sample library may contain: - Instruments - Impulse Responses Sample libraries are not loaded directly; instead you load the instruments into Floe's layers, or impulse responses into Floe's convolution reverb. However, you can view your installed libraries by opening the 3-dots menu on Floe's main window and clicking "Info". Libraries typically focus on instruments, however, sometimes a sample library exclusively contains impulse responses for use in the convolution reverb - expanding the options for sound design. At a technical level, _Floe sample libraries_ are a new, custom format; they're open, portable folders of audio files and configuration files developed with Floe's [developer tools](/docs/beta/develop/develop-libraries). Typically, a sample library is in a folder with a name like `Developer Name - Library Name`. Sample libraries can contain thousands of audio files and can be many gigabytes in size. They typically have a `Samples` subfolder and a file called `floe.lua`. --- # Arpeggiator > Information about Floe's per-layer arpeggiator ## At a glance - A per-layer note sequencer that retriggers the layer's instrument in time with your host. - Each [layer](/docs/beta/usage/layers) has its own independent arpeggiator on the **Arp tab**. - Two modes: _Played Notes_ (arpeggiates the chord you're holding) and _Fixed Notes_ (plays a recorded note sequence). - Up to 64 steps, each with its own velocity, gate, note/interval, on/off and tie. ## What is the arpeggiator? The arpeggiator turns a held chord — or a recorded note sequence — into a rhythmic pattern of individual notes, synced to your host's tempo. Each step of the pattern triggers the layer's instrument as if you'd played it from a keyboard, so the volume envelope, filter, LFOs and effects all respond exactly the same way they would for a manually played note. Because the arpeggiator is per-layer, you can create interesting combination of sequences across layers. ![Layer Arp Tab](/images/screenshots/layer-arp.png) ## Turning it on Open a layer's **Arp tab** and click the _Arpeggiator_ button to enable it. Next to that button is the **Mode menu**: - **Played Notes**: the held chord is arpeggiated. Each step plays one of the notes you're holding, transposed by an optional per-step semitone interval. The order in which the notes are picked is set by _Note Order_ (Up, Down, Up/Down, Random, Thumb, Up+, and so on). - **Fixed Notes**: each step plays a specific MIDI note that you set yourself, regardless of what you play in. Use the **Record** button to capture a sequence by playing notes on your keyboard. ## The step sequencer Below the mode controls is the step sequencer. The number of active steps is set by _Length_. ### Velocity bars Each step has a vertical bar. Click and drag inside the sequencer to set velocities — drag across multiple steps to draw a shape. The bars represent **velocity, not volume**. How that velocity becomes loudness is shaped by the [_Velocity to volume curve_](/docs/beta/usage/midi#velocity) on the layer's Config tab. By default that curve doesn't start at zero, so even a zero-velocity step still produces a quiet sound. This distinction matters most for multisampled instruments that have separate velocity layers: a step's velocity selects which velocity layer is played, not just how loud it is. A low-velocity step on a piano, for example, gives you the soft-velocity samples rather than just a quieter version of the loud ones. ### Step rows Under each bar you'll find: - **Step number / on-off**: click to mute or unmute the step. A disabled step stays silent but keeps its other settings. - **Note / interval**: in _Fixed Notes_ mode this is the MIDI note name; in _Played Notes_ mode it's a semitone offset added to whichever held note is being played at that step. Drag to change, or double-click to type a value. - **Tie** (link icon): fuses the step with the previous one to create a single, longer note. Tied steps inherit the velocity and gate of the tie-chain's root step. - **Gate** (small knob): the proportion of the step duration that the note actually sounds for. 100% is legato-like; lower values create staccato patterns. Gated notes still trigger the Release of the volume envelope on the MAIN tab. Right-click any step for a context menu with options to reset the step, apply its settings to all steps, or rotate the whole pattern forwards/backwards. When the pattern is longer than fits on screen, an **Overview** toggle in the top-right of the sequencer shows a compact, non-editable view of all steps at once. ### How a step triggers the instrument Each step starts a new note on the layer, which triggers the **volume envelope's attack**. When the step ends — either at its gate-off point or when a following non-tied step begins — the **volume envelope's release** is triggered. If your volume envelope has a slow attack or long release, steps will overlap and bleed into one another; with a fast attack and short release, you'll get a tight, percussive feel. ## Sequence controls Below the step sequencer is the **SEQUENCE** section: - **Rate**: the step length, synced to host tempo. Choose from triplet, straight or dotted divisions from 1/64 up to 4/1. - **Auto Rate** (only visible for sliced instruments): picks a rate automatically so the slices play back close to the loop's originally recorded speed, avoiding long silent gaps between slices when your host tempo is far from the loop's native tempo. While Auto Rate is on, the Rate control is replaced with a read-only display showing the chosen rate. The multiplier (1x, 2x, 1/2x, dotted, triplet, and so on) lets you offset that choice up or down without losing the auto-fit behaviour. Because the chosen rate has to land on one of the tempo-synced divisions (1/4, 1/8, 1/16T, …), it can only change in discrete steps as the host tempo moves. So as you sweep the host tempo, you'll cross boundary points where the chosen rate jumps to the next division. The jump is calibrated so the upper end of each range stays close to the loop's native feel — which means crossing upward into a new range actually slows the perceived rate. It can therefore feel faster at, say, 147 BPM than at 148 BPM, even though your host is running faster. The same boundary points apply to every layer in the project, so two arpeggiators using Auto Rate stay in the same rhythmic ratio across tempo changes. - **Length**: how many steps are active in the pattern (1–64). - **Order** (Played Notes only): how held notes are picked across the steps — Chord, Up, Down, Up/Down, Down/Up, Random, Random No Repeat, Up x2, Down x2, Up/Down x2, Converge, Diverge, Thumb, Up+. - **Humanise**: adds random timing and velocity variation to each step. Small amounts loosen up a rigid pattern; larger amounts produce a much more human-feeling performance. ## Config controls The **CONFIG** section holds behaviour switches: - **Trigger**: _Free_ keeps the arpeggiator running across new key presses, so playing new notes changes the held chord without restarting the pattern. _Retrigger_ restarts the pattern from step 1 every time a new chord is pressed. - **Polyrate**: lets each octave of the held chord play at a different rate. _Double at octaves_ doubles the rate per octave up; _3:2 at octaves_ and _4:3 at octaves_ create polyrhythmic relationships between octaves. Useful for creating complex, evolving patterns from a simple chord. - **One Shot**: when enabled, the pattern plays through once and then stops instead of looping. - **Record** (Fixed Notes mode): click to start recording, then play notes on your keyboard to fill the sequence step-by-step. Click again to stop. ## Sliced instruments Some instruments come with built-in slice markers (for example, a sliced drum loop). When you load one of these, the arpeggiator switches into a locked **slice mode**: it plays the instrument's slices in order as its steps, rather than running a user-defined pattern. The mode/length/order controls are hidden, and a **SLICING** section appears with two extra controls: - **Offset**: the first slice to play. - **Length**: how many slices to loop through (or _All_ for everything from the offset onwards). The step sequencer still shows per-step velocity and gate, so you can shape the dynamics and rhythmic feel of the slice playback. ## Tips - Use the interesting Polyrate _Double at octaves_ and hold an octave (2 Cs for example) on your keyboard for a unique doubling-up effect. - When in _Chord_ order, be careful to trigger your chords at precisely the same time. If there's a slight gap, the arpeggiator will begin with the first note, and only add the second note in the next step since it didn't see the second note at the time the first was hit. - For percussion, _Chord_ order with a generous _Humanise_ setting is normally best. --- # Browsers > Comprehensive guide to using Floe's browsers for presets, instruments, and impulse responses. One of Floe's core goals is to provide a fast and fluid way to find and load sounds across large sound pools: the _browsers_ are the main way to do this. You may spend a lot of time with the browsers. They're used in several places on the interface: - Presets - Instruments for each layer - Impulse responses for the Convolution Reverb effect All browsers work the same, with some minor differences depending on context. ![Browser Panel](/images/screenshots/browser-full.png) 1 2 3 ## Overview The fundamental design is a two-panel layout: filters on the left, and results on the right (loadable items). Similar to if you were shopping online for t-shirts: you might use filters to narrow down the results by size, colour, price range, etc., and then browse the results that match your criteria. The same principle applies here, except we use filters such as library, tag, or folder to instantly narrow down results of presets, instruments, or impulse responses. Initially however, Floe starts in the simple 'ONE' filter mode. This mode lets you select only one filter at a time. If you click on another filter, it replaces the existing one. You can change to AND or OR mode using the multi-mode menu **(3)**. When no filters are applied, all items are shown in the results list. - **1**: filters panel: filters to narrow down the results. Here we can see filters for libraries (Celtic Harp, Dulcitone, Lost Reveries, etc.) and folders within those libraries (Core, Extras, Mic Options, etc.). Clicking on these will filter down the results on the right panel (2). - **2**: the results list, showing items that match the current filter settings. Click these to load them. **Double-click** to load and close the browser in one action. - Numbers in brackets next to each filter, like _(26)_, show how many items match that filter. If you were to select this filter, the results list would narrow down to those matching items (unless you are using multi-select modes and already have filters). - **Search libraries/tags**: filters search box: type here to narrow down the available filters. - **Search instruments**: results search box: type here to filter the results list by name. - **Favourites**: on each item in the results list you can click the star that appear on the right when you hover over an item. This adds it to your favourites list, which can be accessed using the _Favourites_ button. - **Left/right arrows** : navigate to the previous/next item in the results list. - **Random icon** : load a random item from the results list. - **Location arrow** : scroll to the currently loaded item in the results list. - **Unload instrument**: unload the currently selected item. You can also click again on the loaded item in the results list to unload it. ## Filter buttons Simple filters are small buttons, used for tags, authors and other simple filters. Click on them to filter down the results list. ![Filter button](/images/screenshots/filter-button.png) ## Filter cards Additionally, Floe has filter _cards_. They look quite different from the small filter buttons, but they actually function mostly in the same way, they just offer more information and house a tree-like structure of folders (also just a type of filter button). Cards are used for _sample libraries_ in the instrument and IR browsers, and for _preset banks_ in the preset browser. Cards are made up of two sections, the _header_ (**1**) and the _body_ (**2**). Both sections can be clicked. ![Browser Filter Card](/images/screenshots/filter-card.png) 1 2 ### Selecting in filter cards Click on the header (**1**) to expand or collapse the entire sample library or preset bank. Inside every card is an _All Items_ button that selects all items within. Alternatively, click on individual items in the body (**2**) to select specific folders within the library or bank — notice the item individually shows a gold left edge. ![Filter card all selected](/images/screenshots/filter-card-all-selected.png) ![Filter card single item selected](/images/screenshots/filter-card-body-item-selected.png) - **Subtle gold background**: indicates the filter is selected. - **Gold left edge**: indicates the filter is actively contributing to the results list. ### Folder trees Items in the body (**2**) are sometimes hierarchical. You can see that some items are more indented than others. In this case, _Close_ and _Room_ are subfolders of _Mic Options_. If you select a parent folder, the results list also shows items that match the subfolders. You can see _Mic Options_ is selected (it has a gold background), but also the gold left edge border extends to _Close_ and _Room_ indicating they are included in the filtering of the results list. ![Filter card item tree selected](/images/screenshots/filter-card-body-tree.png) Developers typically don't use much hierarchy, but it can be an intuitive categorisation mechanism. Just because a parent folder has subfolders does not mean that it doesn't include its own items too (albeit this is less common). Imagine folders on your computer: a folder can contain files as well as subfolders. So sometimes you will find items that do cannot be found searching through the subfolders alone. ### Right-click You can often right-click on filter cards to bring up additional options. ## Multi-select mode By default, the browsers are in single-select mode: clicking on a new filter replaces the existing filter. Use the ONE/AND/OR menu in the top to switch to a multi-select mode. ![Browser more-options menu](/images/screenshots/browser-menu.png) - **AND** mode means that all selected filters must be matched for an item to appear in the results list. The more filters you select, the narrower the results become. - **OR** mode means that items matching any of the selected filters will appear in the results list. The more filters you select, the broader the results become. Selected filters appear as dismissable buttons at the top of the results list, with an _AND_/_OR_ label between them showing how they're combined. In AND mode, Floe greys-out filters that wouldn't add to the result set (no items would match the combined filter), helping you avoid dead-end combinations. ## Keyboard navigation The browsers support keyboard navigation using the arrow keys and enter. The focused item is denoted by a blue outline box. This box is initially hidden but becomes visible when you press any arrow key. - Up/down arrows to move the selection in the results list. - Enter/return to 'click' the currently highlighted item. - Left/right arrows or tab to move between the filters panel and results list. - CTRL+F (CMD+F on Mac) to focus the results search box. - Home/End to jump to the start/end of the results list. - Hold CTRL (CMD on Mac) and use the up/down arrows to jump by to the previous/next folder. - Page Up/Page Down to jump up/down by 8 items at a time. Filter cards are keyboard-navigable, but filter buttons are not currently. ## Tips - Double-click on an item to load it and close the browser in one action. --- # Effects > Information about the audio effects available in Floe Floe has a selection of 11 reorderable effects that are applied to the mix of the [layers](/docs/beta/usage/layers). Audio flows through the rack from top to bottom. ![Effects panel](/images/screenshots/effects.png) ## Reordering You can change the ordering of the effects by dragging and dropping the effect names — either the name in the rack or the name next to the on/off switch. ## Enabling and bypassing Each effect has two controls for its active state: - **Switchboard toggle** (left sidebar): Toggles the effect on or off. When toggled off, the effect is both deactivated and hidden from the rack. - **Bypass button** (power icon in the effect heading): Deactivates the effect's audio processing but keeps it visible in the rack. This is useful for quickly A/B comparing with and without an effect, or for keeping your effect chain layout while temporarily disabling an effect. A bypassed effect appears greyed out in the rack. Click the bypass button again to reactivate it. The close button (✕) on an effect removes it from the rack entirely, same as toggling it off in the switchboard. ## Panel buttons The buttons in the panel heading act on all effects at once: - **Randomise** (shuffle icon): Randomly turns effects on or off and shuffles their order. - **Bypass all** (power icon): Bypasses every active effect, or reactivates them all if any are already bypassed. - **Remove all** (unload icon): Removes every effect from the rack. Right-clicking an effect — either its heading or its switchboard entry — opens a menu for resetting that effect's parameters to their defaults. ## Mix Every effect has a _Mix_ knob in its heading area. Mix blends the original incoming audio (the _dry_ signal) with the effect's output (the _wet_ signal): - At 0%, you hear only the dry signal — the effect is effectively inaudible. - At 100%, you hear only the wet signal — the original is fully replaced by the effect's output. - In between, the two are crossfaded. This lets you dial in the strength of an effect without changing any of its other settings — useful for subtle reverb tails, parallel compression, gentle distortion, and so on. ## Convolution Reverb The convolution unit adds a reverb-like effect to the sound by utilising an impulse response (IR) selected using a dedicated [browser](/docs/beta/usage/browsers). Floe offers some realistic reverb room IRs, but also IRs that produce unusual sound effects. The set of available IRs depend on what sample libraries you have installed and their features. Floe always has a built-in set of impulse responses available. But additionally, some sample libraries expand this collection, such as the community [Antique IRs](/packages/antique-irs) library. ## All available effects | Name | Description | | --- | --- | | Distortion | Distort the audio using various algorithms. | | Bit Crush | Apply a lo-fi effect to the signal by either reducing the sample rate or by reducing the sample resolution. Doing either distorts the signal. | | Compressor | Compress the signal to make the quiet sections louder. | | Filter | Adjust the volume frequency bands in the signal, or cut out frequency bands altogether. The filter type can be selected with the menu. | | Stereo Widen | Increase or decrease the stereo width of the signal. | | Chorus | An effect that changes the character of the signal by adding a modulated and pitch-varying duplicate signal. | | Reverb | Algorithmically simulate the reflections and reverberations of a real room. | | Delay | Simulate an echo effect, as if the sound is reflecting off of a distant surface. | | Convol Reverb | The Convolution reverb effect applies a reverb to the signal. The characteristic of the reverb is determined by the impulse response (IR). The IR can be selected from the menu. | | Phaser | Modulate the sound using a series of moving filters | | EQ | Three-band parametric equaliser. Each band can be configured as a peak, shelf, notch, low-pass or high-pass filter. | --- # Folders > Managing sample library and preset folders in Floe Floe has a flexible folder system for managing your sample libraries and presets, allowing for custom organisation and easy use of external drives. Floe works _with_ your natural usage of drives, files, and folders rather than enforcing rigid requirements. There are two **separate** types of folders that Floe manages: **sample library folders** and **preset folders**. You can see and manage folders in Floe's preferences panel — opened by clicking the cog icon at the top of Floe's window: ![Folder Preferences GUI](/images/screenshots/folders.png) Floe automatically scans these folders (and their subfolders) for presets and libraries respectively. Anything added, removed or changed in these folders is reflected in Floe immediately. Floe doesn't have a separate 'memory' about presets and libraries — what exists in your folders is the only source of truth. If you're not yet familiar with what a sample library or preset is, read more about these concepts on the [glossary](/docs/beta/getting-started/glossary) page. ### Adding folders Add a folder to either sample libraries or presets by clicking the 'Add Folder' button. A file dialog will open - select your desired folder. Floe will immediately start scanning it. Floe scans subfolders of the folder you pick too; so you typically want to select a top-level folder such as "Floe Libraries" or "Floe Presets" that contains all your libraries/presets inside it rather than adding each individual library/preset folder. ### Removing folders Use the trash icon to remove a folder from either sample libraries or presets. This does not physically delete the folder, it just removes it from Floe's scanning list. You cannot remove Floe's default folders (the first on the lists). ### Open folder Use the link icon to open the folder in your system's File Explorer/Finder. ### Moving libraries/presets to a new location Floe does not have an automatic 'move' function, but you can easily move them using your system's File Explorer/Finder alongside Floe's folder management. To move your existing libraries or presets to a new folder follow these steps: 1. **Create the new folder in File Explorer/Finder**. For example, create a folder called "Floe Libraries" and "Floe Presets" on your external drive. 2. **Open Floe's preferences** panel by clicking the . Open the _Folders_ tab. 3. **Add the new folder** using the 'Add Folder' button. Ensure you use the right button for 2 separate types: libraries and presets. 4. **Open your existing libraries/presets folders** using the link icon next to the folder listing. 5. Use File Explorer/Finder to **move the libraries/presets** to your desired new location. This often involves selecting all items in the folder and cut-and-pasting them (or drag-and-drop) into the new folder. Floe, in the background, should instantly detect the changes and update its library and preset listings accordingly. If not, try restarting Floe or your DAW. ### Set the default installation folder If you've added extra folders, you can select these as the default location to install libraries and presets in the future. Use the dropdown on the _Packages_ tab of the preferences panel. ### Got mixed up? If you loose track regarding what files are libraries vs. presets, here's some tips: - Sample libraries are folders typically with names like `Developer Name - Library Name`. They often contain a `Samples` subfolder and a file called `floe.lua`. - Preset banks are folders typically with names like `Library Name Factory Presets`. They often have various subfolders for different categories, each containing many tiny `.floe-preset` files. We usually recommend not mixing libraries and presets in the same folder, however, Floe can handle this if needed — just set up both types of folders to point to the same location. ### Organising presets ### Why are libraries and presets separate? The separation provides several benefits — even though the common case is that a sample library comes with an associated factory preset bank: - Sample libraries are developed using technical programming language tools - not typically edited by most users, whereas presets are often created and modified by users. Using different folders avoids confusion and frees up more fearless customisation for the 2 separate types of users (musicians, composers vs. sample library developers). - Preset banks can refer to multiple sample libraries rather than always relating to just one. - Samples libraries are often very large with hundreds of audio files and need to be stored on an external drive, whereas presets are tiny and can easily zipped and shared. --- # Granular Synthesis > Information about Floe's per-layer granular synthesis ## At a glance - A per-layer granular engine that resynthesises the layer's instrument from short, overlapping snippets of audio called _grains_. - Two granular modes: _Granular Playback_ (time-stretched movement through the sample) and _Granular Fixed_ (frozen at one position). - Selected from the **Play Mode** menu at the top of the layer's [Playback tab](/docs/beta/usage/layers#playback-tab), alongside _Standard Playback_. ## About Floe's granular engine Floe's granular engine works like most other granular synths — short, overlapping snippets of audio (_grains_) are spawned from the loaded sample, and parameters like grain length, density, position and pitch shape the resulting texture. If you've used granular engines elsewhere, the controls here will feel familiar. Granular synthesis works with any sample-based instrument loaded into a layer. The same controls are available regardless of whether the instrument is a single sample or a multisampled library — Floe sources its grains from whichever sample would be played for the incoming note. A few things that set Floe's granular engine apart: - Two distinct modes — a time-stretched _Granular Playback_ mode where the playhead moves through the sample at a controllable speed, and a _Granular Fixed_ mode where it stays parked at one position. - A harmony grid that lets grains randomly spawn at chosen intervals — pick from musical presets like _Octaves_, _Major Triad_, _Pentatonic_, _Whole Tone_, or toggle individual semitones yourself. - A focus on smooth, easy-to-use parameters: knobs are tuned for musical results across their whole range, so it's hard to land on a setting that sounds broken or harsh. ## Choosing a mode The Play Mode menu at the top of the Playback tab switches the layer between three modes: - **Standard Playback**: the normal sample-playback engine — straight playback with optional looping. The granular controls are hidden. - **Granular Playback**: a granular engine where the grain playhead moves through the sample at a user-controlled speed. Use this to time-stretch, slow down, or reverse-scrub the sample without changing pitch. - **Granular Fixed**: a granular engine where the playhead is frozen at a user-controlled position in the sample. Use this to "spray" grains around a single point — perfect for drones, pads, and ambient textures. The two granular modes share the same parameter set, with one exception: _Granular Playback_ has a **Speed** knob, while _Granular Fixed_ has a **Position** knob. Everything else is identical. ## Granular Playback ![Layer Playback tab in Granular Playback mode](/images/screenshots/layer-playback-granular-speed.png) In _Granular Playback_ mode the playhead moves continuously through the sample, and grains are spawned from the playhead's current location. The looping controls remain available, so the playhead can loop in the same way as standard playback. This mode is great for: - Slow, drifting playback of long evolving samples. - Blurry time-stretching a sample to fit a slower tempo without pitching it down. ## Granular Fixed ![Layer Playback tab in Granular Fixed mode](/images/screenshots/layer-playback-granular-fixed.png) In _Granular Fixed_ mode the playhead is locked at a fixed position in the sample, set by the **Position** knob. A vertical band on the waveform shows where grains are being sourced from, and its width reflects the **Spread** setting. Loop controls and the sample-start handle are hidden because they have no meaning here — the sample isn't being played back linearly. This mode is great for: - Freezing a moment of a sample into a sustained pad or drone. - Using a very large Spread to source grains from all over the sample. - Finding interesting timbres hiding inside a longer recording and holding on them. - Combining with a slow LFO on Position to create evolving, scanned textures. ## Parameters ### Playhead - **Speed** (Granular Playback): how fast the grain playhead moves through the sample. The centre-detent position is 1× — normal speed — and you can dial all the way down to a complete stop or up to several times faster than the original. To play backwards, use the **Reverse** toggle. - **Position** (Granular Fixed): where in the sample grains are sourced from, as a percentage from start to end. - **Spread**: the size of the region around the playhead that grains can start within. Small values keep grains tightly focused on the playhead; large values scatter them across a wider window, which softens transients and creates more diffuse, cloud-like textures. ### Grains - **Density**: how heavily grains overlap relative to their length. At the midpoint, grains play end-to-end. Lower values introduce gaps for sparse, pointillistic textures; higher values pack many grains on top of each other for a thick, smeared sound. - **Length**: the duration of each grain, from a few milliseconds up to a second. Short grains sound granular and percussive; long grains preserve more of the original tone. - **Smooth**: the crossfade applied at the edges of each grain to avoid clicks. Low values give hard, percussive grain edges; high values fully overlap-fade neighbouring grains for a glassy, smooth result. ### Random The Random section adds per-grain variation so the texture doesn't sound mechanical. Each control sets the _range_ of randomisation; at 0% the grains are uniform, at 100% they vary across the full range. - **Pan**: randomises each grain's stereo position. Higher values widen the granular cloud across the stereo field. - **Detune**: randomises each grain's pitch within ±1 semitone. Useful for thickening and chorusing. - **Direction**: chance that a grain plays backwards. At 100% every grain has a 50/50 chance of forwards or backwards. - **Harmony**: chance that a grain spawns at one of the selected harmony intervals rather than at the root pitch. The **Intervals** menu next to the knob picks which intervals are active — pick from presets like _Octaves_, _Fifth_, _Major Triad_, _Pentatonic_, _Whole Tone_, _Chromatic_, _Cluster_, and many more, or toggle individual semitones on and off. The knob is greyed out until at least one non-unison interval is selected. ## Tips - It's often interesting to control the Position (_Granular Fixed_ mode) using the LFO or a [macro](/docs/beta/usage/macros) for added movement. - The volume envelope, filter and effects all apply to the granular output exactly as they would for standard playback, so you can shape granular textures with the same tools you'd use anywhere else in Floe. --- # Key Ranges > How to use key ranges to split the keyboard into zones for different layers Key ranges let you split the keyboard into zones, with each layer responding to specific keys. This enables keyboard splits, layered zones, and smooth transitions between different sounds across the keyboard. ## Setting up key ranges Configure key ranges on each [layer's **Config tab**](/docs/beta/usage/layers#config-tab) using the low and high key controls. Click and drag these handles to set the range that layer will respond to. ![Key range controls](/images/screenshots/key-range-controls.png) **Fade controls** let you create smooth transitions at the edges of key ranges. Set the number of notes that fade in at the start or fade out at the end of each range. This is used for creating seamless overlaps between layers. For multisampled instruments in particular, consider using the **Transpose** parameter to change the pitch of the layer. This works by shifting the underlying mapping of samples so higher/lower samples are triggered as opposed to the standard pitch parameter which algorithmically re-pitches the sound. ## Key range display A bar above the keyboard at the bottom of the interface shows which keys trigger each layer, with colours corresponding to each layer. Only layers with loaded instruments appear; the bar is hidden entirely when all layers use the full keyboard range (C-2 to G8). ![Key range display above the keyboard](/images/screenshots/key-range-bars.png) Since 128 MIDI keys can't fit on screen, the keyboard shows a scrollable section — use the octave scroll buttons or drag the octave number to navigate. The display scrolls with the keyboard. Small chevrons indicate when a range extends beyond the visible keyboard area, and vertical lines mark the boundaries of each range. Gradients on the bars show fade-in and fade-out regions, with more transparency indicating lower volume. Hover over the display to see an enlarged view with more detail. Sample library developers can define named ranges (like drum names or natural vs. extended ranges) which appear as thicker labelled capsules. ![Enlarged key range view with named ranges, fades, and off-screen chevrons](/images/screenshots/key-range-enlarged.png) --- # Layers > Information about Floe's three-layer architecture and how to use layers At the core of Floe are the 3 independent layers, each with their own instrument and sound-shaping options. This structure allows for blending multiple sounds together to create dynamic, rich, and complex tones. ![Floe's three layers](/images/screenshots/layers.png) These are displayed in three columns on the main panel. Each layer is identical. Floe’s layers are the first things in the processing chain; each layer is processed in parallel, and then the three streams of audio are mixed together and fed through the effects rack, from top to bottom. When you play a note into Floe, all layers are triggered simultaneously. If a layer doesn't have an [instrument](/docs/beta/reference/instruments) (the sound-generator at the heart of a layer), it is inactive. Click the x-mark icon button at the top right of a layer to clear it. ## Top Controls A permanent fixture on each layer are the _top controls_, which provide quick access to key functions. ![Layer Top Controls](/images/screenshots/layer-top-controls.png) 1 2 3 - **1**: the _instrument_ selector: click this to open the [browser](/docs/beta/usage/browsers) and select a new instrument for this layer - or unload the current one. You can also right-click and choose 'Unload' from the menu, or click the x-mark. - **2**: instrument navigation: left/right arrows to quickly switch between instruments, a randomise button to load a random instrument, and an unload button to clear this layer. The navigation and randomise buttons are based on the current filter settings in the browser. For example, if you have selected the 'Distant Signals' sample library on the browser's filters, the navigation buttons will only cycle through instruments from that library. - **3**: mute/solo buttons: buttons to mute or solo this layer. Soloing a layer automatically mutes the other two layers. - **Volume**: adjust the layer's output volume. - **Pitch**: adjust the layer's pitch in semitones. Double click the number to type in a precise value. Or click and drag to change the value, or use the left/right buttons. - **Detune**: adjust the layer's pitch in cents (hundredths of a semitone). - **Pan**: adjust the layer's stereo position. Uses a constant power pan law (AKA -3dB centre). - **Stereo**: increase or decrease the stereo width of the layer. ## Playback Tab The Playback tab controls how the loaded instrument's samples are played back. ![Layer Playback Tab](/images/screenshots/layer-playback.png) - **Play mode** (top selector): switches between _Standard Playback_ (normal sample playback) and [granular modes](/docs/beta/usage/granular) for time-stretching or frozen-position playback. The waveform will often have [looping](/docs/beta/usage/looping) controls on it. - **Waveform display**: shows the waveform and voice markers. For a single-sample instrument this is the actual sample; for a multisampled instrument it often displays the last played sample, although it will sometimes deliberately lock with a checkered overlay to avoid rapid flickering images. The arrow on the left edge is the sample-start handle — drag it to adjust where playback begins. When you play a note, red voice markers track across the waveform. - **Sample info caption**: shows _single sample_ or _multisample_, the sample length, and the root key of the loaded instrument. - **Reverse**: toggle to play the sample(s) in reverse. - **Loop mode** (bottom selector): select the looping mode — _No Loop_, _Standard_, _Ping-Pong_, etc. Visit the [looping](/docs/beta/usage/looping) page for full details. It's typically a good idea to add a small attack using the volume envelope to avoid clicks if you change the sample-start position. ## Main Tab The Main tab houses the volume envelope and the per-voice filter. ![Layer Main Tab](/images/screenshots/layer-main.png) ### Volume Envelope - **Volume Envelope on/off**: typically it's best to leave the volume envelope enabled, but in some situations you can turn it off to allow samples to play unaltered in their entirety. - **ADSR graph**: 3 draggable points representing Attack, Decay+Sustain, and Release. Use these to shape this layer's voices volume over time. Hold `shift` for fine adjustments. ### Filter Each voice belonging to this layer can be processed by a filter to shape its frequency content. - **Filter on/off**: toggle to enable or disable the filter for this layer. - **Filter graph**: an interactable frequency-response graph. - **Filter type selector**: click to open a menu of available filter types such as low-pass, high-pass, band-pass. - **Cut**: adjust the filter's cutoff frequency. - **Res**: adjust the filter's resonance (emphasis around the cutoff frequency). - **Env**: this bi-directional control adjusts how much the filter's cutoff is modulated by the filter envelope to the right. At the middle position the envelope has no effect; positive values open the cutoff up as the envelope progresses, negative values close it down. - **Filter envelope ADSR**: in the same manner as the volume envelope, 3 draggable points representing Attack, Decay+Sustain, and Release shape how the filter cutoff moves over time, scaled by _Env_. ## LFO Tab The Low Frequency Oscillator (LFO) can modulate various parameters to add movement and interest to the sound. ![Layer LFO Tab](/images/screenshots/layer-lfo.png) - **LFO on/off**: enable/disable the Low Frequency Oscillator. - **Waveform display**: a live representative preview of the current LFO shape and rate. - **Target**: select the parameter that the LFO will modulate: Volume, Filter, Pan, Pitch, or Grain Position. Some targets require their associated feature to be active (e.g. the filter must be enabled, or the play mode must be Granular Fixed). - **Shape**: choose the LFO waveform shape. - **Mode**: switch between _Retrigger_ — new notes always start with the LFO at the beginning of its cycle — and _Free_ — the LFO runs continuously regardless of note events, so all notes share the same LFO phase. - **Amount**: control the intensity of the LFO effect on the target parameter. - **Time**: adjust the LFO rate. When Sync is enabled, this is synced to the host tempo (e.g., 1/4 note); when disabled, it operates in Hz. - **Sync**: toggle to sync the LFO speed to the host tempo. ## EQ Tab Each layer includes a simple 3-band equaliser to sculpt the frequency content of the audio. ![Layer EQ Tab](/images/screenshots/layer-eq.png) - **EQ on/off**: toggle to enable or disable the equaliser for this layer. - **EQ graph**: a frequency-response display showing the combined effect of all 3 bands. Each band has a draggable point you can move directly on the graph. Use the mouse scroll wheel to change the resonance of the node. The 3 bands have identical controls: - **Band type selector**: click to open a menu of available EQ band types such as peak, low shelf, high shelf. - **Freq**: adjust the centre frequency of the EQ band. - **Reso**: adjust the resonance (Q factor) of the EQ band, controlling how narrow or wide the frequency band is. - **Gain**: this bi-directional control adjusts the gain (boost or cut) applied at the frequency. ## Config Tab The Config tab contains MIDI and playback behaviour settings for this layer. ![Layer Config Tab](/images/screenshots/layer-config.png) - **Transpose**: transpose the mapping of samples by the given semitone offset. This is particularly useful for multi-sampled instruments as it triggers different samples rather than algorithmically pitch-shifting the audio (which is what the layer's top control _pitch_ does). - **Pitch Bend Range**: set the pitch range in semitones for the MIDI pitch wheel. - **Keytrack**: when enabled, tunes the sound to match the key played. When disabled, the sound always plays at its root pitch regardless of the MIDI note. This is not typically useful if the instrument is multi-sampled. - **Monophonic**: select the voice behaviour when notes overlap. _Off_ (polyphonic): multiple voices can play simultaneously. _Retrigger_ (monophonic): new notes stop previous notes, triggering their volume envelope Release section. _Latch_ (monophonic): the first note plays until all keys are released; new notes are ignored — useful for drones and textural elements. - **Range** and **Key Fade**: visit the [key ranges](/docs/beta/usage/key-ranges) page for full details about these settings. - **Velocity to volume curve**: graphical control showing how MIDI velocity affects the layer's volume. A straight line from bottom-left to top-right means there's a 1:1 relationship with velocity and volume. The curve can be adjusted to create different velocity response characteristics. Visit the [MIDI](/docs/beta/usage/midi) page for full details about editing velocity curves. --- # Looping > Information about the looping features in Floe ## At a glance - Each layer can loop its instrument while a note is held, either using loop points baked into the sample library or your own custom loop region. - The available modes adapt to the loaded instrument: library authors can offer built-in loops, restrict which modes are usable, or disable looping altogether. - Set on the **Loop mode** selector at the bottom of the layer's [Playback tab](/docs/beta/usage/layers#playback-tab); custom loop points are dragged directly on the waveform. ## Loop modes The Loop mode menu offers up to six choices, depending on what the loaded instrument supports: - **Instrument Default**: use whatever the library author chose for each region — including no looping at all. - **Built-in Standard** / **Built-in Ping-Pong**: use the library's built-in loop points, but force every loopable region into the chosen direction. Loop handles are shown on the waveform but are not editable. - **No Loop**: don't loop, even if the instrument has built-in loops. Some libraries require looping (e.g. sustained pads) and will ignore this. - **Standard**: custom wrap-around looping. When the playhead reaches the end of the loop, it jumps back to the start. - **Ping-Pong**: custom looping that alternates between playing forwards and backwards through the loop region. ![Loop Mode Menu](/images/screenshots/loop-mode-menu.png) The custom modes are only available when the instrument allows user-defined loops. For multisampled instruments, the same loop region (as a percentage of each sample) is applied to every region. ## Editing the loop region When a custom mode is active, three handles appear on the waveform: - **Loop start** and **loop end**: drag horizontally to set the loop boundaries. Double-click to type an exact value. - **Crossfade**: drag to set the crossfade length. The shaded region of the waveform highlights the looped portion, and the crossfade is drawn as a sloped overlay at the boundary. You can also drag inside the loop region itself to move the whole loop without resizing it. Enabling **Reverse** mirrors the entire display — the loop end appears on the left and the loop start on the right — but the underlying loop points are unchanged. If the instrument has built-in loops that aren't editable, the handles are still drawn so you can see where the loop sits, but they're greyed out and can't be moved. ## Crossfade A crossfade smooths the boundary so you don't hear a click when the loop wraps. It usually helps to have a small crossfade enabled, especially for sustained or tonal material. In **Standard** mode, the crossfade fades from a region just before the loop end into the loop start — the same audio is mixed against itself on either side of the wrap. In **Ping-Pong** mode, the crossfade is applied at the turnaround points where the direction reverses. Floe automatically clamps the crossfade length so it can never: - Exceed the length of the loop region itself. - Extend past the start of the sample (the crossfade needs audio before the loop start to fade in from). - In ping-pong mode, extend past the end of the sample (the turnaround at the loop end also needs audio on both sides). If you make the loop region smaller than the current crossfade, the crossfade shrinks to fit. The crossfade handle is hidden when the loop spans the whole sample, since there's no audio outside the loop to fade against. ## Other playback controls The same waveform also hosts two controls that aren't strictly part of looping but live alongside it: - **Sample start offset**: the arrow handle at the bottom-left. Drag it to skip the first part of the sample. The skipped region is drawn in a dimmed colour. - **Reverse**: a toggle below the waveform. Plays the sample (and any loop) backwards. When the sample start is moved into the audio, it's a good idea to add a short attack on the volume envelope to avoid clicks. --- # Macros > Learn how to use macros in Floe to control multiple parameters with a single knob ## At a glance - Control multiple parameters at once with a single knob. - 4 macros available, each controlling up to 6 parameters. - Perfect for expressive performance and creating custom controls. - Found in the bottom panel: Play tab for performance, Macros tab for editing. ## What are macros? Macros are powerful controls that let you move multiple parameters simultaneously with a single knob turn. Think of them as custom controls that you design to fit your musical needs. Instead of tweaking multiple knobs separately, you can create a macro that adjusts filter cutoff, reverb amount, and delay feedback all at once — perfect for dramatic breakdowns or smooth transitions. Floe provides 4 macros, and each macro can control up to 6 different parameters. This gives you tremendous flexibility to create expressive, performance-ready controls that transform your sounds in musical ways. ## Setting up macros _Complete workflow: creating macro destinations, adjusting amounts, and renaming_ ### Creating a macro destination 1. Navigate to the **Macros tab** in the bottom panel 2. Hover your mouse over any macro knob — a **plus icon** will appear 3. Click the plus icon to enter **destination selection mode** 4. All automatable parameters in Floe will now show plus icons 5. Click on any highlighted parameter to link it to your macro ![Macro connect GUI](/assets/images/macros-connect-0e2ed5e0eca68332962003ef358d1107.png) ### Adjusting macro strength Once you've linked a parameter to a macro, a small knob appears next to the macro. This **destination amount knob** controls how much the macro affects that parameter. ![Macro destination amount](/assets/images/macros-destination-amount-f36f619e2450896b6a87dcd7f566263a.png) - **Positive values**: Parameter increases when macro is turned up - **Negative values**: Parameter decreases when macro is turned up (bi-directional control) - **Strength**: Higher percentages create more dramatic changes The macro's effect is relative to the parameter's current position, so you can set your base sound first, then use macros to perform variations around that starting point. ## Managing macros ### Removing destinations To unlink a parameter from a macro: 1. Hover over the destination amount knob 2. A **minus icon** will appear below the knob 3. Click the minus icon to remove the connection ### Renaming macros Give your macros meaningful names: 1. Go to the **Macros tab** 2. Click on the macro's name 3. Type your new name ![Macro rename](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK4AAABvCAIAAAD62myoAAATmElEQVR42u2deVQU157H819kMyjIJt00i6yNyNZAA0IDzaLgxiI7tICK+pRFBEKi4oYiihuoAaMoBPd9RVE0yiKiRtRokpc5yeTMmZz35s2bN8ub5Z/5NkWKoqq7aLAxtt4636PdVberbt3fp37397t1q/hIf5I5JT1jM2jCJ1MgPWNTvUmmesYm+p8wNVlv4pCGbzIxMDb9TerWK6VvbDrB2ISW8iiTTPUnT9GfbG4w2UIpU0umDKdYMWRtMEVgMEVIydDMhikjcxFL7AJmQiMzAXaCXRmYWOqbWOhNNp8wafCUhzRQMX26wtSJGFOVnEJVmC2sN5mib2pmZG45aarATGQ3dZqT0NlV5CqGhK5igZub0F0scBdbi92sXV0Frm4CF1eUQUljK2v8ymCKuYGpuSElE0sITYE20TOxMDSzNjAXGFgIDa1ERta2RgIHyFDgYGBtr29tN8HKdoKlaIKljZ6lEDKwEhpZCY2n2kyeKppsjX8FkyynGltY0frE3HKimYXRlAHhM9aggJVwkpXNRxQBtNAWH0+EtZQGY6HA5IAHCH1jtRzwoTDJjKIBFuKhwcBsGA1KmQ0xYWQhmmhhC+EDlwwKBSOzARRMlSjoT7bQG7gGuCjoDT8vvd+qqk4TJptSNKBxYQNzW3tYWuDkInB2hZTmF7spUXBToiB0cYOsHZ0t7BxMBDb4iaEZztrcwMQMKBiZWg3RgNbAKVsIDSxtDKeKJgrsjIQORsJphkIHA6GDvsB+wlTbj61EH1vZTLASQvpWNoZWNhOn2kyyFik1VQjUKAKYKEw0w7+Wn2CNlTXKgBsTa9uPBEIbIiKIoEBEUCAiKBARFIgICkQEBSKCAhFBgYigQERQICIoEBEUiAgKRAQFIoICEUGBiKBA9F6i4OjkPMPT088/QBoYFDwzJCRUhv/xxVcicRO72ztMIwZ4z1FwdRPD+pGRUVFR0fySycK8vH0IE+8hCu7TPWRh4SMSwBVcxTRHp3E6SaAmdp8ukfgFBimdE/jLrLuRWnNqQcW+8MwCd/9QwoE2UchOi0Qr89t7RD/h4ysR2oi0VSWRrZ3HDM+ZIaGsoyw+8ZylzH3XovLK7aY5ERTeVHXViv/7ZQ/X8OgmYAxEDLZ29pSNYR47ewf0IN4+vrhCuTQgntCKe0CMEiGPVAkcFwVKucd6o5d+RlAYu660FoEDSlRb40JETwGzj/hbWB2egMsQ/PmY64N9gice3wOT57V+ow6IzL1XvGSzCQqj1p3zpTQH0J9ebocbGENfjiyDZTCkGGMLVri2D5XJEJy6uLrBJ1HOCf86untKY5PjCqqy6tu4QMhSlxEUxugPoI7zZRKf6W8ScrJMiH5kVHuY7jGDtQfkrs4uriP+UBqXmlZzmkVDRHYRQUHD+GARk4OvDi5/89rAt4eFR9CGRGePwGJsJI2hl4nIKmB1HKHJSwkKIygjOZzJwfGGFfwXa0JiomJRTn7+svSMjAi5nCdNAA3hEXLaotLAIA0Z0krs6RUak/3FbRoFkOERLCco8OnF1xtoDu6cK1VXLG/xkubm5m7O0tnZuW1bdUzMLJW/cnJ2YdpVk+CDmYzIZGGa+xIV3kUSrGjooGlI23l2LPuxEdnY2ovsHW2nOTuIPe2cxaJpzvgqFNm9VyhsKE+mOfiXVzV+Eg9umfiExDNnzvztP//rWX9/t/qluroahuf+3NPLe8i0YeH89QErTHR4/AG25uTmrSoozMnJlcsj1RXzDotldhNyxepRQWDv6iGWhsvzKxfWnM3+8sHi4/15rc8yDt6J3/JVUMoKZ28p+HhPUPipr4pG4fOSRG6BwqJimBkcQL/+6c/dvMvZs2fhz7k7YQ5Y8TsG5vgmOiOVGUppaVlbWxvr0NeuXSsqLlbZW0XlldEoKBrvadgyQpGtWBoRW7o359gjtcnqFx2ynHJHD4nOo1CQP4fm4Pm9Sm6BlatWoZX/4aefKRSgH378kZ+GK1euBEgDWftxcxMzfb4mLgH0qPQE58+f5zn6yZMnVe4/Y89l2n5h6Ss04UASl55ce1EdBEMhyPH+ORUHxIFy3Uah/cwaGoWK4gTW1nnz51Pt29PT8+e//CtNw9OnT/lpOHLkCL9jcHRS7VSRLg4NRXCSz8ioqHv37nWPtNy8eZPrmUIXLqaNl7r95Igt4x2VmNVwb0QOaCVuPeHk6a+rKNjZ2/39p90UB3/9fqetHTsIYl5/L16+pFH4p19/HdEeq1YVcAePmbcnuPWxtbPnCSlEtnaIV7o1W5pbWrj7zzncSVvOwYVvyMvFNzhl9xXNOVDqeH9ceT1iSZ1EIStFTruEq63FrK25eXms9v35l19oGr77/ocRL03W3WokAsz8kFsfZifiK2GzUlBY2D2aZcnSfHbw+1k9bTm+oSobEeIDmFalyRcd7UXYqPquR8tjv3nZOonCjo0ZNArrSxeyth5pamI1bm9v71/+7W8UCn/99/84dfpMR0cHjzHS0jPYXlomo4eMVAwDePvwDFRfunRJQwjud/Wc6+jdfvI2z7AVXJS6ZkG6CHurNHZO82Pv6KTwvM/U+QZkGTqJwrmmVTQK8XNDhjtzL5Wt/O3r1xQKtNP+tKJCnUl27d7NOiLCSdoYDtMcNd86MySE3/zXvn549FbfjitPys8Nu2RZs7Do/Uv81PbroYo16iydceA2TtrJ048nhHR9NyZMjA6Fzquf0ih4eAxzmHFxc9Q1+q3bd1j7qa3dpbIkunae697F1Y0TMwbRWwEZcxMcjLr6NDQ0rjjVr8426noo/wCpumaJ39yi0sZQev0tJVLTfaiveao6kaDk5bqHwrOO9RQH//uPe1j3oLMVCpXtfuHCBe5+6ESDtSDa50SOXjwJAjN90LA+x0+cwNaLF1WnfDkH2tSFpdx0l1Z6/U3WfrIP3Z+37tDczxtiCrcrBzZcpuMzFL+pOae5j1U4csVm3UPh5W/jzf/9827WyAw3ZhyMzJubufsJD49QWbirq4snieBGA0wUWF4hPiFRnVfAVvxLmaH4zLOqy08b2/ou3O190NU9a/Zs1tiUJihwAwV5fqXqiVX2jggOWIXnVBzQPRSetK+jOwgnp2F9c3JKisp2f/DgAXckeGl+vsrCbW1tfF6BgwL6b3XjzdikjgNKJ24/uv2gh7WVNViJrIE/mx1MrDjDCQlVrf7zFcgOfGKUwbXIwQmfIWnS0swv7rIKxxTt0D0UmONLYSG+wy70CLm6q3DtunXMkmjTGzduaJjcSyR+PKNMzFsV3FvSx48fVwkBU8wChw8f4RnK5Bn8Tqo+rSp36Ms59ih1z1XljdPpPvgM5bY84ZYMySzWPRSa6pbSKCxRsO8rtre381+IKg3AXEpLy3gCQ/Tc7IEdVzd6q59/AHuAKCeXnwNWZVLT0thTWgKHjq7yttngmOaKzeoziHYqbOQZa5ohi9M9FMoL42kUDu7MY23dUlWlCQc8NETI2cPy8shIehqLimF/GxE9ixpuiVugsbGRnwO6Mnv37uMOVtI7j1B/GxMSS8PzvnqqenypqcfFd6Y0cbFaVva3i96NG5WjQyEs1IdGAdkE9w6hhhyopAE5HqsAs6tWF7Ux3Qb3tqT7dA/NH+TiCVN4YkYlkbb23GCQHl1O23sdCYU6FGQ55bp6O+rHh5tpGmZFsX3yho0bNeSACwR3AgEzUFBnVFfG2HOoTKatdoFPYN77HnGCpEfobHWOgUfp9bfsnFx1FYWG2jwahRbOfEZ0qEjcNeeApqGwqJjrn5kTUngmJjGnunv7+GqlXXwlEv573yrGHLNLeObUq7w38U7dpx41CpHhEuasxqBAL+5gsFZqxhxn5IaEw25Kid2HzZof5TxpFX2/+3TmDrmjnOrmK8wq3qk40q3JPcnMLzoC4vN0fhbT9ROraRQutYzLDHHWtFWe6J2Sf4CUOddZ3eQGTcQMUPhvPaikITh9FRLI3JbH6jhQHOlJ3HZyRvjc92FC29zZQUzHUFYQr/VqMYcRNXEz6D7orl0rFaCDD9YgpiZzGz1ksfJlGxK2tCIUUBzuQgwBMrIa76ftuz5v7aGQrNVOXgHvz4zno/VDAwx//2l30nxt3ltjRou4xDV85B6eQOWN7DELCeSYn95EqOPqF+IbmyZNWhqqWDMzswjdgXd00jR37/fwkZhXnRtpGv65v1pbFWIOIPLPEiB6V1CInzvzf34enNym3TqNrZ8m+j2fmaRmP49TzQKDgoh5dPJVG0QEBSKCAhFBgYigQERQICIoEBEUiAgKRGPV6+//CBEUiD4MFKSBwakZWUuWrSDiEYXC73LopORU1zeesPPRiFP8Ssoq9jcc/sOqokxFDhGPKBTe/nGzF+UVlZS1njqXnpk9jiiUVXy+snA1cf7vfgfh5e1bU7t3YUr6uKAQFiGv3VNPbKwrsYKfv/RQU/O4oJC/fCX8D3fqX3BIKC3/AKmGs4xs7eznzJ2nyWt2Ka0qKHryTX9KWjpBQXNt3b4zVBaufRTQO8yZx563mKVYRJ0zrVff/XD1eltyShr/kRbl5qHwlqptGtasuGQNyqdnZvGUQazkJnbX4p+Q0HUUVJpsfFE4fOToopxcaGVB4aHDTbh8AcT8+ATeJwv8anbuioyO0SIKN9tvP+jq0XByOkFhXFBYu27Y+wOWLVemUsdaWrV4VgQFnUQBXhpeof3OXdoBVG7YtCA+MTpm1vaanZu2VGElAovKjZti44bN/4eld9Tuqtt/AN4FMUdh0eqCwiIWCrKwiHWVG1AmPSOTjkvyl63A3nr7nsAhbdlaXbJm8BHstesrl+QvQ1yCAnvr6vHVPyCQOx0Zzgn7PNjQWFr26QxP9lM9Pr4SVGNf3f7cvCXcZ/UR7mRmKfbsq8NBmRPzCQpDcQBah/oaPWs2yLh0+eqz5y+xvu2W8s1nCADxeU1ZOW0PlKeaD1f2t6+/R/lHj59eu3GTiQJ6om/6XzzEhmfPqZKU5fYfbLjdce/5y1cvX33Xce/+qdOD7znrf/EtDnf67Hns8H5nFxXKlFcM+zNAu/fsw3rU7X5nNz709PZFMbotEIafYOut9jv48OLb18v/sJLeik4Qm7AeW6kPDYe+pIKVDxSFbdU1uPShsPAINDQs1P3wES5fJgrQ52vX+/kHUO9OY6GQkppGUYJ4U/nUgJv46LEWrGGhgIs+aWGyjcjWydkFVz/WoAI8HQRQQBmYRzzwuG1IqAwQwWxDJ1VegQJbt23H5Y7d4ugwKMJeypzePr59T75p/qqVqjM8Cji7+/V96vEsOBtA1tX9kJqKjePiQDggRdIHigJLaE3mKzYpFBoPHWbG9kwUsB5tiq8LU1KZD8fhKmOhUMB4rDYoeCba/SDj2XuVKGAN88V98B/YD+XJcVywBR/DTIC/PNKEAjGzYvF56bLl+Ly6ZOjPGiQkLQSCODT1OB7OtPXESfq8sAZbqYz3Q80gmo7l5C6Glixdhl4c/rurp5fOICgU4DmYP2ShAHvg+mW+XgkrYWkWCsywEZ4DR6ELqEPhRtutYWfxaQXNHOIVfEbKgyCG1vrKjViJsGBgxv1MuP2HvX34FfevkoCwK9euo5K1u/bMjo1jvROOxAqDo57K7vN2h4YooE1RgGWzt4AC7M11aZToeALu4fLV61QHh44DcSXz4V0PTy+QBN9ABS7btu+gw1KCwqBOnDqD9dKgYA29AoJBdLrMHuQtoEBVHqkBEhmWEPcMH8QNKCktu3GznYp/WXkEagKPiJ4CFYZ7ix74czcEhUHhAsL60IE/rKAJCrAiyjDfYvEWUEBgy4xMuUIBxID0+7/oNCd7YADeV+KPfoF5OxjrcRb76g8QFIZSLKxE7E014ogoUAMA+Ip+mnYM6RmZ+NWoUDh/8TIuSua7efhRQPXQi+Erasjs3YpXl1DV2L23DnVIS8+ktyKExBrkO9QoCH67s3boRdQR8kjgW7Oj9sNF4ey5C5UbNkGbq7Zeb7tJpe+ZWQoNYwUIyV5v3xOsgeVWFhTW7NxFpemjQgFE4icI4rJ/u23GjwI0Z958HAa/ajrWjF9hD53dD+/c/drTS/m4+6zZsUgx0HNtqdqWla3A+SEiRgdBIY4gF9kvDlF/4OCi3DxQgh4E5alw4UNPJtGsSLuRUEQy3nGhCQpUJnbpyjWUxHrYGF4BVxg6Gs1RQJB/6vRZ7AHG0xAF6lLGcZG/YP3jp8+OHmvxYAw4hssjz124RAWG9zu7wRk9XiIYeDcPsln4P2rMA4koqv3+h40rC1enMFzlOAkG9vL2ESj/uE80laaOftaGzximcyGLQWyo7q6mnb0DAkl1W7Hex1fCelPYu4DChs1b5VEx2kdhQULSug3j9VJyWOKzteuYY0FIzNCUuIjJ1JUxN2nLiTNuY/3L7iNMaNu978CChIXjUe/ZcXMQHCDOQEJfUFiEABB+vuPe/Td5o9YHjkLxmvKC4pLxmtsYFBxSd7CxcHVpuDzK189fu0pcmHz2/EXqPhOwQNcQERmt9aO8NVEovP3j+vlLY+fMq9xU9fn6jeM7+d3R2SVrUe6mqmp4iPHQnrqDBxoOj9PO36YoFH6XQ6+t3DRvQQJ5JIZ0EOTpKIICQYGIoEBEUCAiKBARFIgICkQEBSKCAhFBgYigQERQICIoEBEUiAgKRAQFIoICkW6jQBaykIUsZCGLquX/AV+hNQKmXZ8VAAAAAElFTkSuQmCC) ### Using macros for performance Switch to the **Play tab** for quick access to your macros during performance. This keeps your most expressive controls front and center while you're making music. ## For preset creators If you're creating presets for others, macros are essential for making your sounds performance-ready. Well-designed macros turn static presets into dynamic, expressive instruments. Consider what aspects of the sound would be most musical to control, and create macros that enhance the emotional impact of the preset rather than just providing technical adjustments. - Every macro should audibly do something - you should be able to easily hear that something is different moving from 0 to 100% on the macro knob. - Ideally macro names are a single word with no abbreviations - Check how the macros look on both the LAYERS and PEFORM page. Are the names readable or too cluttered? - Avoid technical details in macro names - describe what turning from 0 to 100% does to the patch's sound. For example, 'Pulse' rather than 'L1 LFO', 'Reverb' instead of 'Convol Mix', 'Vibrato' if the properties of increasing the that macro knob adds a vibrato effect. - Something to consider quite often: just like a 'Volume' knob _increases volume_ as you turn it up, so should your macro _increase the property_ of the name you've given. This is more intuitive. For example, set a macro that _decreases_ the gain of a high-shelf filter: call it 'Damp' or 'Muffle' because turning up the macro increases the sense of 'muffle' in the sound. Alternatively, you could invert the macro programming so that it increases the gain of the high-shelf filter. Then, a more appropriate name would be 'Brightness' or 'Highs'. Which inversion to use is up to you and depends on what is important. - Both 0% and 100% on the macro dial should be valid and usable. For example, if at 0% it essentially mutes the instrument, this isn't typically very helpful. Or it's similarly bad if 100% means the instrument is so loud it's clipping the meter. It can occasionally be useful to break this rule in the case of something like a filter cutoff where it's useful to be able to filter out the sound to nothing when recording a performance. - Not all 4 macros have to be used all the time. However, when not using 4, avoid put unused macros between or before active ones. Right-click a macro to Copy Macro and Paste Macro (or Reset Macro) to move macros so that macros are filled from left to right with unused macros at the end. --- # MIDI > Information about MIDI control in Floe Floe is controllable via MIDI in the typical ways you'd expect from a software instrument. ## MIDI CC ### Default MIDI CC mappings Floe applies some default MIDI CC mappings when it starts. These are the defaults out of the box, but you have full control to remove or change them — see the sections below. The default mappings are: - **CC 1 (Modwheel)** — Macro 1 - **CC 7** — Master Volume - **CC 11** — Master Timbre You can disable the whole set via the **Default CC mappings** option in the MIDI CC Assignments panel (or in Preferences). While that option is enabled, the defaults are reapplied every time Floe starts — so removing an individual default mapping only clears it from the current instance. ### MIDI CC Assignments panel You can view and manage all MIDI CC assignments from the **MIDI CC Assignments** panel. Open it from the top-panel menu (the three-dots button). This panel shows every active CC-to-parameter mapping, including which module each parameter belongs to. From here you can pin or unpin mappings, remove them, and toggle the default CC mappings option. ![MIDI CC Assignments panel](/images/screenshots/midi-cc-assignments.png) ### Creating MIDI CC mappings All automatable parameters in Floe can be assigned to a MIDI CC. This allows you to control Floe from a MIDI controller for example. To create a mapping, right-click on the parameter you want to assign and select **MIDI CC Learn**. Then move the control on your MIDI controller that you want to assign to that parameter. This will create a mapping between the parameter and the MIDI CC. You can remove a mapping by right-clicking on the parameter and selecting **Remove MIDI CC**, or by using the trash icon in the MIDI CC Assignments panel. ### How mappings are saved MIDI CC mappings are saved with your DAW project. By default they only apply to the current instance of Floe in your DAW — they won't be applied if you load a new instance. If you want a mapping to apply to every new instance, **pin** it (see below). Preset files do not save MIDI CC mappings. So you can load presets and your MIDI CC mappings will remain. ### Pinning mappings You can **pin** a MIDI CC mapping so that it is automatically applied to all new Floe instances. There are two ways to pin a mapping: - In the **MIDI CC Assignments** panel, click the pin icon next to a mapping. - Right-click a parameter that has a CC mapping and select **Pin MIDI CC**. Pinned mappings are stored globally in your preferences, not in your DAW project. ## Sustain Pedal Floe supports sustain pedal control via MIDI CC-64. When the sustain pedal is pressed, currently held notes will continue playing even after key release, until the pedal is released. This mimics standard piano sustain pedal behaviour. ## Pitch Wheel Floe supports the MIDI pitch wheel. The extent of the pitch bend can be configured individually for each layer by using the pitch bend range parameter on the [Config tab of each layer](/docs/beta/usage/layers#config-tab). This per-layer configuration allows for interesting sound design possibilities. A pitch bend range of 0 will disable pitch bend for that layer. ## Velocity [Each layer](/docs/beta/usage/layers#config-tab) has a customisable velocity-to-volume curve that shapes how hard you play (MIDI velocity) into the volume of each note. ![Velocity to volume curve editor](/images/screenshots/velocity-curve.png) ### How the curve works The horizontal axis is velocity — far left is the softest possible velocity (MIDI value 1), far right is the hardest (MIDI value 127), and higher-resolution velocity from DAWs that support it works too. The vertical axis is the resulting note volume. When you play a note, a red indicator appears at its velocity position on the curve so you can see where you're playing. A straight line from bottom-left to top-right gives a 1:1 response — the harder you play, the louder the note, in equal proportion. By moving, adding, or removing control points (and reshaping the curve between them), you can change this relationship: make soft playing louder than it would be naturally, cap the volume of hard hits, or create a non-linear response that emphasises a particular dynamic range. Setting different curves across the 3 layers also opens up creative sound design — for example, fading one layer in as you play harder while another fades out. By default the curve doesn't start at zero, so even a zero-velocity note still produces a quiet sound. You can drag the left-most point down to silence if you want zero-velocity notes to be inaudible. ### Velocity and multisampled instruments It's worth noting that velocity does more than just control volume. For multisampled instruments that contain separate velocity layers, a note's velocity also selects _which_ sample is played — not just how loud it is. A low-velocity note on a piano, for instance, plays the soft-velocity samples (with their distinct tone and character) rather than a quieter version of the hard-hit samples. The velocity curve only reshapes the volume response; it doesn't change which velocity layer gets triggered. ### Editing velocity curves Find the velocity curve editor on the **Config tab** for each layer. - **Double-click** anywhere on the curve to add a control point (up to 6 per layer) - **Drag control points** to move them - **Drag between points** to adjust curve shape - **Double-click a point** to remove it - **Right-click** for menu options --- # Perform > The distraction-free page for exploring presets and variations The _Perform_ page is Floe's distraction-free home: a place to audition presets, dial-in variations, and play with macros without the fuss of the per-layer or effects controls. The library's background image fills the panel, keeping you connected to the character of the sound. ![Floe's Perform page](/images/screenshots/perform.png) The controls on this page are presented from elsewhere in Floe. Use [Layers](/docs/beta/usage/layers) and [Effects](/docs/beta/usage/effects) to dive deeper into sound design. - Browse through presets using the large chevrons (these perform the same action as the ones in the top panel). - If they were added by the preset author, the Macros can be used to shape the sound. - Use the [_Random Variation_](/docs/beta/usage/randomisation) strip to generate fresh takes on the current sound - the further right you click the wilder the results. Use _Undo_ to go back. - Compare your edits to the original preset using the _Original/Modified_ toggle. This is a simple A/B check to evaluate your edits. - The rightmode bottom box contains the extended preset description/notes. If the preset author didn't specific it, it may contain an automatically generated description that gives a reasonable hint into the preset's characteristics. --- # Presets > How to use Floe presets A preset is a full production-ready setup of all of Floe's parameters and options, along with a name, description, and tags. It's a snapshot of Floe's state ready to be loaded using the preset [browser](/docs/beta/usage/browsers). Presets typically only use instruments and impulse responses from a single sample library. However, using any installed instruments and impulse responses is supported. You can have presets that blend sounds from completely different libraries. ## The preset selector The preset selector sits in Floe's top panel and is your main way to load, navigate and save presets. ![Floe's top panel showing the preset selector](/images/screenshots/top-panel.png) - **Preset name and description** — the dark box shows the current preset's display name and short description. The name is suffixed with _(modified)_ if any parameters have changed since loading. Click anywhere in the box to open the preset [browser](/docs/beta/usage/browsers). Right-click for a small menu to _Load Blank Preset_ (clears all instruments and IRs, resets all parameters to their defaults) or to _Open Containing Folder_ for the current preset on disk. - **/ Previous / Next** — load the previous or next preset. The order respects whatever filters are currently active in the preset browser, so you can quickly audition presets from a chosen library, tag or folder. - **Random** — load a random preset, also respecting the currently selected filters. - **Save** — save the current state as a new preset. Opens the save preset panel where you can choose name, folder, description and tags. - **Load from file** — open a system file picker to load a `.floe-preset` file directly from anywhere on your computer, without needing it to be in one of Floe's preset folders. Useful for trying a preset someone has sent you, or for loading a one-off preset from outside your usual library structure. ## Saving presets Click the save button in the [preset selector](#the-preset-selector) to open the Save Preset panel. ![Floe's Save Preset panel](/images/screenshots/save-preset.png) - **Author** — a free-text field for whoever made the preset. The button next to it remembers the current author as your default, and the button fills the field with that remembered value — useful for tagging all your own presets with the same name. - **Description** — a multi-line description split into two parts: a short part shown next to the preset name in the top panel, and a longer continuation shown on the perform page. To control the split explicitly, press Enter where you want it to break — everything before the newline becomes the short part. Otherwise Floe takes the first sentence (up to a full stop within roughly the first 56 characters) as the short part, and if no sentence break fits it falls back to the last word boundary in that range. If you leave the field blank entirely, Floe generates an auto-description from the preset's contents — instruments in use, looping, sound character, and so on — so even unwritten presets get something meaningful in the top panel and on the perform page. - **Tags** — checkbox-style tags grouped by category (Sound source, Real instrument category, Sound type, and so on). Tags drive the preset browser's filters, so adding accurate tags makes a preset easier to find later. Some categories will grey out remaining tags once a related tag is selected to keep combinations sensible. - **Cancel** — close the panel without saving. - **Overwrite** — only appears when the current state was loaded from an existing preset file; saves over that file in place. - **Save / Save As New** — opens a file picker to choose where on disk to save the `.floe-preset` file. The file name you pick becomes the preset's display name in the browser. The first time you save, the picker opens in a `User` folder inside your default preset folder (created automatically); after that, it remembers wherever you last saved. At a technical level, presets are just portable files (`.floe-preset`) arranged into folders on your computer. You can rename and organise them as you wish using your usual file browser (Finder, File Explorer, etc.) - Floe automatically detects changes in its [preset folders](/docs/beta/usage/folders) and immediately displays the new hierarchy on the preset browser. The name of the preset file is the name you see in Floe's preset browser. The description and tags are stored inside the preset file itself and can only be edited by using Floe to save over the preset. Presets are tiny files - typically just a few kilobytes in size. Even whole banks of presets take up very little disk space. ## Preset banks A _preset bank_ is a small extension to Floe's preset system. Some folders are marked as 'banks' and contain some more [metadata](/docs/beta/develop/develop-preset-packs) such as a description and version. 'Music Box Suite Factory Presets' is a preset bank, for example. (Floe also automatically identifies some well-known factory preset banks that existed before the banks system was added, even without a metadata file present.) --- # Randomisation > How to use Floe's randomisation features to explore new sounds ## Random Variation (PERFORM page) ![The Random Variation strip on the PERFORM page](/images/screenshots/perform-variation-strip.png) The PERFORM page hosts the **Random Variation** strip. Click anywhere on the strip to generate a new variation of the current sound. Where you click matters: - **Further left** stays close to the current preset — small, related tweaks. - **Further right** strays much further — wilder instrument swaps, more effects toggled, bigger parameter moves. Hovering the strip shows a percentage and a short description: _small_, _medium_, _large_, _huge_, or _extreme variation_. The shuffle icon at the left of the strip repeats the most recent amount, so you can keep rolling fresh variations at the same intensity without having to re-click the strip. A Random Variation is built from the last loaded presets — its instruments, parameter values, effects, and macros — rather than from scratch. Concretely, it may: - **Swap instruments**: each layer's instrument is replaced with another one. Closer matches (same library or folder, overlapping tags) are favoured; the strip position controls how far the picker is allowed to roam. - **Add or remove layers**: blank layers may be filled in; populated layers may occasionally be cleared. Filling in is much more likely than emptying out, so wilder variations tend to add detail rather than thin the sound. - **Nudge macros**: a subset of your active [macros](/docs/beta/usage/macros) is shifted by a moderate-to-large amount, picking up the rest of the patch with them. - **Toggle effects**: a small number of effects are flipped on or off — newly enabled effects get a fresh set of randomised parameters (within safe ranges, so you won't get a sudden +30 dB gain blast). - **Shift octaves**: occasionally a layer is transposed up or down an octave or two for flavour. Every variation creates a single undo step, so you can roll variations rapidly and step back to the previous state with the undo button in the top bar. ## All-layers instrument shuffle (LAYERS page) The LAYERS page has a **shuffle button** in the top-right that loads a random instrument into every layer in one go. It's equivalent to clicking each layer's individual shuffle button (see below) in turn. Each layer's selection honours that layer's own browser filters, so if one layer is filtered to a specific library and another to a specific tag, the shuffle respects both at once. ## Per-layer instrument shuffle (LAYERS page) Each layer has its own shuffle button in the layer top controls. It loads a random instrument into that layer only, based on the currently selected filters in that layer's [instrument browser](/docs/beta/usage/browsers). For example, filter a layer to the _Music Box Suite_ library and the layer shuffle will only pick instruments from there. The left/right arrows next to the shuffle button step through the same filtered list one item at a time. ## Effects shuffle (EFFECTS page) The EFFECTS page has a shuffle button in the top-right of the tab bar. It **randomly turns each effect on or off** and **shuffles their order in the rack**. Parameter values inside each effect are left alone, so anything you've dialled in is preserved when an effect is re-enabled later. If you do want more dramatic effect changes — including new internal parameter values — use the [Random Variation](#random-variation-perform-page) strip on the PERFORM page; it'll touch effects as part of the broader patch variation. ## Impulse response shuffle The Convolution Reverb effect's impulse response selector has a shuffle button alongside its menu. Click it to load a random impulse response, honouring the currently selected filters in the [IR browser](/docs/beta/usage/browsers). ## Preset browser shuffle The Presets browser, like every browser, has its own shuffle button to load a random preset from the currently filtered results. The same controls are duplicated above the browser on the main GUI so you can shuffle without opening the browser. Use the filters in the browser to narrow down what _random_ means — for example, only ambient presets from a chosen library. ## Tips - Use browser filters to keep the browser-based shuffles within a chosen library, folder, or tag. - Use the undo button in the top bar to step back through variations — every roll is a single undoable change. --- # Reproducibility > How to make Floe's playback exactly reproducible in a DAW ## At a glance 1. Reset on transport is on by default, so every DAW render of your track already comes out the same. 2. For finer-grained control within a render, set a Reset keyswitch — a MIDI note that restarts the variation wherever you send it (for example, before each MIDI pattern). 3. Pick a Seed to choose which variation plays back; the same seed always produces the same performance. ## Background Floe has several elements that vary between performances, including: - Round robin sample selection - The granular engine's randomised grain properties - The LFO's random waveforms (Random Steps and Random Glide) - Other smaller sources of variation throughout the engine Left alone, these would drift between plays. The Instance Config panel is where you control them — open it from the top-panel menu (the three-dots button). ![Instance Config Panel GUI](/images/screenshots/instance-config.png) ## How it works Although the variation feels random as you play, it actually follows a fixed sequence behind the scenes — round robins step through their samples in a set order, and the randomised elements are drawn from a fixed sequence too. Given the same notes and settings, Floe will always produce the same result, as long as it knows where to begin. By "the same notes" we mean every detail of how they're played: order, timing, length, and velocity all count. Any change between one play and the next sends the variation down a different path from that moment on. So to get a repeatable performance, you put a marker in the sand: a moment that tells Floe "start every variation sequence from here." Every time you hit that marker, Floe rewinds to the same starting point, and the performance that follows will be identical. ## Placing the marker Floe gives you two ways to set the marker — use either, or both at once. The difference is how fine-grained the control is. - Reset on transport — the marker is placed each time the DAW transport starts playing. Enabled by default. There's only one moment of control (the start of playback), but it's enough to make every render of your track come out the same. - Reset keyswitch — a MIDI note that places the marker whenever you send it. Drop a keyswitch before each MIDI pattern and the variation restarts at every one of them, giving you fine-grained control over where reproducibility kicks in. The note itself is consumed and does not trigger any sound. Shown as a blue marker on the on-screen keyboard. ## Seed The seed is a number that picks the starting point for Floe's variation. Each seed gives a different round robin starting position and a different sequence of randomised choices — and the same seed always reproduces the same performance. To explore alternatives, change the seed and replay the same notes; you'll hear a different result that is itself fully reproducible. ## Tips - Reproducibility runs forwards, not backwards. If you're improvising and a particular take sounds great, there's no way to recapture the variation you just heard — Floe doesn't record the path it took. Decide on the part first, then audition seeds against it until you find one that fits. - These settings belong to this specific instance of Floe rather than being a global preference, and they are saved with your DAW session. Loading a preset leaves them untouched, so you can audition presets without losing your reproducibility setup. Different instances in the same project can use different settings. - A single instance only has one seed, so every marker hit within that instance uses the same one. If a seed sounds great under one section of your track but wrong under another, you can either hunt for a seed that works across all your reset points, or load a second instance of Floe for the section that needs its own variation. --- # Changelog > A detailed changelog of all versions of Floe ## 2.0.2 - Fix possible crash when opening the General tab of the preferences panel - Fix crash when installing packages requires more than one file-conflict decision - Fix possible crash when opening file dialogs on macOS: dialogs are now attached to Floe's window as a sheet - Fix package installation issue on macOS when attempting to install to old Mirage folder (admin required) - Improve CPU usage of pitch LFO ## 2.0.1 - Fix crash when trying to install multiple encrypted packages at once - Fix clicks in audio related to using large resonance values in the filters/EQ - Add right-click utilities to Pitch and Detune parameters such as +1 octave - Packager: change how the package name override works to be more intuitive ## 2.0.0 Massive set of new features and improvements. In summary: - UI split into 3 pages: perform, layers, effects - Granular synthesis - Arpeggiators - Visual design improved throughout including displays for filters, EQ, etc. - Improved shape of many parameters - New LFO shapes - New compressor mode - Extra band added to EQ - EQ added to the FX rack - Better settings for MIDI CC setup, and reproducibility - Random variation strip for exploring new presets - New default background image This release includes all changes listed through the beta changelogs: 1.2.0-beta.1, and 2.0.0-beta.1 through to 2.0.0-beta.6: Additionally, this version differs from 2.0.0-beta.6: - New background image - Show Modern compressor Attack and Release as milliseconds instead of percentage - Fix remaining issue with carat position in text inputs - Packager CLI: change to subcommand format: info or pack. ## 2.0.0-beta.6 - Preset favourites now survive re-saving and library updates: each preset file carries a stable UUID embedded by Floe at save time, used as the identity for favourites and the "currently loaded" indicator. Older preset files without an embedded UUID continue to work via a content-derived fallback. Existing favourites are migrated automatically. - Show the revision number of a library/preset in the browsers, e.g. v1.2. - Lua and preset banks: rename `minor_version` to `revision` to better reflect what it means - Fix legacy parameters panel 'Modernise all' sometimes not correctly retaining perfect sound compatibility when macros are involved - Packager CLI: change shape of JSON output - Tweak preset auto-description logic - On the PERFORM page, make the library name use the larger font - Fix buggy multiline text input like the description box on the Save Preset panel - Fix the lowest MIDI velocities mapping slightly too high; velocity 1 now reaches the bottom of the velocity-to-volume curve and the softest velocity layer - Add option to abbreviate parameter names in the DAW - Packager CLI: include preset\_banks in JSON output ## 2.0.0-beta.5 - Higher precision for holding shift while dragging waveform handles (loop, crossfade, offset) - Show 2 decimal places for layer loop points and sample offset - Show 1 decimal places for all percentage parameter printouts to aid precision - Fix recent regression where right-click menu for libraries didn't work - File pickers remember the last folder you used across sessions - Packager CLI: rename flags to singular form (`--library-folder`, `--preset-folder`, `--input-package`, `--output-dir`, `--info-json`), add short aliases (`-l`, `-p`, `-i`, `-o`, `-n`, `-j`, `-e`), rename `--omit-unreferenced` to `--prune`, support `--info-json -` to write JSON to stdout - Fix case where voices weren't retriggering when changing instrument/preset - Tweak PERFORM page layer layout - Fix FX Mix knob not being correct when loading an old preset that has a macro assigned to either Wet or Dry of Convolution, Chorus or Bitcrush FX. - Lua: replace `vignette_intensity` with a `background_overlay` sub-table for tuning the mid-panel vignette (colour, inner radius) and an independent panel tint when this library is the active background - Preset bank `floe-preset-bank.ini` supports an optional `library_for_visuals` field to pick which library's icon/background represents the bank ## 2.0.0-beta.4 - Fix package install failing on Linux in sandboxed environments such as steam-run - Show the underlying error in the notification when a package install fails - Instance Config (reset on transport, reset keyswitch, seed) is preserved when loading presets - Sample library creation: add 'fade\_out\_frames' to add\_region - Expanded arpeggiator Auto Rate from on/off to a menu with speed multipliers (0.25x–4x) and dotted/triplet variants. Note: existing DAW parameter automation written against the old on/off toggle may not behave as expected - Show the auto-picked rate as a read-only readout when Auto Rate is on, instead of greying out the Rate menu - Fix arpeggiator step gate being ignored when the step was followed by tied steps - Fix arpeggiator sliced instrument length and offset not loading from saved state - Show step numbers at the end of tie chains and always label the final step in the arpeggiator overview - Fix missing tooltip on LAYERS page instrument selection buttons - Add mute/solo buttons to the PERFORM page - Minor layout improvements to PERFORM page UI ## 2.0.0-beta.3 - Fix arpeggiator not resetting when loading a preset or changing instruments - Fix AU parameter automation lane order when loading a Floe 1.x session into Floe 2.x - Fix misc VST3/AU format details (clap-wrapper library bump) - Improve tag descriptions and category questions for clarity - Fix preset name not updating when undoing past initial state - Library development: use instrument ID on the library dev panel, not name - Library development: add `kit` tag ## 2.0.0-beta.2 Our biggest update to date. This follows on from 1.2.0-beta.1; we chose to skip 1.2.0 and jump straight to 2.0.0. ### Major new features - Added granular synthesis (including a random detune parameter) - Added EQ to effects rack - Added arpeggiator - GUI: split the single main page into separate Layers, Effects and Perform pages - Added perform page with access to common controls and visual display, with 'Vary' random-variation control replaces the old randomise buttons; click-position strip lets you choose how much to vary - Original/Modified toggle on Perform page to audition the original vs modified preset - 7 new LFO shapes: Random Steps, Random Glide, Pluck, Pluck Sharp, Pulse Narrow, Pulse Wide, Trapezoid - Effects rack improvements: - Bypass button for each effect - Mix knob for each effect - replacing separate Wet and Dry controls where appropriate. Loading presets that were saved with the separate wet/dry parameters are perfectly re-mapped to the new Mix and Output parameters where necessary. Loading an old DAW project with separate wet/dry actives the _legacy parameters_ system. - Bypass-all and remove-all buttons on the effects panel header - Right-click reset menus on effect headings and switchboard buttons - New EQ effect - Improve Stereo Widen effect with Bass Mono and Balanced modes - New Modern compressor algorithm alongside the original - Third EQ band per layer - New EQ band types: low-pass, high-pass and notch - Visual graphs added for the layer filter, effect filter, EQ, LFO, convolution reverb pre-filter/post-shelf, and delay filter. EQ and filter graphs have draggable nodes for editing. - Undo/redo system added - Per-layer stereo width knob - Copy/paste/reset added throughout the GUI on right-click menus: parameters, EQ bands, layer tabs, macros, envelope background, and curve maps - Reproducible playback added. New panel (3-dots menu -> Instance Config) offers features to reset variability in performances so that you can always render the exact same audio from Floe. - Added a new MIDI CC Assignments panel (3-dots menu) for viewing and controls your MIDI CC mappings to Floe parameters - New default background image - Library-provided background images can declare attribution via `floe.set_attribution_requirement`, shown as a subtle credit on the Perform page ### Improvements - Improve parameters: - Filter and EQ frequency controls now use logarithmic mapping - Compressor ratio now skews towards more control for ratios nearer 1:1 - Improved legacy parameter system - Legacy-override params now show a warning badge - Redesigned legacy parameter panel (3-dots menu -> Legacy Parameters) - 'Modernise' feature to convert params from legacy to modern - Effect filter: new 12dB and 24dB low-pass and high-pass types - Layer filter type menu reworked: clearer band-pass names, all-pass removed - New menu option to rescan all libraries and presets - Auto-generated preset descriptions for presets that have none - Quality of life improvements: - 'Unload' x-mark button on instrument selector and IR selector to clear the item - 'Unload all instruments' button on the layers page - Support encrypted packages (`.floe-pkg-enc`) that require a license key to install, with a paste button on the licence key dialog - Fix voices from jumping into the loop region if you toggle the 'reversed' mode of a playing voice. - GUI: improve browsers panels: - Cards are now expand and collapsible, selecting all items in a card is now done with a separate 'All' button. - Left panel (filters) is now dark to better differentiate it and make the cards and icons look nicer. - Sections are collapsed by default, but retains the collapse/expand state across Floe sessions. - Fix toggle not working for Favourites button - Use smaller radius corner rounding for tag buttons to match the rest of the UI - Remove 3-dots menu and instead put the filter selection modes (One, AND, OR) at the top of the filters panel. - Remove dividers between filter sections - Remove "Show Primary Filter Section Header" option. Libraries/folders are now always collapsible - more consistent and intuitive. - Expanded keyboard navigation: section headings, library/preset-bank cards, and filter buttons in the left panel are now reachable with the arrow keys and toggled with Enter - Library development: removed the ability to add custom tags for instruments/IRs. Only tags from the known set are now allowed. This change allowed for simpler and faster code and enforces standardisation. Non-standard tags are now ignored. [https://floe.audio/docs/develop/tags-and-folders](https://floe.audio/docs/develop/tags-and-folders) - Library development: new [`floe-library-inspector` CLI tool](https://floe.audio/docs/beta/develop/develop-libraries#library-inspector) for debugging libraries — dumps the parsed library as JSON or Lua, captures `print()` output, and reports orphan/missing samples - Info panel moved from the top of Floe into a menu item within the 3-dots menu. - The tabs within a layer have been adjusted: MAIN tab now contains the envelope and the filter, and the old 'Play' tab has been renamed CONFIG. - Added ability to reset parameters and groups (try right-clicking on things!) to their default settings OR the settings of the last loaded preset. - Lua: add `vignette_intensity` for controlling background image - Save and load preset functions now remember the folder that you chose and will use that when you next use the action. - LFO: show a warning icon next to the Target label when the selected destination is silent (Filter target with the filter off, or Grain Position target when not in a granular playback mode). - macOS: fix keyboard text input not working in some hosts such as Logic Pro, while still letting the host receive its own keyboard shortcuts ## 1.2.0-beta.1 Small but noticeable improvements - mostly GUI related. Behind the scenes, a huge amount of work has been put into restructuring our GUI system for upcoming features. This is the first step towards the bigger 1.2 update. Help us out by giving this beta a spin and test that it's working well. - GUI: improve crispness of all visuals - GUI: minor visual improvements throughout: even spacing, move layer menu labels to left, standardised colours, updated popup menus, legacy parameters and error panels to the new style - GUI: add instrument info strip with info about sample length, root key, number of samples - GUI: split loop controls into a new Playback tab, ready for new engine mode that need more space - GUI: notifications now appear on top of the window you have open and can be closed - Add 'Copy to Clipboard' for errors - Support installing packages with `.floe-pkg` as well as `.zip` - Help protect against rare edge-case crashes - Fix package installation errors due to a timeout - Fix rare memory bug - Fix possible memory leak related to background images - Fix possible rare crash when closing Floe - GUI: fix some strange behaviours when using the velocity curve map control - Dev-only: support a kind of hot-reload in the standalone version - File pickers: show both Mirage and Floe presets under the same file filter ## 1.1.2 Bug-fixes and robustness. Includes all changes from 1.1.2-beta.1 and 1.1.2.beta.2, plus: - Fix Windows text input - no more duplicate letters, proper focusing and passing keyboard shortcuts back to DAW - Fix some rare edge-case crashes - Fix some rare cases where macro destination changes weren't being applied ## 1.1.2-beta.2 - GUI: improve default size of Floe UI, it now considers the real DPI of the monitor if possible - GUI: only show full paths for preset banks if there's ambiguity - Fix error related to trying to install invalid ZIP files - Windows: fix error related to graphics change in 1.1.2-beta.1 - Linux: changed required glibc from 2.29 to 2.31 - Improve GUI performance slightly (batched draw-calls and smaller memory usage) - Update FLAC library and protect against edge cases - Linux: fix error related to filesystem watching - macOS: fix error related to opening a file dialog - Handle edge cases related to loading images for sample libraries ## 1.1.2-beta.1 - Improve graphics reliability on Windows (use DirectX instead of OpenGL) - GUI: fix the UI keyboard octave offset defaulting to 2 rather then 0 when first loading Floe - Fix possible memory leaks related to graphics (OpenGL texture destroying) and improve error checking - Improve automatic error reporting - Add 'drone' tag ## 1.1.1 - New monophonic mode: latch. The monophonic switch parameter is replaced by a menu with this new option. In latch mode, the note only ends when all notes are released; new key-presses are ignored and the original note continues playing unchanged. - GUI: show more decimal points with very slow LFO rates - GUI: better icon for 'missing library' on the preset browser - Add infrastructure for updating Mirage libraries to backwards-compatible Floe versions of the library. IDs are now used for libraries, instruments and IRs allowing for changing names without breaking backwards compatibility - Add 'fluctuating', 'ringing' and 'whining' tags - Package installation: support upgrading preset banks based on minor\_version field - Package installation: add 'keep both' option when user input is required - Fix EQ parameters sometimes not being correctly applied when changing presets. - Fix some parameters not loading correctly related to the velocity curves - Fix layer voices duplicating when just changing one instrument at a time - Fix error with displaying presets with many unknown libraries - Fix possible hang when installing packages - Fix incorrect loop end\_frame when set in Lua as 0 ## 1.1.0 - Fix pop sometimes possible at ping-pong loop boundary and make adjusting the loop points while playing have less audible artefacts. - Fix sometimes not correctly loading in Reaper or FL Studio, leaving UI looking correct but audio not reflective of the current state. - Fix preset being silent when convolution reverb effect had -inf dB dry level. - Fix possible crash related to file paths on Windows. - Fix possible crash related to error reporting. - Fix possible package installation failure - Fix Mirage presets sometimes being too quiet if they used certain convolution reverb IRs. - Major infrastructure improvements to how we build and release Floe. ## 1.1.0-beta.1 - **Browser UI overhaul** (instruments, presets, IRs) - Filtering mode is now 'one' mode by default, and alternate modes for 'AND' or 'OR' filtering are selected in the 3-dots menu - New 'cards' on left panel for libraries or preset-packs - Full keyboard arrow navigation, enter to select, CTRL+F/CMD+F to focus search box, page up/down, home/end, CTRL+up/down to jump sections - Search for libraries, preset-packs and tags - Favourites system - 'star' items as for easy access later - Scrollbars are less intrusive and only appear when needed - Header is more compact leaving more space for the content - Tooltips no longer get in the way of the browser items - Load images in a background thread so the GUI stays responsive - Uninstall libraries and presets by right-clicking them in the browsers. Or use the Info panel uninstall libraries. - New concept of 'preset banks' - a folder of presets can be tagged as a bank and given more metadata such as a description. To create one add `floe-preset-bank.ini` to a folder of presets. - Press escape on the keyboard to close panels - Increase threads for loading audio up to 75% of CPU cores instead of maximum of 4. - Fix silent output in Ableton Live 10 - Fix rare startup crash (#179) - Add 'Include beta version when checking for updates' preference ## 1.0.6 - Add Reset Audio Engine to the menu for stopping all sound and voices - macOS installer: use different method to try and avoid 'cannot install to system volume' error - Fix rare crash when shutting down Floe on macOS when file-browser is open - Fix rare crash when host sends an out-of-bounds parameter value - Fix 'library not found' error message repeating itself - Fix hover effect for tag button on the Save panel ## 1.0.5 - Fix issue where mute/solo buttons sometimes wouldn't correctly work - Website: improve download page layout - Add additional check for existing Mirage folders, and add ability to run this manually from the menu - Fix potential crash when host has a tempo near to 0 BPM ## 1.0.4 - Add Linux support - CLAP and VST3 ## 1.0.3 - Fix issue with Bitwig, where presets wouldn't sometimes load completely - Fix crackle possible crackle in audio when host uses an odd-sized audio buffer - Fix rare crash when MDATA file is corrupted ## 1.0.2 - Tweak the smoothing of very short attack times to allow for more sharpness - GUI: show more decimal places on parameters for less than 10 ms ## 1.0.1 - Fix crackle in audio when the hosts use audio buffers that are not a multiple of 32 frames. - Fix crackle in Bitwig Studio due to the host not correctly using the thread\_pool extension. ## 1.0.0 - Ready for widespread use. ## 0.12.2-beta - Fix sample offset start being too large and triggering an assertion failure ## 0.12.1-beta - Fix pops and clicks related to note-starting: a regression introduced in 0.12.0-beta ## 0.12.0-beta - Macros parameters: - Bottom GUI panel now has tabs: Play and Macros - Macros parameters allow for controlling multiple other parameters at once with a single knob and with a custom name - On the Macros tab, you can add and remove the parameters that are linked to each macro and control the strength of the link - Add pitch wheel support: configure the bend range using the 'Pitch Bend Range' parameter on each layer. - Add key range controls for splitting the keyboard into zones for each layer. These ranges are shown above the keyboard. They are controlled using new parameters on the Config tab of each layer. - Fix velocity curves being clear when randomising parameters - Add more information to the velocity curve tooltips - New documentation pages for velocity curves - Include instrument/preset descriptions in tooltips for open-browser buttons - Fix window size jumping if the width was exactly 1000 pixels - Fix jumps when first grabbing the resize corner - Improve smoothness of audio processing when using parameter automation; Floe's engine now processes parameter changes at a fixed interval of 32 frames. - Slightly improve top and bottom panel layout and colours - Fix noise caused by reverb history not being cleared when loading a preset - Library creation: support more than 100 velocity layers and add helper functions `midi_range_to_hundred_range` and `midi_range_to_thousand_range` ## 0.11.3-beta - Revert unintended change in intensity of Atan distortion in version 0.11-0 - unfortunately this will make presets/DAW projects (created using Floe 0.11.0-0.11.2) sound different if they used Atan distortion. - Fix regression where GUI might not update when sound is playing - Library creation: add audio\_properties for impulse response for setting gain\_db for IRs ## 0.11.2-beta - Fix rare crash when resizing the GUI to a very small size - Improve UI size control on the preferences panel so that incrementing/decrementing feels more significant - Fix memory leak ## 0.11.1-beta - Add sitemap.xml for the website - Improve the website homepage, installation, mirage, packages, roadmap pages. - Packager tool: - Add ability to merge multiple packages into one - Add ability to output a JSON file with comprehensive information about the package - Improve error reporting: show RAM, let Sentry decide on fingerprint, fix getting reports of crashes from outside of the plugin - Fix a whole bunch of rare crashes - Windows: fix uninstaller not uninstalling some small files ## 0.11.0-beta - Add new velocity -> volume curve for each layer. This replaces the old mapping buttons and the master 'Velo' button. There's now much more control. The old parameters are available in a new 'legacy' parameters section but are no longer used unless loading a DAW preset that uses them. - Add new algorithms to distortion: foldback, rectifier and ring-modulator - Fix LFO and delay time not updating with the tempo - Reduce pops and clicks with high-frequency LFOs, sharp changes in ADSR and some parameter changes - GUI: improve browsers behaviour: - Background darkens when panel is open - New close button on the top right - Remove unnecessary padding around the browser content - Single-click loads an item, double-click loads and closes the browser - Add right-click menu on libraries with option to open the library folder - Add right-click menu to presets and preset folders with option to open the folder, or delete the preset - Improve menus: - Add left/right buttons to all menus on the GUI - Allow most menus to be dragged like a slider to change the value - Add randomise button to convolution IR menu as well as left/right buttons - Make all left/right buttons on the UI the same style - Move the left/right buttons to the right of the menu so it's consistent and easy to click forward and back without having to move the mouse long distances - Make the UI window size buttons consistent with the left/right buttons - GUI: show loop points if an instrument has a single sample with built-in loop - GUI: add resize corner to the bottom right of the GUI window - Add missing tooltips for some preferences - Work-around CLAP Studio One not using the correct threads - GUI: right-click menu for the IR browser with 'unload IR' option - GUI: don't show markers on ADSR when it's inactive - GUI: Instrument browsers now have their own stat for filters (libraries, tags, etc.) allowing for more flexibility particularly with the randomise buttons - GUI: remove option to show/hide the keyboard. It's not often used, and coming soon are new features that only make sense with the keyboard shown. - Fix crash when changing tabs on the 'Legal' tab of the Info panel - Fix presets browser not showing nesting of folder on Windows - Fix rare crash when loading a library on Windows ## 0.10.3-beta - Sample library creation: add 'fade\_in\_frames' to add\_region - GUI: remove the status panel from the browsers, instead, items show a tooltip when hovered for a moment. This make the browsers less cluttered and fixes the issue where the text would be too long to fit in the status panel. - GUI: make sections in the browser collapsible - GUI: improve the layout of the browser filters ## 0.10.2-beta - Fix issue where layer volume would be automatically MIDI learned - Fix some persistent MIDI CCs not being applied ## 0.10.1-beta - Replace 'Reset all parameters' option with 'Reset State' which also clears things such as instruments. - Fix crash with floe-package when using relative paths - Fix possible error with installing/opening preset-browser - Fix a set of possible rare errors ## 0.10.0-beta - Browsers: - Add filters for folders (tree view) - Put tags into categories and add icons - Add 2 filter modes: match-all and match-any, allowing for more powerful filtering. Every filter button has a label showing the number of matching items that dynamically updates as you change the filters. - Fix instrument browser not showing waveform instruments when no Mirage libraries installed - Show library icons for each library used by a preset - Show (?) icon for missing libraries - Add `` filter for items that don't have any tags - Add "Library Developer Panel" on the GUI with tag-builder tool for generating instrument tags in Lua. - Add right-click menu to the instrument browser button with 'unload instrument' option. - Add lock/unlock mode for Save Preset panel for allowing changing presets with it still open - Sample library creation: add support for multiple Lua files by using `dofile()` - Sample library creation: add set\_required\_floe\_version function - Sample library creation: add generated Floe API definition file for Lua Language Server allowing for code completion and documentation as you type - available on the Library Developer Panel - GUI: slightly improved icons - GUI: use same toggle icon for all toggle buttons - GUI: make mute/solo buttons more obvious when they're on - Fix mute/solo buttons not greying out layers - Fix cases where mute/solo button would get stuck on - Fix preset selection buttons not working on the first click due to the scanning not having started. Now, scanning begins when the cursor is hovering over the button. ## 0.9.9-beta - Sample library creation: add start\_offset\_frames to add\_region - Sample library creation: add tune\_cents to add\_region - Normalise waveform GUI so that quiet samples are easier to see - Fix rare crash related to sample library folder scanning ## 0.9.8-beta - Fix rare error on Windows when closing the GUI when there's a file picker open - Fix rare errors in some VST3 hosts - Fix rare crash related to sample library folder scanning ## 0.9.7-beta - Fix rare crash related to closing the GUI on Floe AU - Fix rare crash related to library images - Fix rare crash related to voice stealing - Fix edge cases related to file paths on Windows ## 0.9.6-beta - Check for updates on startup; a small indicator on the Info button will appear - leading to more information on the Info panel. Can be disabled in the preferences. - Fix file picker on Windows not opened when there's missing folders - Fix rare crash in Floe AU in Ableton Live ## 0.9.5-beta - Fix potential crash in Floe AU format - Fix errors related to filesystem watching on Windows - Fix error related to sample library folders - could happen when installing a package ## 0.9.4-beta - Offer separate downloads for Intel and Apple Silicon Macs rather than a universal binary, this reduces the size of the download to ~50 MB. - Fix missing diagnostic information on macOS ## 0.9.3-beta - Fix more errors with threads - Fix memory leaks - Fix some edge cases with certain hosts - Improve automatic error reporting allowing us to fix bugs faster - Protect against hosts that try to use multiple main threads ## 0.9.2-beta - Slightly improve performance of Intel Mac builds - Fix crash with Intel Mac builds - Fix errors with threads ## 0.9.1-beta - AU: fix crash when trying to open the file/folder picker - Fix missing logo on macOS ## 0.9.0-beta - Library creation: fix specifying loop end points relative to the end of the file. - Library creation: replace always\_loop, never\_loop field with enum `loop_requirement`. - Library creation: add round\_robin\_sequencing\_group field to allow for different sets of variations. - Library creation: separate note-off round-robin sequencing group from note-on round-robin sequencing group. - Library creation: disable volume envelope for note-off regions - Library creation: improve memory usage when reading Lua scripts - Library creation: fix crash when an image file is empty - VST3: fix not responding to note-on/note-off messages when they weren't on channel 0 - GUI: on the Save Preset dialog, add the ability to store/load a preset author - GUI: make the Save Preset dialog larger and scroll to top when a new preset is loaded - Fix potential crash when reporting an error - Rename parameter right-click menu Set Value to Enter Value - Support CLAP reset() function ## 0.8.3-beta - Fix crash when error occurs in the Windows native file picker - Fix crash when given invalid arguments to CLAP activate - Fix crash when opening VST3 in FL Studio on Windows ## 0.8.2-beta - Fix crash when trying to randomise instruments, presets or IRs when there's only one of them - Fix presets folder still showing tags after a folder is removed. #120 - Fix crash when first opening the GUI ## 0.8.1-beta See the [main release notes](https://github.com/floe-audio/Floe/releases/tag/v0.8.0-beta). - Fix issue where Mirage and Floe libraries with the same name would conflict ## 0.8.0-beta First beta release of Floe. This release is feature-complete. We are looking for feedback on the new features and any bugs you find. - Add AU (Audio Unit v2) support - Brand new instrument browser supporting tags, search, and filtering by library - Brand new impulse response browser featuring all the options of the instrument browser - Brand new preset browser with tags, search, and filtering by library. Preset metadata is tracked, library information is tracked, file changes are detected, duplicate presets are hidden. - New built-in convolution reverb impulse library with 33 impulse responses - New save preset dialog with author, description, and tags - Fix instrument left/right and randomise buttons - Fix instance ID not retaining - Fix freeze when trying to resize GUI - Fix GUI opening but only ever showing black - Fix randomise parameters Note: we have jumped from 0.0.7 to 0.8.0. This is to signify the change from alpha to beta but also because it wasn't really right in the first place only incrementing by the patch number. To make the jump obvious we start the minor version at 0.8.0 rather than 0.1.0. ## 0.0.7-alpha The focus of this version has been bug fixes; in particular around loading Mirage libraries and presets. - Max voice is increased from 32 to 256 allowing for more complex instruments - Show the instrument type on the GUI: single sample, multisample or oscillator waveform - Rename 'Dynamics' knob to 'Timbre' and fix its behaviour - for instruments such as Arctic Strings, it can be used to crossfade between different sets of samples. - Fix missing code signing on Windows installer resulting in 'Unknown Publisher' warning - Fix layer filter type menu being the incorrect width - Fix crash when loop points were very close together - Improve loop modes on GUI: it's obvious when a loop is built-in or custom, what modes are available for a given instrument, why loop modes are invalid. - Add docs about looping - Fix sustain pedal incorrectly ending notes Mirage loading: - Fix incorrect loading of Mirage on/off switches - resulting in parameters being on when they should be off - Fix incorrect handling of Mirage's 'always loop' instruments - Fix incorrect conversion from Mirage's effects to Floe's effects - Improve sound matching when loading Mirage presets - Fix failure loading some FrozenPlain Squeaky Gate instruments Library creation: - Re-organise the fields for add\_region - grouping better into correct sections and allowing for easier expansion in the future. - Sample library region loops now are custom tables with `start_frame`, `end_frame`, `crossfade` and `mode` fields instead of an array. - Add `always_loop` and `never_loop` fields to sample library regions allowing for more control over custom loop usage on Floe's GUI. - Show an error if there's more than 2 velocity layers that are using 'feathering' mode. We don't support this yet. Same for timbre layers. ## 0.0.6-alpha - Add VST3 support - Standardise how tags and folders will be used in instruments, presets and impulse responses: [https://floe.audio/develop/tags-and-folders.html](https://floe.audio/develop/tags-and-folders.html) - Fix sustain pedal - Remove 'retrig CC 64' parameter from layer MIDI. This was mostly a legacy workaround from Mirage. Instead, we just use the typical behaviour that when you play the same note multiple times while holding the sustain pedal, the note plays again - stacking up. - Fix package installation crash after removing folders - Fix markers staying on ADSR envelope even when sound is silent - Fix MIDI transpose causing notes to never stop - Fix peak meters dropping to zero unexpectedly - Fix not finding Mirage libraries/presets folders ## 0.0.5-alpha - Fix text being pasted into text field when just pressing 'V' rather than 'Ctrl+V' - Windows: fix unable to use spacebar in text fields due to the host stealing the keypress - Fix crash when trying to load or save a preset from file - Improve the default background image ## 0.0.4-alpha Fix crash when opening the preset browser. ## 0.0.3-alpha Version 0.0.3-alpha is a big step towards a stable release. There's been 250 changed files with 17,898 code additions and 7,634 deletions since the last release. It's still alpha quality, and CLAP only. But if you're feeling adventurous, we'd love for you to try it out and give us feedback: - [Download Floe](https://floe.audio/installation/download-and-install-floe.html) - [Download some libraries](https://floe.audio/packages/available-packages.html) - [Install libraries](https://floe.audio/packages/install-packages.html) Error reporting has been a significant focus of this release. We want to be able to fix bugs quickly and make Floe as stable as possible. A part of this is a new a Share Feedback panel on the GUI - please use this! Floe's website has been filled out a lot too. New/edited documentation pages: - [Floe support for using CC BY libraries](https://floe.audio/usage/attribution.html) - [Autosave feature added](https://floe.audio/usage/autosave.html) - [New error reports, crash protection, feedback form](https://floe.audio/usage/error-reporting.html) - [New uninstaller for Windows](https://floe.audio/installation/uninstalling.html) ### Highlights - Add new Info panel featuring info about installed libraries. 'About', 'Metrics' and 'Licenses' have been moved here too instead of being separate panels. - Add new Share Feedback panel for submitting bug reports and feature requests - Add attribution-required panel which appears when needed with generated copyable text for fulfilling attribution requirements. Synchronised between all instances of Floe. Makes complying with licenses like CC BY easy. - Add new fields to the Lua API to support license info and attribution, such as CC BY - Add lots of new content to floe.audio - Add error reporting. We are now better able to fix bugs. When an error occurs, an anonymous report is sent to us. You can disable this in the preferences. This pairs with the new Share Feedback panel - that form can also be used to report bugs. - Add autosave feature, which efficiently saves the current state of Floe at a configurable interval. This is useful for recovering from crashes. Configurable in the preferences. - Add a Floe uninstaller for Windows, integrated into Windows' 'Add or Remove Programs' control panel - Preferences system is more robust and flexible. Preferences are saved in a small file. It syncs between all instances of Floe - even if the instances are in different processes. Additionally, you can edit the preferences file directly if you want to; the results will be instantly reflected in Floe. - Improve window resizing: fixed aspect ratio, correct remembering of previous size, correct keyboard show/hide, resizable to any size within a reasonable range. ### Other changes - Add support for packaging and installing MDATA libraries (Mirage) - Add tooltips to the preferences GUI - Add ability to select multiple packages to install at once - Rename 'settings' to 'preferences' everywhere - Rename 'Appearance' preferences to 'General' since it's small and can be used for other preferences - Make notifications dismiss themselves after a few seconds - Fix externally deleted or moved-to-trash libraries not being removed from Floe - Fix not installing to the chosen location - Fix Windows installer creating nonsense CLAP folder - Fix packager adding documents into the actual library rather than the package ## 0.0.2 - Fix Windows installer crash - Don't show a console window with the Windows installer - Better logo for Windows installer - Remove unnecessary 'Floe Folders' component from macOS installer ## 0.0.1 This is the first release of Floe. It's 'alpha quality' at the moment - there will be bugs and there are a couple of missing features. This release is designed mostly to test our release process. This release only contains the CLAP plugin. The VST3 and AU plugins will be released soon. ## Mirage Floe used to be called [Mirage](https://floe.audio/about-the-project/mirage.html). Mirage contained many of the same features seen in Floe v0.0.1. But there are large structural changes, and some new features and improvements: - Use multiple different libraries in the same instance. - CLAP version added - VST3 and AU coming soon, VST2 support dropped. - New installer: offline, no account/download-tickets needed. Libraries are installed separately. - Ability for anyone to develop sample libraries using new Lua-based sample library format. The new format features a new system to tag instruments and libraries. Hot-reload library development: changes to a library are instantly applied to Floe. - New [comprehensive documentation](https://floe.audio). - Floe now can have multiple library and preset folders. It will scan all of them for libraries and presets. This is a much more robust and flexible way to manage assets rather than trying to track individual files. - New, robust infrastructure: - Floe settings are saved in a more robust way avoiding issues with permissions/missing files. - Improved default locations for saving libraries and presets to avoid permissions issues. - New format for saving presets and DAW state - smaller and faster than before and allows for more expandability. - New settings GUI. - Floe packages: a robust way to install libraries and presets. Floe packages are zip files with a particular layout that contain libraries and presets. In the settings of Floe, you can install these packages. It handles all the details of installing/updating libraries and presets. It checks for existing installations and updates them if needed. It even checks if the files of any existing installation have been modified and will ask if you want to replace them. Everything just works as you'd expect. Technical changes: - Huge refactor of the codebase to be more maintainable and expandable. There's still more to be done yet though. - New build system using Zig; cross-compilation, dependency management, etc. - Comprehensive CI/CD pipeline for testing and creating release builds. - New 'sample library server', our system for providing libraries and audio files to Floe in a fast, async way. --- # Developing Libraries for Floe > Guide on how to create sample libraries for Floe using Lua scripting This page explains how to develop sample libraries for Floe. Creating sample libraries for Floe **requires programming knowledge**. While Floe itself is designed for all musicians, developing libraries involves writing Lua scripts to configure and map audio files. This programming-first approach enables automation, version control integration, AI-assisted workflows, bulk operations — scaling all the way to very complex libraries. It also allows creating custom functions for sample-mapping, normalisation, pitch-correction, and building instrument variations - a level of flexibility that cannot be achieved with UI-based sample-mapping tools. In the future, we're looking at tools that convert/generate Floe Lua scripts to allow non-programmers to create libraries. note We made these tools for our own use and are sharing them with the community. Consider contributing or [sponsorship](/docs/about-the-project/sponsorship) if you'd like to see further investment in this area. ### What you'll need - Tools and experience writing and editing code - Understanding of sample mapping concepts (key ranges, velocity layers, etc.) - It's recommended to have experience programming other samplers like Kontakt, SFZ, Decent Sampler, etc. ## Floe's sample library format Floe's format is designed for configuring audio files into playable instruments. It does not add any audio-manipulation or custom GUIs. Floe has a ready-to-use GUI and lots of audio parameters. In the future we might add more advanced scripting/GUI creation features to the format. The format is designed to be extended whilst retaining backwards compatibility. Floe's sample library format currently supports the following features: - Velocity layers - Round-robin - Crossfade layers - Loop points with crossfade - Convolution reverb IRs - Velocity layer feathering - Trigger samples on note-off As someone in the community put it, our format is essentially _'[SFZ](https://sfzformat.com/) in Lua so you don't lose your mind'_ - which captures the gist pretty well. _The basics are covered, but there are plenty of features that other samplers might have that Floe doesn't. We expand our format to meet the needs of our products rather than add add things that we don't currently need._ ### Why a new format? No existing format met our requirements for Floe, which are: - Libraries should be plain folders of audio files. - Libraries should be portable across filesystems & operating systems. - Libraries should be configured using a proper programming language to enable creating complex libraries in a maintainable way. - The format should be extensible - allowing us to innovate in the field of sampling. - The solution should easily integrate into Floe's codebase. We're not trying to replace existing formats or create a new standard. Instead, our custom format is specifically designed to align with Floe's architecture and philosophy, enabling us to rapidly develop and deliver the high-quality sample libraries our users deserve. ### Developer friendly Floe's format is designed to be developer-friendly. It plays well into the tooling and experience of people who are used to dealing with code: - Works with version control: libraries are just folders of files, they're portable across filesystems and operating systems. - Hot reloading: Floe automatically reloads the library whenever you change a file: Lua, audio, or images. It creates a very fast feedback loop. If a change isn't picked up, use the top panel's 3-dots menu → Rescan Libraries & Presets to force a rescan. - Uses a full programming language: Lua is simple, powerful, and widely used. You can use variables, functions, loops, and conditionals to configure your library. - Floe's Lua API is simple and concise. - [`floe-library-inspector`](#library-inspector) CLI tool dumps the parsed library as JSON or Lua so you can verify exactly what Floe loaded — useful for debugging without launching the plugin. ## The structure Let's look at the structure of a Floe sample library: ``` 📂FrozenPlain - Slow/├── 📄slow.floe.lua├── 📄Licence.pdf├── 📄About Slow.html├── 📁Samples/│ ├── 📄synth_sustain_c4.flac│ └── 📄synth_sustain_d4.flac└── 📁Images/ ├── 📄background.png └── 📄icon.png ``` There's only one essential part of a Floe sample library: the `floe.lua` file. This file can have a custom name so long as it ends with `.floe.lua` - for example, `woodwind-textures.floe.lua`. The rest of the structure are conventions that are recommended but not required: - **Licence**: Sample libraries are recommended to have a file called Licence that describes the terms-of-use of the library. It can be any format: PDF, TXT, etc. - **About**: A file that describes the library. Any file format. Information about a library is useful for when someone might not have Floe's GUI available. Use this document to explain what the library contains, website links and any other information that might be useful. Floe's [packager tool](/docs/develop/packaging#packager-command-line-tool) can automatically generate this file. - **Library folder name**: The folder containing the `floe.lua` file should be named: "Developer - Library Name". - **Subfolders**: Subfolders are up to the developer. We recommend 'Samples' for audio files and 'Images' for images. These can have any number of subfolders. Your `floe.lua` file can reference any file in these subfolders. ## The `floe.lua` file The `floe.lua` file is the most important part of a library. It's a script that maps and configures the audio files into playable instruments, written in the Lua 5.4 programming language. This file uses [Floe's Lua functions](/docs/develop/library-lua-scripts) to create the library, create instruments, and add regions and impulse responses. It can reference any file in the library using relative paths. Here's a made-up example of a `floe.lua` file: ``` local library = floe.new_library({ name = "Iron Vibrations", tagline = "Organic sounds from resonating metal objects", library_url = "https://example.com/iron-vibrations", description = "A collection of resonating metal objects sampled using a handheld stereo recorder.", author = "Found-sound Labs", id = "Iron Vibrations - Found-sound Labs", author_url = "https://example.com", revision = 1, background_image_path = "Images/background.jpg", icon_image_path = "Images/icon.png", background_overlay = { vignette = { colour = 0x00000066, inner_radius = 0.2, }, panel_tint = { colour = 0x0000000D, }, }})local instrument = floe.new_instrument(library, { name = "Metal Fence Strike", id = "Metal Fence Strike", folder = "Fences/Steel", description = "Tonal pluck metallic pluck made from striking a steel fence.", tags = { "found sounds", "tonal percussion", "metal", "keys", "cold", "ambient", "IDM", "cinematic" }, waveform_audio_path = "Samples/file1.flac",})floe.add_region(instrument, { path = "Samples/One-shots/Resonating String.flac", root_key = 60, trigger_criteria = { trigger_event = "note-on", key_range = { 60, 64 }, velocity_range = { 0, 100 }, velocity_range_high_resolution = { 0, 1000 }, round_robin_index = 0, round_robin_sequencing_group = "group1", feather_overlapping_velocity_layers = false, auto_map_key_range_group = "group1", }, loop = { builtin_loop = { start_frame = 24, end_frame = 6600, crossfade = 100, mode = "standard", lock_loop_points = false, lock_mode = false, }, loop_requirement = "always-loop", }, timbre_layering = { layer_range = { 0, 50 }, }, audio_properties = { gain_db = -3, start_offset_frames = 0, tune_cents = 0, fade_in_frames = 0, fade_out_frames = 0, }, playback = { keytrack_requirement = "default", }, slices = {}, loop_beats = 4, native_bpm = 120,})floe.add_ir(library, { name = "Cathedral", id = "Cathedral", path = "irs/cathedral.flac", folder = "Cathedrals", tags = { "acoustic", "cathedral" }, description = "Sine sweep in St. Paul's Cathedral.", audio_properties = { gain_db = -3, },})floe.set_attribution_requirement("Samples/bell.flac", { title = "Bell Strike", license_name = "CC-BY-4.0", license_url = "https://creativecommons.org/licenses/by/4.0/", attributed_to = "John Doe", attribution_url = "https://example.com",})floe.add_named_key_range(instrument, { name = "Extended Notes", key_range = { 80, 128 },})floe.set_required_floe_version("2.0.2+f4ca1ba2")local extended_table = floe.extend_table({ foo = "" }, {})local hundred_range = floe.midi_range_to_hundred_range({ 0, 127 })local thousand_range = floe.midi_range_to_thousand_range({ 0, 127 })return library ``` `floe.new_library()` must be called and returned it at the end of the script. All other features are optional. When Floe runs your Lua file, it will show you any errors that occur along with a line number and a description. ## How to get started 1. Create a new folder in one of Floe's [sample library folders](/docs/usage/folders). We recommend naming it 'Author Name - Library Name'. 2. Create a file in that folder called `my-library.floe.lua`. 3. Create a subfolder called `Samples` and put your audio files in there. 4. Open the Lua file in your text editor. If you're not already familiar with an editor, then Sublime Text or Visual Studio Code are reasonable choices. 5. Use the `floe.new_library()` function to create your library, filling in all the fields marked `[required]` in the [Floe's Lua reference](/docs/develop/library-lua-scripts). 6. Use `floe.new_instrument()` to create an instrument, and then add regions to it using `floe.add_region()`, again, filling in the fields that are documented. 7. At the end of the file, return the library object you just created: `return library`. 8. Floe automatically detects whenever any library file changes and will tell you if there's any errors. If a library is correctly configured, it will instantly appear in Floe. For a fuller view of what was parsed — regions, loop points, missing samples — run [`floe-library-inspector`](#library-inspector). ### Approach to sample mapping You can start by manually writing individual `add_region` calls for each sample, filling out the required information as you go. When things start getting repetitive or you need to apply consistent logic across many samples, you'll want to leverage Lua's programming features: - **[Signet](https://github.com/SamWindell/Signet)** to analyse your samples and generate metadata files - **Variables and tables** to store information about your samples - **Loops** to process multiple samples with the same logic - **Functions** to calculate parameters like tuning, velocity ranges, and key ranges - **Pattern matching** to extract information from filenames This programming approach can make it much more practical to work with larger sample sets - you write the mapping logic once and let the code apply it to all your samples. ## Using Signet The command line tool [Signet](https://github.com/SamWindell/Signet) in an excellent aid for developing Floe samples libraries. Signet can export data about your samples in Lua format which you can then use in your `floe.lua` file using `dofile`. For example, this file is generated by Signet: ``` -- signet . print-info --format lua --path-as-key -- NOTE: Signet can also detect the pitch of your samples when -- you use the `--detect-pitch` flag with print-info.return { ["my-sample-a.flac"] = { bit_depth = 16, channels = 2, crest_factor = 16.5734, crest_factor_db = 24.3883, frames = 208341, length_seconds = 4.34044, metadata = nil, peak_db = -3.00036, peak_frame = 5927, rms_db = -27.3886, sample_rate = 48000 }, ["my-sample-b.flac"] = { bit_depth = 24, channels = 2, crest_factor = 8.90268, crest_factor_db = 18.9904, frames = 2299122, length_seconds = 47.8984, metadata = nil, peak_db = -3, peak_frame = 877676, rms_db = -21.9904, sample_rate = 48000 },} ``` Then in your Floe Lua file you have access to all the information about your samples allowing you to easily create instruments and regions. With the features of a full programming language and Floe's hot-reloading of scripts, it's easy to create complex configurations and bulk-tweak tuning, normalisation, loop points, and other parameters of an instrument. For example, normalising all samples to a target level can be done using a simple calculation based on the sample's `peak_db` value. We often find it's useful to partially move levels towards a target level rather than fully normalising them in order to retain some of the character of the instrument. This can be computed in the Lua and tweaked as needed, with the results being immediately audible in Floe. Floe doesn't generate this kind of audio data for you because it can be slow to scan large folders of samples. It's better for the sample library developer to generate it once with Signet and bake it into a Lua file, instead of the sample library users having to wait every time they load the library. ## Library inspector `floe-library-inspector` is a small CLI tool for debugging libraries. It parses your library and dumps everything Floe loaded as JSON (or Lua with `--format=lua`) — surfacing parse errors, captured `print()` output, and any orphan or missing audio files. _Downloads will appear here with the next beta release._ ``` Inspect a Floe sample library and dump structured information to stdout.Output includes library metadata, captured Lua print() output, parse errors,instruments, regions, IRs, and orphan/missing sample files. Defaults to JSON;use --format=lua for a loadable Lua chunk.Useful when developing or debugging sample libraries: it surfaces parse errorsalongside everything Floe actually loaded, so you can sanity-check the resultof your Lua script. The JSON output is also well-suited as input to AI agents.Examples (piping JSON output into jq): # Check whether the library parsed and show any error: floe-library-inspector ./my-lib/my-lib.floe.lua | jq '.parse' # Top-level library metadata (name, author, version, counts): floe-library-inspector ./my-lib/my-lib.floe.lua | jq '.library' # List orphan and missing sample files: floe-library-inspector ./my-lib/my-lib.floe.lua | jq '.samples' # List every instrument id and how many regions it has: floe-library-inspector ./my-lib/my-lib.floe.lua \ | jq '.instruments[] | {id, num_regions}' # List every sample path referenced by an instrument: floe-library-inspector ./my-lib/my-lib.floe.lua \ | jq -r '.instruments[].regions[].sample_path' # Show the key/velocity range of every region of an instrument: floe-library-inspector ./my-lib/my-lib.floe.lua \ | jq '.instruments[] | select(.id=="My Inst") | .regions[].trigger' # List IR ids and their file paths: floe-library-inspector ./my-lib/my-lib.floe.lua | jq '.irs[] | {id, path}'Usage: floe-library-inspector [OPTIONS]Optional arguments: --format Output format: 'json' (default) or 'lua'. Lua output is a single `return { ... }`chunk loadable with Lua's load()/dofile(). ``` ## Creating high-quality samples ### Levels It's important to ensure your audio samples have the the right levels. This makes browsing and switching samples in Floe a consistent, nice experience. Additionally, Floe offers the ability to layer sounds together; this process is more ergonomic when instruments have similar volume levels. [Signet](https://github.com/SamWindell/Signet) can be a useful tool for changing the levels of your samples. When changing the volume levels of a realistic multi-sampled instrument, you probably don't want to normalise each sample individually because part of the character of the instrument is its volume variation. Instead, you should change the gain of the instrument _as a whole_. Signet has features for this. It also has features for proportionally moving levels towards a target level. This allows you to keep some of the character of an instrument while nudging it towards a more consistent level. Here are some guidelines for levels: - Each sample's peak level should be less than -3 dB. - Playing the instrument should barely cause Floe's peak meter to reach its yellow region. Another way to levels could be this: RMS levels for an instrument _as a whole_ should be around -18 dB. Play the instrument polyphonically and watch the RMS level. If the instrument is designed to be monophonic, then adjust for that. - The noise floor should be as low as possible: -60 dB is a good target. Use high-quality noise reduction tools to remove noise from your samples if you need to. Noise levels can quickly stack up with a multi-sampled instrument played polyphonically. Being too aggressive with algorithmic noise reduction can make your samples sound unnatural - so it's a balance. - Impulse responses should be normalised by their energy (power) levels: `signet my-impulses norm -100 --mode energy --independently && signet my-impulses norm 0`. Or if not using Signet, then adjust their levels so that they feel similar to the volume levels of Floe's built-in IRs. ### Sample rate, bit depth, and file format Floe only supports FLAC and WAV files. We recommend using FLAC for your samples. It's lossless and can reduce the file size by 50% to 70% compared to WAV. Floe loads FLAC files very quickly. We find 44.1 kHz and 16-bit is often a perfectly reasonable choice. 48 kHz and 24-bit might also be appropriate in certain cases. FLAC also supports bit-depths between 16 and 24 bits (such as 20-bit). Floe supports these too. ### Volume envelopes of samples Floe blurs the line between a sampler and a sample-based synthesizer. It has lots of parameters for manipulating the sound in real-time. If your sample is a single continuous sound, then don't include a fade-in or fade-out in the sample. Floe has a GUI for volume envelopes that offer more control: they can be adjusted to any value, automated by the DAW, and they are independent of the playback speed of the sample. If you have a sample that is stretched across a keyboard range, it will be sped-up or slowed-down in order to be the correct pitch. If there's a volume fade, then the speed of the fade will change depending on the pitch of the voice. This is not normally a desirable effect. If your sound has important timbral variation over time, then don't cut that away. Only if the sound is a constant tone should you remove the fade in/out. ## Background images Floe allows libraries to have a custom background image that appear behind the interface when the library is loaded. These images are configured in your [Lua script](/docs/develop/library-lua-scripts) through Floe's `new_library` function. Floe accepts any image. It uses "cover" scaling with top-left positioning — in other words, it scales up the image (maintaining its aspect ratio) until it covers the entire background of Floe. However, for optimal results consider these characteristics: - Roughly 16:9 aspect ratio to match the plugin GUI proportions - Approximately 1500 pixels wide as a starting point (consider high-DPI displays) - Consistent colour palettes and brightness levels throughout the image - Darker or mid-tone images rather than bright ones for better text readability - Avoid dramatic contrasts between very dark and very bright regions The most critical consideration is interface readability. Since Floe's knobs, buttons, and text render on top of your background image, the image needs consistent tones to ensure controls remain clearly visible. While some variation is acceptable, remember that interface legibility is paramount. Additionally, Floe has options to add a coloured vignette on the background image and an overlay tint to its blurred panels via options in the Lua code. Experiment with these options, starting with very transparent colours. --- # Develop Preset Banks > Best practices for developing preset banks for Floe Floe's preset management is open; it's just based on the files and folders on your computer. Presets are saved as individual files using the save button at the top of Floe's UI. These files can be freely renamed and put into subfolders; this is how categories and hierarchies are created in the preset browser. ## Preset Banks A _preset bank_ is small, optional, extension to this concept. By creating a `floe-preset-bank.ini` inside a folder of presets, it becomes a preset bank, where the entire tree of presets in the folder and all its subfolders become more easily identifiable and can feature metadata such as a subtitle and ID. Creating a bank is normally a good idea for custom presets: the preset browser can isolate the bank, present it with the best name, and surface it at the top level. In the preset browser, the icon for the bank is taken from the sample library used by the bank's presets. If the bank contains presets that depend on multiple different libraries, a 'mixed' icon is shown instead to denote that the bank spans more than one library. Alternatively, you can instruct Floe using the _preset bank file_ to use the visuals from a given library ID. The _preset bank file_ is a simple INI text file with the following fields - all are optional: ``` ; A short and descriptive name for the preset bank.subtitle = My Preset Bank Name; Any kind of unique identifier. Typically you might use a reverse; domain style string. Used so Floe can identify the bank uniquely.id = com.myname.mypresetbank; A revision number - just a single integer. When installing a; package, Floe can use this alongside the ID to determine if a bank; can be updated rather than installed to a new location. Revisions; are only designed for simple additions/fixes. If you make major; changes, it's probably better to create a new preset bank,; "My Bank 2", with a new ID. On the preset browser, this number will; be displayed with a 'v1.' prefix to make it clear to users that the; change is incremental and backwards-compatible.; The key `minor_version` is also accepted for this.revision = 1; The id_string of an installed sample library whose icon should; represent this bank in the preset browser. If omitted, or if the; library isn't installed, Floe falls back to deriving the icon from; the libraries used by the bank's presets.library_for_visuals = FrozenPlain - Slow ``` You can create this INI file with any text editor such as Notepad or TextEdit. You just need to type in the various `field = value` with new lines between them. A side note for the particularly discerning user: Floe automatically identifies some well-known factory preset folders as preset banks even without the metadata file present. This is because some banks were created before the preset bank feature was added. We chose to enrich them with metadata retroactively. ## Packaging Once you've created your folder of presets and added a `floe-preset-bank.ini` file (optional but recommended), you can package it up for distribution. Read about packaging on the [packaging](/docs/develop/packaging) page. Use the packager command-line tool, or alternatively package it manually. To manually package your bank first rename your bank folder to something like `My Preset Bank`. Next, put that into a folder called `Presets`. Next, put `Presets` into another folder `My Preset Bank - Floe Package`, then right-click and ZIP that folder. You should now have a ZIP called `My Preset Bank - Floe Package.zip` with a subfolder `Presets` and your bank folder inside that. Rename the `.zip` to `.floe-pkg`. The resulting file will contain the structure that _Floe packages_ require (Presets subfolder at the top level). Test your package by trying to install it using Floe's _Install package_ button. Refer to the packaging page for more details if needed. ## Best Practices - Make presets all feel the same volume: the master peak meter on Floe's GUI should just be the yellow zone when the preset is played at its fullest. - Give each preset a unique, descriptive name suggesting its tone or usage. Don't use all capital letters. Don't include a 'type' prefix such as "PAD - " or "LD - ". - Add as many tags as is relevant to the preset. Read more about tags on the [tags and folders](/docs/develop/tags-and-folders) page. - Keep the description short and ending with a period. - Organise presets into folders using your file browser. You can rename presets and folders as you like. See the best practises for folders on the tags and folders page. --- # Library Lua Scripts > Documentation for the Lua API used to create Floe sample libraries The `floe.lua` file is the most important part of a Floe sample library. This page serves as documentation for all the functions that you can use in your script to create and configure the library and its instruments. Floe runs your script using Lua v5.4, providing you with access to these [standard libraries](https://www.lua.org/manual/5.4/manual.html#6): `math`, `string`, `table` and `utf8`. The other standard libraries are not available - including the `require` function. This is to minimise security risks. If there are any errors in your script, Floe will show them on the GUI along with a line number and a description of the problem. We are working on a standalone version of Floe that will allow you to more easily debug your Lua by outputting debug information to the console. ## Multiple files `dofile()` is available, so you can split your script into multiple files if you want to. Floe's `dofile` implementation is the same as the standard Lua version except that you can only specify files relative to the library folder — that is, the folder that contains the `floe.lua` file. For example, you could have a folder next to `floe.lua` called `Lua` and put a file in there called `data.lua`. You could then load that file with `dofile("Lua/data.lua")`. To pass data between files, you would typically use the ["module" pattern](http://lua-users.org/wiki/ModuleDefinition) (except using `dofile` instead of `require`). ## Library Functions Use these functions to create your sample library. Take note of the `[required]` annotations - omitting fields marked with these will cause an error. ### `floe.new_library` Creates a new library. It takes one parameter: a table of configuration. It returns a new library object. You should only create one library in your script. Return the library at the end of your script. The library is the top-level object. It contains all the instruments, regions, and impulse responses. ``` -- Creates a new library. You should only create one library in your script. -- Return the library at the end of your script.local library = floe.new_library({ -- The name of the library. Keep it short and use tagline for more details. -- [required] name = "Iron Vibrations", -- A few words to describe the library. [required] tagline = "Organic sounds from resonating metal objects", -- The URL for this Floe library. -- [optional, default: no url] library_url = "https://example.com/iron-vibrations", -- A description of the library. You can be verbose and use newlines (\n). -- [optional, default: no description] description = "A collection of resonating metal objects sampled using a handheld stereo recorder.", -- Who created this library. Keep it short, use the description for more -- details. [required] author = "Found-sound Labs", -- A unique identifier for this library. Specifying this field overrides the -- default ID of "library-name - author". It can be any text, its only meaning -- is to uniquely identify this library from others. However, in rare cases it -- may be shown on the UI so it should be human-readable and representative of -- the library. This field is useful if you want to change the name of the -- library: set this to the previous ID (otherwise the ID will change to -- "new-library-name - author") and bump the revision field. -- [optional, default: "library-name" - "author"] id = "Iron Vibrations - Found-sound Labs", -- URL relating to the author or their work. -- [optional, default: ] author_url = "https://example.com", -- The revision number of this library. Bump this whenever you publish a -- backwards-compatible update (additional content, fixes, tweaks); breaking -- changes are not allowed - you'd need to create a new library such as: -- "Strings v2". The legacy name `minor_version` is also accepted. -- [optional, default: 1] revision = 1, -- Path relative to this script for the background image. It should be a jpg -- or png. Look at Floe's 'Develop Libraries' docs for recommended specs. -- [optional, default: ] background_image_path = "Images/background.jpg", -- Path relative to this script for the icon image. It should be a square jpg -- or png. -- [optional, default: ] icon_image_path = "Images/icon.png", -- Controls the vignette and panel-tint drawn over the background image when -- this library is the active background. -- [optional, default: defaults] background_overlay = { -- Configures the radial vignette drawn over the background image when -- this library is the active background. -- [optional, default: defaults] vignette = { -- Edge colour of the vignette as a 0xRRGGBBAA integer. The alpha -- component controls the strength of the effect; set it to 0 to -- disable. -- [optional, default: 0x00000000] colour = 0x00000066, -- Radius of the unaffected centre area, as a proportion of the -- panel's smaller dimension. 0 means the vignette starts at the -- centre; values near 1 confine it to the very edges. On a range from -- 0 to 1. -- [optional, default: 0.2] inner_radius = 0.2, }, -- Configures a flat colour tint drawn over the blurred mid-panel surface. -- Independent of the vignette. -- [optional, default: no tint] panel_tint = { -- A flat tint drawn over the blurred mid-panel surfaces, as a -- 0xRRGGBBAA integer. Set alpha to 0 to disable. -- [optional, default: 0x00000000] colour = 0x0000000D, }, }}) ``` ### `floe.new_instrument` Creates a new instrument on the library. It takes 2 parameters: the library object and a table of configuration. It returns a new instrument object. You can call this function multiple times to create multiple instruments. An instrument is like a musical instrument. It is a sound-producing entity that consists of one or more samples (samples are specified in regions). Each library can have multiple instruments. You can use Floe's [Tag Builder GUI](/docs/develop/tags-and-folders#instrument-tags) to generate tag tables. ``` -- Creates a new instrument on the library. You can call this multiple times to -- create multiple instruments.local instrument = floe.new_instrument(library, { -- The name of the instrument. [required] name = "Metal Fence Strike", -- A unique identifier for the instrument. If not specified, it will be the -- name of the instrument. Either way, IDs must be unqiue within a library. It -- can be any text but it's recommended to use a human-readable identifier -- (similar to the name). IDs are how presets and settings refer to -- instruments. -- [optional, default: same as name] id = "Metal Fence Strike", -- Specify a folder to group instruments under a common heading. It may -- contain slashes to represent a hierarchy. See -- https://floe.audio/develop/tags-and-folders.html for more information. -- [optional, default: no folders] folder = "Fences/Steel", -- A description of the instrument. Start with a capital letter an end with a -- period. -- [optional, default: no description] description = "Tonal pluck metallic pluck made from striking a steel fence.", -- An array of strings to denote properties of the instrument. See -- https://floe.audio/develop/tags-and-folders.html for more information. -- [optional, default: no tags] tags = { "found sounds", "tonal percussion", "metal", "keys", "cold", "ambient", "IDM", "cinematic" }, -- Path to an audio file relative to this script that should be used as the -- waveform on Floe's GUI. -- [optional, default: first region path] waveform_audio_path = "Samples/file1.flac",}) ``` ### `floe.add_region` Adds a region to an instrument. It takes 2 parameters: the instrument object and a table of configuration. Doesn't return anything. You can call this function multiple times to create multiple regions. A region is a part of an instrument. It defines an audio file and the conditions under which it will be played. For example, you might have a region that plays the audio file `Piano_C3.flac` when the note C3 is played. Each instrument must have one or more regions. ``` -- Adds a region to an instrument. You can call this multiple times to create -- multiple regions. Each instrument must have one or more regions.floe.add_region(instrument, { -- A path to an audio file, relative to this current lua file. [required] path = "Samples/One-shots/Resonating String.flac", -- The pitch of the audio file as a number from 0 to 127 (a MIDI note number). -- On a range from 0 to 127. [required] root_key = 60, -- How this region should be triggered. -- [optional, default: defaults] trigger_criteria = { -- What event triggers this region. Must be one of: "note-on" or -- "note-off". -- [optional, default: note-on] trigger_event = "note-on", -- The pitch range of the keyboard that this region is mapped to. These -- should be MIDI note numbers, from 0 to 128. The start number is -- inclusive, the end is exclusive. -- [optional, default: { 60, 64 }] key_range = { 60, 64 }, -- The velocity range of the keyboard that this region is mapped to. This -- should be an array of 2 numbers ranging from 0 to 100. The start number -- is inclusive, the end is exclusive. Use the -- velocity_range_high_resolution instead if you need more than 100 -- velocity layers. -- [optional, default: { 0, 100 }] velocity_range = { 0, 100 }, -- Alternative to velocity_range that allows for 1000 velocity layers -- instead of 100. -- [optional, default: { 0, 1000 }] velocity_range_high_resolution = { 0, 1000 }, -- Trigger this region only on this round-robin index. For example, if -- this index is 0 and there are 2 other groups with round-robin indices -- of 1 and 2 with the same round_robin_sequencing_group and -- trigger_event, then this region will trigger on every third press of a -- key only. round_robin_index should begin at 0 and be consecutive. The -- total number of round-robins is calculated automatically. -- [optional, default: no round-robin] round_robin_index = 0, -- Group together regions that have this same string, so that their -- round_robin_index is part of a separate sequence to other -- round_robin_sequencing_groups. Use this when you have multiple sets of -- regions that have a different number of round-robins with the same -- trigger_event. -- [optional, default: instrument-wide group] round_robin_sequencing_group = "group1", -- If another region in this instrument is triggered at the same time as -- this one and is overlapping this, and also has this option enabled, -- then both regions will play crossfaded in a proportional amount for the -- overlapping area, creating a smooth transition between velocity layers. -- Only works if there's exactly 2 overlapping layers. -- [optional, default: false] feather_overlapping_velocity_layers = false, -- For every region that has this same string, automatically set the start -- and end values for each region's key range based on its root key. -- [optional, default: no auto-map] auto_map_key_range_group = "group1", }, -- Loop configuration. -- [optional, default: defaults] loop = { -- Define a built-in loop. -- [optional, default: no built-in loop] builtin_loop = { -- The start of the loop in frames. Inclusive. It can be negative -- meaning index the file from the end rather than the start. -- [required] start_frame = 24, -- The end of the loop in frames. Exclusive. It can be negative -- meaning index the file from the end rather than the start. 0 means -- the end of the file. [required] end_frame = 6600, -- The number of frames to crossfade. [required] crossfade = 100, -- The mode of the loop. Must be one of: "standard" or "ping-pong". -- [optional, default: standard] mode = "standard", -- If true, the start, end and crossfade values cannot be overriden by -- a custom loop from Floe's GUI. -- [optional, default: ] lock_loop_points = false, -- If true, the loop mode value cannot be overriden by a custom mode -- from Floe's GUI. -- [optional, default: ] lock_mode = false, }, -- The requirement for this region to loop. Must be one of: -- "default" => Default looping behaviour. -- "always-loop" => This region will always loop - either using the built -- in loop, a user defined loop, or a default built-in loop. -- "never-loop" => This region will never loop even if there is a -- user-defined loop. Set all regions of an instrument to this to entirely -- disable looping for the instrument. -- [optional, default: default] loop_requirement = "always-loop", }, -- Timbre layering configuration. -- [optional, default: no timbre layering] timbre_layering = { -- The start and end point, from 0 to 100, of the Timbre knob on Floe's -- GUI that this region should be heard. You should overlap this range -- with other timbre layer ranges. Floe will create an even crossfade of -- all overlapping sounds. The start number is inclusive, end is -- exclusive. This region's velocity_range should be the full range. -- [optional, default: no timbre layering] layer_range = { 0, 50 }, }, -- Audio properties. -- [optional, default: defaults] audio_properties = { -- Apply a gain to the audio data in decibels. -- [optional, default: 0] gain_db = -3, -- The number of frames to skip at the start of the audio data. -- [optional, default: 0] start_offset_frames = 0, -- Tune the audio data in cents. -- [optional, default: 0] tune_cents = 0, -- The number of frames to fade in the audio data, applied at the start -- after any start_offset_frames. If the region has slices, the fade is -- applied at the start of each slice instead. -- [optional, default: 0] fade_in_frames = 0, -- The number of frames to fade out the audio data, applied at the end of -- the sample. If the region has slices, the fade is applied at the end of -- each slice instead. -- [optional, default: 0] fade_out_frames = 0, }, -- Playback configuration. -- [optional, default: defaults] playback = { -- The requirement for keytracking. Must be one of: "default", "always" or -- "never". -- [optional, default: default] keytrack_requirement = "default", }, -- An array of slices that divide this region's audio into segments for -- tempo-synced playback. Each slice defines a start frame and a relative -- length. The system sums all length_proportion values to determine the total -- number of steps; each slice's proportion of the total determines its -- playback duration in the sequence. -- [optional, default: no slices] slices = {}, -- The musical length of the loop in beats (e.g. 4 for a 1-bar loop in 4/4, 8 -- for 2 bars). Required when slices are set. Used by the arpeggiator's -- auto-rate to pick a tempo division that matches the loop's native timing. -- On a range from 1 to 255. -- [optional, default: ] loop_beats = 4, -- The BPM the loop was recorded at. Required when slices are set. Used by the -- arpeggiator's auto-rate together with loop_beats to compute each step's -- native duration. On a range from 1 to 999. -- [optional, default: ] native_bpm = 120,}) ``` ### `floe.add_named_key_range` Gives a name to a key range of this instrument. It takes 2 parameters: the instrument object and a table of configuration. Doesn't return anything. For example, with a multi-sampled keyboard instrument, you might mark the ranges beyond the natural range of the real instrument as "Extended" ranges. Alternatively, if the instrument contains multiple sounds, you can name each sound: "Kick", "Snare", etc. You can call this multiple times to create multiple named key ranges. ``` -- Gives a name to a key range of this instrument. For example, with a -- multi-sampled keyboard instrument, you might mark the ranges beyond the natural -- range of the real instrument as "Extended" ranges. You can call this multiple -- times to create multiple named key ranges. Alternatively, if the instrument -- contains multiple sounds, you can name each sound: "Kick", "Snare", etc. Don't -- overlap ranges.floe.add_named_key_range(instrument, { -- The name of the key range. [required] name = "Extended Notes", -- The range of the keyboard to give a name to. These should be MIDI note -- numbers, from 0 to 128. The start number is inclusive, the end is -- exclusive. [required] key_range = { 80, 128 },}) ``` ### `floe.add_ir` Adds a reverb impulse response to the library. It takes 2 parameters: the library object and a table of configuration. Doesn't return anything. You can call this function multiple times to create multiple impulse responses. ``` -- Adds a reverb impulse response to the library. You can call this multiple times -- to create multiple impulse responses.floe.add_ir(library, { -- The name of the IR. [required] name = "Cathedral", -- A unique identifier for the IR. If not specified, it will be the name of -- the IR. Either way, IR IDs must be unqiue within a library. It can be any -- text but it's recommended to use a human-readable identifier (similar to -- the name). IDs are how presets and settings refer to IRs. -- [optional, default: same as name] id = "Cathedral", -- File path to the impulse response file, relative to this script. [required] path = "irs/cathedral.flac", -- Specify a folder to group IRs under a common heading. It may contain -- slashes to represent a hierarchy. See -- https://floe.audio/develop/tags-and-folders.html for more information. -- [optional, default: no folders] folder = "Cathedrals", -- An array of strings to denote properties of the IR. See -- https://floe.audio/develop/tags-and-folders.html for more information. -- [optional, default: no tags] tags = { "acoustic", "cathedral" }, -- A description of the IR. Start with a capital letter an end with a period. -- [optional, default: no description] description = "Sine sweep in St. Paul's Cathedral.", -- Audio properties. -- [optional, default: defaults] audio_properties = { -- Apply a gain to the audio data in decibels. -- [optional, default: 0] gain_db = -3, },}) ``` ### `floe.set_attribution_requirement` Sets the attribution information for a particular file or folder. It takes 2 parameters: a path to the file or folder whose license information you want to set, and a table of configuration. If the path is a folder, the attribution requirement will be applied to all audio files in that folder and its subfolders. You can also point it at the library's `background_image_path` to credit the cover image — when set, a subtle credit line appears on the Perform page. ``` -- Sets the attribution information for a particular file or folder. If the path -- is a folder, the attribution requirement will be applied to all audio files in -- that folder and its subfolders. You can also point it at the library's -- background_image_path to credit the cover image — when set, a subtle credit -- line appears on the Perform page.floe.set_attribution_requirement("Samples/bell.flac", { -- The title of the work. [required] title = "Bell Strike", -- Name of the license. [required] license_name = "CC-BY-4.0", -- URL to the license. [required] license_url = "https://creativecommons.org/licenses/by/4.0/", -- The name/identification of the persons or entities to attribute the work -- to. [required] attributed_to = "John Doe", -- URL to the original work if possible. -- [optional, default: ] attribution_url = "https://example.com",}) ``` ### `floe.set_required_floe_version` Sets the minimum required version of Floe for this library. It takes one parameter: a string representing the version number (a [semantic version](https://semver.org/)). It's best to set this at the top of your `floe.lua` file so that Floe can check the version before running the script. Calling this function is recommended so that older versions of Floe behave predictably when trying to load an unsupported library. ``` -- Sets the required Floe version for this library. If the current Floe version is -- lower than the required version, an error will be raised.floe.set_required_floe_version("2.0.2+f4ca1ba2") ``` ## Support Function Floe provides some additional functions to make developing libraries easier. ### `floe.extend_table` Extends a table with another table, including all sub-tables. It takes 2 parameters: the base table and the table to extend it with. The base table is not modified. The extension table is modified and returned. It has all the keys of the base table plus all the keys of the extended table. If a key exists in both tables, the value from the extension table is used. Floe doesn't have the concept of 'groups' like other formats like SFZ or Kontakt have. Instead, this function offers a way to apply a similar configuration to multiple regions. Alternatively, you can use functions and loops in Lua to add regions in a more dynamic way. ``` local group1 = { trigger_criteria = { trigger_event = "note-on", velocity_range = { 0, 100 }, auto_map_key_range_group = "group1", feather_overlapping_velocity_regions = false, },}floe.add_region(instrument, floe.extend_table(group1, { path = "One-shots/Resonating String 2.flac", root_key = 65,}))floe.add_region(instrument, floe.extend_table(group1, { path = "One-shots/Resonating String 3.flac", root_key = 68,})) ``` ### `floe.midi_range_to_hundred_range` and `floe.midi_range_to_thousand_range` Floe prefers to use a range from 0 to 100 or 0 to 1000 (where the end value is exclusive, A.K.A. one-past the last) for velocity rather than MIDI 1.0's typical range of 0 to 127 (where the end value is inclusive). These functions convert from the MIDI range to the Floe range. Useful when converting existing libraries to Floe. ``` -- Converts a MIDI note range (where the end value is inclusive) to Floe's 0-100 -- range (where the end value is exclusive, A.K.A, one-past the last). Takes a -- table with two integers for start and end. Returns the same format but -- remapped.local hundred_range = floe.midi_range_to_hundred_range({ 0, 127 })-- Converts a MIDI note range (where the end value is inclusive) to Floe's 0-1000 -- range (where the end value is exclusive, A.K.A, one-past the last). Takes a -- table with two integers for start and end. Returns the same format but -- remapped.local thousand_range = floe.midi_range_to_thousand_range({ 0, 127 }) ``` ## Lua Language Server If you are using the [Lua Language Server](https://luals.github.io/), you can get autocompletion and diagnostics for Floe's Lua API by using the following configuration. 1. Open Floe, and click on the 3-dot menu at the top of the window. Click "Library Developer Tools" and open the "Utilities" tab. 2. Click on the "Install Lua definitions" button. This will generate the necessary file on your system. 3. For the Lua LSP to find the definitions, you need to create a `.luarc.json` file in the same folder as your `floe.lua` file. 4. Paste the following code into the `.luarc.json` file: ``` { "runtime": { "version": "Lua 5.4" }, "workspace": { "library": [ "<< paste definitions file path >>" ] }} ``` 5. Replace the string with the path that is copied to your clipboard when you click the "Copy Lua definitions path" button in the Library Developer Tools. 6. Done. ## Lua LSP Definitions This file is also generated by the "Install Lua definitions" button in the Library Developer Tools. ``` ---@meta FloeAPI---@class FloeInstrumentConfig---@field name string The name of the instrument.---@field id? string A unique identifier for the instrument. If not specified, it will be the name of the instrument. Either way, IDs must be unqiue within a library. It can be any text but it's recommended to use a human-readable identifier (similar to the name). IDs are how presets and settings refer to instruments.---@field folder? string Specify a folder to group instruments under a common heading. It may contain slashes to represent a hierarchy. See https://floe.audio/develop/tags-and-folders.html for more information.---@field description? string A description of the instrument. Start with a capital letter an end with a period.---@field tags? string[] An array of strings to denote properties of the instrument. See https://floe.audio/develop/tags-and-folders.html for more information.---@field waveform_audio_path? string Path to an audio file relative to this script that should be used as the waveform on Floe's GUI.---@class FloeImpulseResponseAudioPropsConfig---@field gain_db? number Apply a gain to the audio data in decibels.---@class FloeBuiltinLoopConfig---@field start_frame number The start of the loop in frames. Inclusive. It can be negative meaning index the file from the end rather than the start.---@field end_frame number The end of the loop in frames. Exclusive. It can be negative meaning index the file from the end rather than the start. 0 means the end of the file.---@field crossfade number The number of frames to crossfade.---@field mode? "standard"|"ping-pong" The mode of the loop.---@field lock_loop_points? boolean If true, the start, end and crossfade values cannot be overriden by a custom loop from Floe's GUI.---@field lock_mode? boolean If true, the loop mode value cannot be overriden by a custom mode from Floe's GUI.---@class FloeRegionLoopConfig---@field builtin_loop? FloeBuiltinLoopConfig Define a built-in loop.---@field loop_requirement? "default"|"always-loop"|"never-loop" The requirement for this region to loop.---@class FloeRegionAudioPropsConfig---@field gain_db? number Apply a gain to the audio data in decibels.---@field start_offset_frames? number The number of frames to skip at the start of the audio data.---@field tune_cents? number Tune the audio data in cents.---@field fade_in_frames? number The number of frames to fade in the audio data, applied at the start after any start_offset_frames. If the region has slices, the fade is applied at the start of each slice instead.---@field fade_out_frames? number The number of frames to fade out the audio data, applied at the end of the sample. If the region has slices, the fade is applied at the end of each slice instead.---@class FloeRegionTimbreLayeringConfig---@field layer_range? number[] The start and end point, from 0 to 100, of the Timbre knob on Floe's GUI that this region should be heard. You should overlap this range with other timbre layer ranges. Floe will create an even crossfade of all overlapping sounds. The start number is inclusive, end is exclusive. This region's velocity_range should be the full range.---@class FloeRegionPlaybackConfig---@field keytrack_requirement? "default"|"always"|"never" The requirement for keytracking.---@class FloeRegionSliceConfig---@field start_frame number The frame position in the audio file where this slice begins.---@field length_proportion number A unitless value representing the relative duration of this slice when played in a tempo-synced sequence, similar to CSS flex-grow. The system sums all length_proportion values to determine the total number of steps, and each slice's proportion determines its playback duration.---@class FloeTriggerCriteriaConfig---@field trigger_event? "note-on"|"note-off" What event triggers this region.---@field key_range? number[] The pitch range of the keyboard that this region is mapped to. These should be MIDI note numbers, from 0 to 128. The start number is inclusive, the end is exclusive.---@field velocity_range? number[] The velocity range of the keyboard that this region is mapped to. This should be an array of 2 numbers ranging from 0 to 100. The start number is inclusive, the end is exclusive. Use the velocity_range_high_resolution instead if you need more than 100 velocity layers.---@field velocity_range_high_resolution? number[] Alternative to velocity_range that allows for 1000 velocity layers instead of 100.---@field round_robin_index? number Trigger this region only on this round-robin index. For example, if this index is 0 and there are 2 other groups with round-robin indices of 1 and 2 with the same round_robin_sequencing_group and trigger_event, then this region will trigger on every third press of a key only. round_robin_index should begin at 0 and be consecutive. The total number of round-robins is calculated automatically.---@field round_robin_sequencing_group? string Group together regions that have this same string, so that their round_robin_index is part of a separate sequence to other round_robin_sequencing_groups. Use this when you have multiple sets of regions that have a different number of round-robins with the same trigger_event.---@field feather_overlapping_velocity_layers? boolean If another region in this instrument is triggered at the same time as this one and is overlapping this, and also has this option enabled, then both regions will play crossfaded in a proportional amount for the overlapping area, creating a smooth transition between velocity layers. Only works if there's exactly 2 overlapping layers.---@field auto_map_key_range_group? string For every region that has this same string, automatically set the start and end values for each region's key range based on its root key.---@class FloeFileAttributionConfig---@field title string The title of the work.---@field license_name string Name of the license.---@field license_url string URL to the license.---@field attributed_to string The name/identification of the persons or entities to attribute the work to.---@field attribution_url? string URL to the original work if possible.---@class FloeNamedKeyRangeConfig---@field name string The name of the key range.---@field key_range number[] The range of the keyboard to give a name to. These should be MIDI note numbers, from 0 to 128. The start number is inclusive, the end is exclusive.---@class FloeBackgroundOverlayVignetteConfig---@field colour? number Edge colour of the vignette as a 0xRRGGBBAA integer. The alpha component controls the strength of the effect; set it to 0 to disable.---@field inner_radius? number Radius of the unaffected centre area, as a proportion of the panel's smaller dimension. 0 means the vignette starts at the centre; values near 1 confine it to the very edges.---@class FloeBackgroundOverlayPanelTintConfig---@field colour? number A flat tint drawn over the blurred mid-panel surfaces, as a 0xRRGGBBAA integer. Set alpha to 0 to disable.---@class FloeImpulseResponseConfig---@field name string The name of the IR.---@field id? string A unique identifier for the IR. If not specified, it will be the name of the IR. Either way, IR IDs must be unqiue within a library. It can be any text but it's recommended to use a human-readable identifier (similar to the name). IDs are how presets and settings refer to IRs.---@field path string File path to the impulse response file, relative to this script.---@field folder? string Specify a folder to group IRs under a common heading. It may contain slashes to represent a hierarchy. See https://floe.audio/develop/tags-and-folders.html for more information.---@field tags? string[] An array of strings to denote properties of the IR. See https://floe.audio/develop/tags-and-folders.html for more information.---@field description? string A description of the IR. Start with a capital letter an end with a period.---@field audio_properties? FloeImpulseResponseAudioPropsConfig Audio properties.---@class FloeRegionConfig---@field path string A path to an audio file, relative to this current lua file.---@field root_key number The pitch of the audio file as a number from 0 to 127 (a MIDI note number).---@field trigger_criteria? FloeTriggerCriteriaConfig How this region should be triggered.---@field loop? FloeRegionLoopConfig Loop configuration.---@field timbre_layering? FloeRegionTimbreLayeringConfig Timbre layering configuration.---@field audio_properties? FloeRegionAudioPropsConfig Audio properties.---@field playback? FloeRegionPlaybackConfig Playback configuration.---@field slices? table[] An array of slices that divide this region's audio into segments for tempo-synced playback. Each slice defines a start frame and a relative length. The system sums all length_proportion values to determine the total number of steps; each slice's proportion of the total determines its playback duration in the sequence.---@field loop_beats? number The musical length of the loop in beats (e.g. 4 for a 1-bar loop in 4/4, 8 for 2 bars). Required when slices are set. Used by the arpeggiator's auto-rate to pick a tempo division that matches the loop's native timing.---@field native_bpm? number The BPM the loop was recorded at. Required when slices are set. Used by the arpeggiator's auto-rate together with loop_beats to compute each step's native duration.---@class FloeBackgroundOverlayConfig---@field vignette? FloeBackgroundOverlayVignetteConfig Configures the radial vignette drawn over the background image when this library is the active background.---@field panel_tint? FloeBackgroundOverlayPanelTintConfig Configures a flat colour tint drawn over the blurred mid-panel surface. Independent of the vignette.---@class FloeLibraryConfig---@field name string The name of the library. Keep it short and use tagline for more details.---@field tagline string A few words to describe the library.---@field library_url? string The URL for this Floe library.---@field description? string A description of the library. You can be verbose and use newlines (\n).---@field author string Who created this library. Keep it short, use the description for more details.---@field id? string A unique identifier for this library. Specifying this field overrides the default ID of "library-name - author". It can be any text, its only meaning is to uniquely identify this library from others. However, in rare cases it may be shown on the UI so it should be human-readable and representative of the library. This field is useful if you want to change the name of the library: set this to the previous ID (otherwise the ID will change to "new-library-name - author") and bump the revision field.---@field author_url? string URL relating to the author or their work.---@field revision? number The revision number of this library. Bump this whenever you publish a backwards-compatible update (additional content, fixes, tweaks); breaking changes are not allowed - you'd need to create a new library such as: "Strings v2". The legacy name `minor_version` is also accepted.---@field background_image_path? string Path relative to this script for the background image. It should be a jpg or png. Look at Floe's 'Develop Libraries' docs for recommended specs.---@field icon_image_path? string Path relative to this script for the icon image. It should be a square jpg or png.---@field background_overlay? FloeBackgroundOverlayConfig Controls the vignette and panel-tint drawn over the background image when this library is the active background.---@class floefloe = {}-- Creates a new library. You should only create one library in your script. -- Return the library at the end of your script.---@param config FloeLibraryConfig---@return lightuserdata libraryfunction floe.new_library(config) end-- Creates a new instrument on the library. You can call this multiple times to -- create multiple instruments.---@param library lightuserdata---@param config FloeInstrumentConfig---@return lightuserdata instrumentfunction floe.new_instrument(library, config) end-- Adds a region to an instrument. You can call this multiple times to create -- multiple regions. Each instrument must have one or more regions.---@param instrument lightuserdata---@param config FloeRegionConfigfunction floe.add_region(instrument, config) end-- Adds a reverb impulse response to the library. You can call this multiple times -- to create multiple impulse responses.---@param library lightuserdata---@param config FloeImpulseResponseConfigfunction floe.add_ir(library, config) end-- Sets the attribution information for a particular file or folder. If the path -- is a folder, the attribution requirement will be applied to all audio files in -- that folder and its subfolders. You can also point it at the library's -- background_image_path to credit the cover image — when set, a subtle credit -- line appears on the Perform page.---@param file_path string---@param config FloeFileAttributionConfigfunction floe.set_attribution_requirement(file_path, config) end-- Gives a name to a key range of this instrument. For example, with a -- multi-sampled keyboard instrument, you might mark the ranges beyond the natural -- range of the real instrument as "Extended" ranges. You can call this multiple -- times to create multiple named key ranges. Alternatively, if the instrument -- contains multiple sounds, you can name each sound: "Kick", "Snare", etc. Don't -- overlap ranges.---@param instrument lightuserdata---@param config FloeNamedKeyRangeConfigfunction floe.add_named_key_range(instrument, config) end-- Sets the required Floe version for this library. If the current Floe version is -- lower than the required version, an error will be raised.---@param version_string stringfunction floe.set_required_floe_version(version_string) end-- Extends a table with another table, including all sub-tables. The base table is -- not modified. The extension table is modified and returned with all keys from -- both tables. If a key exists in both, the extension table value is used.---@param base_table table---@param t table---@return table extended_tablefunction floe.extend_table(base_table, t) end-- Converts a MIDI note range (where the end value is inclusive) to Floe's 0-100 -- range (where the end value is exclusive, A.K.A, one-past the last). Takes a -- table with two integers for start and end. Returns the same format but -- remapped.---@param midi_range table---@return table hundred_rangefunction floe.midi_range_to_hundred_range(midi_range) end-- Converts a MIDI note range (where the end value is inclusive) to Floe's 0-1000 -- range (where the end value is exclusive, A.K.A, one-past the last). Takes a -- table with two integers for start and end. Returns the same format but -- remapped.---@param midi_range table---@return table thousand_rangefunction floe.midi_range_to_thousand_range(midi_range) end_G.floe = floe ``` --- # Packages Page Submissions > Documentation for developers to submit packages to Floe's Package Directory Do you have a Floe package you'd like to add to the [Package Directory](/packages)? We're happy to help you get it listed. - If you're familiar with development workflows, please submit a [pull request](https://github.com/floe-audio/Floe/pulls) with a new entry to `package-database.json` following the schema below. - Otherwise, please [contact us](https://github.com/floe-audio/floe/discussions) and we'll help add your package. All packages must be compatible with the current Floe version and meet basic quality standards for audio, scripting, and presentation. Packages from larger-budget developers/studios may require [sponsorship](/docs/about-the-project/sponsorship). ## Database Schema The package database (`website/static/package-database.json`) contains information about available Floe packages displayed on the website's packages page. Each entry represents a package that users can discover and install. - **`name`** - Package display name - **`slug`** - Lowercase version of name using dashes instead of spaces - used to make the URL - **`developer`** - Developer/studio name - **`developer_icon`** - URL to developer icon/logo - **`background_image`** - URL to package preview image - **`attribution_required`** - Boolean, shows ATTRIBUTION badge if true - **`description`** - HTML description with links allowed - **`category`** - `"community"` or `"professional"`, see below - **`direct_download_link`** - Direct download URL (null if external) - **`external_product_page`** - Developer's product page URL - **`instruments`** - Number of instruments in package - **`presets`** - Number of presets in package - **`irs`** - Number of impulse responses in package ## Categories **Community** - Open-source libraries, passion projects, independent conversions from other formats. Always free. Open to submissions from individual creators and non-commercial entities. **Professional** - High-quality libraries from established developers/studios. May be free or paid. [Requires project sponsorship](/docs/about-the-project/sponsorship). --- # Package libraries & presets for distribution > How to create Floe Packages to distribute your sample libraries and presets The easiest and most reliable way to distribute your Floe content is with [Floe Packages](/docs/installation/install-packages#what-is-a-package). Floe Packages are `.floe-pkg` files (ZIP files internally) containing **sample libraries** (which provide instruments and IRs) and/or **presets** (ready-to-use professional sounds). Packages are what users download and install into Floe. Floe also accepts `.zip` file extension. Floe offers an easy-to-use GUI for [installing packages](/docs/installation/install-packages). This installation process carefully considers existing content, versions, installation preferences, and whether installed libraries have been modified. The result should 'just work' or provide clear instructions on what to do next. As with Floe's sample library format, openness is key. That's why Floe Packages are just ZIP files with a specific structure and a `.floe-pkg` extension. Anyone can create them and anyone can open them (rename to `.zip` to extract). Additionally, it gives the user the option to extract them manually rather than use Floe's GUI if they wish. Create Floe Packages using our command-line tool or any ZIP program. We often recommend not leaving packages with the `.zip` extension though because the common thing to do with ZIPs is extract them, which is not what Floe's 'Install Package' button wants, leading to confusion. Instead, always change the file extension to `.floe-pkg`. ## Encrypted packages Floe also supports encrypted packages. Whilst not open, these are implemented in a spirit of Floe's hassle-free philosophy. A license key is needed to unlock the package. No internet connection is required. ## Packager command-line tool If you're comfortable with such things, we have a command-line tool to create Floe Packages. It ensures everything is set up correctly and adds a couple of nice-to-have features, particularly for users who want to install the package manually rather than with Floe's GUI. However, for regular packages, you can use any ZIP program to create them. Just make sure they follow the structure described in the next section, and rename the resulting `.zip` to `.floe-pkg`. Creating encrypted packages requires `floe-packager` and is not yet documented. #### Download - **Floe Packager Windows**: [Floe-Packager-v2.0.2-Windows.zip](https://github.com/floe-audio/Floe/releases/download/v2.0.2/Floe-Packager-v2.0.2-Windows.zip) (13 MB) - **Floe Packager macOS Apple Silicon**: [Floe-Packager-v2.0.2-macOS-Apple-Silicon.zip](https://github.com/floe-audio/Floe/releases/download/v2.0.2/Floe-Packager-v2.0.2-macOS-Apple-Silicon.zip) (1 MB) - **Floe Packager macOS Intel**: [Floe-Packager-v2.0.2-macOS-Intel.zip](https://github.com/floe-audio/Floe/releases/download/v2.0.2/Floe-Packager-v2.0.2-macOS-Intel.zip) (1 MB) - **Floe Packager Linux**: [Floe-Packager-v2.0.2-Linux.tar.gz](https://github.com/floe-audio/Floe/releases/download/v2.0.2/Floe-Packager-v2.0.2-Linux.tar.gz) (14 MB) Download the program, extract it, and run it from the command line. #### Usage Here's the output of `floe-packager --help`: ``` Packages libraries and presets into a Floe package file (.floe-pkg or .floe-pkg-enc).Existing packages can be merged into the output. Multiple libraries and preset foldersare supported. Additionally:- Validates any Lua files.- Ensures libraries have a License file.- Adds an 'About' document for each library.- Adds an 'Installation' document for the package.- Embeds a checksum file into the package for better change detection if the package is installed manually.Encrypted workflow: run gen-key once per product line and store the key securely (orgenerate the key by some other means). Pass it to pack via --package-key for every versionso that a single license key unlocks all of them.Usage: floe-packager [OPTIONS]Commands: pack Build a Floe package (.floe-pkg) from libraries and presets. Existing packages can be merged into the output. info Write a JSON manifest describing the package's instruments, presets, tags, etc., without producing a package file. gen-key Generate a random package key and print it to stdout.Run 'floe-packager --help' for more information on a command.Build a Floe package (.floe-pkg) from libraries and presets. Existing packages can be merged into the output.Usage: floe-packager pack [OPTIONS]Positional arguments: Directory to write the package into. Created if missing. The package filename is auto-generated.Optional arguments: -l, --library-folder ... Library folder to include (repeatable) -p, --preset-folder ... Preset folder to include (repeatable) -i, --input-package ... Existing package file to merge into the output. Files from --library-folder and --preset-folder take precedence on conflict. (repeatable) --prune Silently drop files that aren't used: for libraries, files not referenced from Lua (samples, images, IRs) or the .lua/license files; for preset folders, files that aren't presets or preset-bank info files. Without this, such files are warned about but still included. -n, --package-name Override the auto-generated package name. --package-key 64-character hex key for encrypting the package (gen-key can create one). When present, produces an encrypted .floe-pkg-enc instead of a plain .floe-pkg. Reuse the same key across versions so existing license keys stay valid.Write a JSON manifest describing the package's instruments, presets, tags, etc., without producing a package file.Usage: floe-packager info [OPTIONS]Positional arguments: JSON file path to write the manifest to. Use '-' to write to stdout.Optional arguments: -l, --library-folder ... Library folder to include (repeatable) -p, --preset-folder ... Preset folder to include (repeatable) -i, --input-package ... Existing package file to merge into the output. Files from --library-folder and --preset-folder take precedence on conflict. (repeatable) --prune Silently drop files that aren't used: for libraries, files not referenced from Lua (samples, images, IRs) or the .lua/license files; for preset folders, files that aren't presets or preset-bank info files. Without this, such files are warned about but still included. -n, --package-name Override the auto-generated package name.Generate a random package key and print it to stdout.Usage: floe-packager gen-key [OPTIONS] ``` #### Examples These examples use bash syntax. ``` # Creates a .floe-pkg from the Slow library and the Slow Factory Presets.# Slow and "Slow Factory Presets" are folders in the current directory../floe-packager --library-folder "Slow" \ --preset-folder "Slow Factory Presets" \ --output-dir .# Creates a .floe-pkg containing multiple libraries and no presets./floe-packager --library-folder "C:/Users/Sam/Floe-Dev/Strings" \ "C:/Users/Sam/Floe-Dev/Common-IRs" \ --output-dir "C:/Users/Sam/Floe-Dev/Releases" \ --package-name "FrozenPlain - Strings" ``` ## Package structure If you're not using the packager tool, you need to know the structure of the Floe Package. It's very simple. Requirements of a floe package: - The package must contain a folder called `Libraries` and/or a folder called `Presets`. If present, these folders must contain the libraries and presets respectively. Be careful that your ZIP program is not adding an extra folder when you create the ZIP file. There should not be a top-level folder in the ZIP file, just the `Libraries` and/or `Presets` folders. #### Example: single library & factory presets ``` 📦FrozenPlain - Arctic Strings Package.floe-pkg/├── 📁Libraries│ └── 📁Arctic Strings│ ├── 📄arctic-strings.floe.lua│ ├── 📁Samples│ │ ├── 📄strings_c4.flac│ │ └── 📄strings_d4.flac│ └── 📁Images│ ├── 📄background.png│ └── 📄icon.png└── 📁Presets └── 📁Arctic Strings Factory ├── 📁Realistic │ ├── 📄Octaved.floe-preset │ └── 📄Soft.floe-preset └── 📁Synthetic ├── 📄Bright.floe-preset └── 📄Warm.floe-preset ``` #### Example: multiple libraries ``` 📦Audioata - Synthwave Bundle Package.floe-pkg/├── 📁Libraries│ ├── 📁Synthwave Bass│ │ ├── 📄synthwave-bass.floe.lua│ │ └── 📁Samples│ │ ├── 📄bass_c1.flac│ │ └── 📄bass_d1.flac│ ├── 📁Synthwave Drums│ │ ├── 📄synthwave-drums.floe.lua│ │ └── 📁Samples│ │ ├── 📄kick.flac│ │ └── 📄snare.flac│ └── 📁Synthwave Synths│ ├── 📄synthwave-synths.floe.lua│ └── 📁Samples/│ ├── 📄synth_c4.flac│ └── 📄synth_d4.flac└── 📁Presets └── 📁Synthwave Factory ├── 📄Clean Pad.floe-preset ├── 📄Dirty Lead.floe-preset ├── 📄Nebula Drone.floe-preset ├── 📄Punchy Kickdrum.floe-preset ├── 📄Backing FX.floe-preset └── 📄Full Effect.floe-preset ``` --- # Tags and folders > Best practices for using tags and folders in Floe sample libraries Floe has 2 complimentary features for browsing, searching and filtering: tags and folders. Presets, instruments, and impulse responses all use tags and folders. For developers, there are best practises for how to use tags and folders to offer the best experience for the user. On this page, we use the term 'item' to mean either preset, instrument, or impulse response: these all use tags and folders in a similar way. ## Folders Folders are used to group items under a common heading. Folders should be categories that relate to the theme or objective of the library. For example, for Lost Reveries, we wanted to explore the technique of using three complimentary timbres to layer into a full-spectrum sound, so we choose folders: "Low", "Mid" and "Air". Another example might be a library of field recordings, folders might be "Urban/London", "Urban/York" or "Nature/New Forest". Folders may contain slashes to represent a hierarchy, just like a filepath. For example: "Piano/1978 Steinway". Use this to specify broad categories that narrow down to specific categories. It's not usually best to have more than 2 levels of hierarchy. It's best to have 5 to 30 items per folder. Folders with only a couple of items clutter the GUI and don't offer much value. Folders with too many items loose their focus. Folders might overlap with tags but, in general, they are more abstract and can use phrases that only make sense in the context of the library as a whole. However, if it makes sense to group items under a common heading such as 'Percussion' (a common tag), then that's fine too — but you should also add this as a tag. ## Tags Tags are the properties of an item. They are used for filtering and searching items across all libraries. Tags must come from the standard pool of tags so that there is a common language that enables standard usage across all libraries. Any tags not in the standard pool are ignored. Add as many relevant tags as possible. ## Instrument tags Instrument tags are set in the sample library's Lua file when calling `floe.new_instrument`. However, writing tags manually is quite laborious. Floe has a utility that allows you to use the GUI to select tags. It will write these tags as Lua code, ready to be included in your `floe.lua` file. `Lua/instrument_tags.lua`: ``` -- This file is generated by Floe's tag builder.return { ["Air - Restless Canopy"] = { "ambient", "bittersweet", "breathy", "dreamy", "ethereal", "nostalgic", "resonant", "smooth", "synthesized", "texture", }, -- ...} ``` `floe.lua`: ``` local instrument_tags = dofile("Lua/instrument_tags.lua")-- ...local instrument_name = "Air - Restless Canopy"local instrument = floe.new_instrument(library, { name = instrument_name, tags = instrument_tags[instrument_name], -- ...}) ``` This Tag Builder is found by clicking on the 3-dots menu at the top of Floe, and then selecting "Library Developer Tools". The tag builder works for whatever instrument is loaded in the first layer of Floe. As you click on tags, the generated Lua code will be placed in the library's folder in a subfolder called `Lua`. ## Standard tags We take a pragmatic approach to defining this set of standard tags. Rather than try to be completely comprehensive and technically accurate, we instead aim to strike a balance between correctness and common usage within the music production space. The goal of tags is to help users find the item they need. You can suggest edits to this list via Github or other means. For best results setting tags, go over each of the following questions and add all tags that apply to the item. ### 1. 🔊 Sound source: Where did the sound come from? | Tag | Description | | :-- | :-- | | `acoustic` | Originating from a real instrument | | `field recording` | Environmental or location recordings | | `found sounds` | Real objects not traditionally used for music | | `hybrid` | Combines acoustic/vocal sounds with processed/synthesized elements | | `synthesized` | Generated by algorithms or circuits | | `vocal` | Originating from a human voice | It's strongly recommended to specify a sound-source for instruments and impulse responses. This is sometimes not applicable for presets. ### 2. 🎻 Real instrument category: Does it fit in a real instrument category? `brass`, `cello`, `choir`, `double bass`, `drums`, `electric bass`, `folk`, `guitar`, `keyboard`, `organ`, `percussion`, `piano`, `plucked strings`, `strings`, `struck strings`, `tonal percussion`, `violin`, `wind`. **plucked strings:** Plucked strings such as guitar, harp, mandolin **strings:** Bowed strings such as violin, viola, cello, double bass **struck strings:** Struck strings such as hammered dulcimer, santur These are mostly relevant for acoustic or hybrid sounds, but can be used for synthesized sounds that emulate these instruments. ### 3. 👥 Number of players: How many players are involved? | Tag | Description | | :-- | :-- | | `solo` | Single player | | `ensemble` | Multiple players | This is typically used for acoustic sounds. Synthesized sounds usually don't have this tag. ### 4. ➡️ Sound type (long duration): If it's a long-duration sound, what type is it? | Tag | Description | | :-- | :-- | | `drone` | Sustained, minimal, static foundation with little movement | | `pad` | Playable harmonic support, pitched and chord-capable | | `texture` | Sustained atmospheric element, typically less of a musical pitch than \`pad\` | | `soundscape` | A complete environment or scene, complex sonic space | | `underscore` | Background tones or sequences for underneath dialogue | | `noise` | Non-pitched and constant, similar to white noise | Pick from here if the sound sustains. Mutually exclusive with short-duration and sequence sound types. ### 5. ↔️ Sound type (short duration): If it's a short-duration sound, what type is it? | Tag | Description | | :-- | :-- | | `hit` | Single impactful sound with pitch and percussive elements | | `keys` | Piano or keyboard-like | | `kit` | Different sounds mapped across keys, such as a drum kit | | `oneshot` | Non-looping single sound, typically not for playing chromatically | | `pluck` | Short melodic notes | | `stab` | Extra-short melodic notes | Pick from here if the sound is brief or transient. Mutually exclusive with long-duration and sequence sound types. ### 6. 🔁 Sound type (sequence or pattern): If it's a sequence or pattern, what type is it? | Tag | Description | | :-- | :-- | | `arp` | Arpeggiated pattern of notes | | `sequence` | Sequenced pattern timbre changes | | `loop` | Sampled repeating phrase | Pick from here if the sound is a repeating or arpeggiated pattern. Mutually exclusive with long- and short-duration sound types. ### 7. 🎛️ Sound type (role in a track): What type of sound is it? | Tag | Description | | :-- | :-- | | `lead` | Foreground melodic element | | `bass` | Low-frequency foundation | | `riser` | Building tension element | | `downer` | Descending tension element | | `sound fx` | Special effect sound | | `transition` | Section change element | ### 8. 🪵 Material: Is it made from a specific material? `glass`, `ice`, `metal`, `plastic`, `rubber`, `stone`, `wood`. This is typically used for non-standard instruments in the \`acoustic\` or \`found sounds\` categories. ### 9. 🏛️ Reverb type: What reverb type is it? `cathedral`, `chamber`, `church`, `hall`, `large room`, `open air`, `small room`, `studio`, `unusual`. Strongly recommended for impulse responses. Not applicable for instruments or presets. ### 10. 🙂 Mood (positive): What mood does the item evoke? `bright`, `dreamy`, `ethereal`, `hopeful`, `nostalgic`, `peaceful`, `playful`. **bright:** Positive, uplifting, clear It's usually recommended to specify moods for synthesised instruments and presets. Not typically used for well-known acoustic instruments. ### 11. 😟 Mood (negative): What mood does the item evoke? `aggressive`, `chaotic`, `dark`, `disturbing`, `eerie`, `melancholic`, `menacing`, `tense`. **dark:** Unhappy, dim, unpleasant It's usually recommended to specify moods for synthesised instruments and presets. Not typically used for well-known acoustic instruments. ### 12. 😐 Mood (mixed): What mood does the item evoke? `bittersweet`, `hypnotic`, `mysterious`, `quirky`, `subdued`. It's usually recommended to specify moods for synthesised instruments and presets. Not typically used for well-known acoustic instruments. ### 13. 🎭 Mood (thematic): What mood does the item evoke? `dramatic`, `dystopian`, `epic`, `experimental`, `fantasy`, `heroic`, `noir`, `romantic`, `thriller`, `horror`, `sci-fi`, `western`. It's usually recommended to specify moods for synthesised instruments and presets. Not typically used for well-known acoustic instruments. ### 14. 🎶 Pitch: What are its pitch characteristics? | Tag | Description | | :-- | :-- | | `multi-pitched` | Contains multiple distinct notes (excluding octave unison) | | `non-pitched` | Lacks identifiable musical pitch | | `dissonant` | Contains harmonically clashing pitches | Useful for non-typical sounds that have notable pitch characteristics. A sound is assumed to possess a musical pitch unless otherwise stated. ### 15. 🚂 Timbre (modulation): What is its timbre like? | Tag | Description | | :-- | :-- | | `evolving` | Significantly notable slow morphing changes over time | | `fluctuating` | Significant fast or semi-fast irregular movement | | `glitched` | Digital error artefacts | | `grainy` | Audibly composed of tiny grains | | `pulsing` | Obvious rhythmic pulse | ### 16. 🎷 Timbre (real instrument tone): What is its timbre like? | Tag | Description | | :-- | :-- | | `brassy` | Like brass instruments | | `breathy` | Containing air noise, like wind instruments | | `strings-like` | Characteristic resonance of string instruments | | `reedy` | Characteristic of reed instruments | | `choir-like` | Characteristic of choral voices | | `organ-like` | Characteristic of an organ | | `percussive` | Short, sharp attack | ### 17. 🎚️ Timbre (synthesis technique): What is its timbre like? | Tag | Description | | :-- | :-- | | `analog` | Warm, imprecise, vintage character | | `FM` | Frequency modulation synthesis | | `granular` | Granular synthesis | | `physical modelling` | Simulating real-world physics | ### 18. 💎 Timbre (frequency): What is its timbre like? | Tag | Description | | :-- | :-- | | `airy` | Soft, open, high-frequency hiss | | `circuit bent` | Characteristic of modified electronic devices | | `cold` | Thin, clinical, lacking warmth | | `digital` | Clean, precise, computer-generated character | | `distorted` | Overdriven, crushed, non-linear | | `full-spectrum` | Wide frequency range | | `fuzzy` | Indistinct, soft-edged, unclear | | `glassy` | Clear, fragile, transparent | | `gritty` | Rough, textured, unpolished | | `harsh` | Abrasive, aggressive high frequencies | | `hissing` | Sibilant, white noise | | `lo-fi` | Tape, vinyl, or bitcrush-style degradation — hiss, crackle, wow/flutter, reduced fidelity | | `lush` | Full, rich, densely layered | | `metallic` | Resonant, hard, bright, like metal | | `muddy` | Unclear low-mid frequencies | | `muffled` | Dampened high frequencies | | `nasal` | Strong mid-range resonance | | `noisy` | Contains noise components, imperfect. If the sound is 100% noise use \`noise\` instead. | | `pure` | Free from noise, clean sine-like quality | | `resonant` | Strong resonant peaks in frequency | | `ringing` | Clear high unrelenting resonant sound | | `rumbly` | Very low frequency non-pitch sustained noise | | `saturated` | Subtly distorted, harmonically enhanced | | `smooth` | Even, consistent, without sharp edges | | `thin` | Lacking in fullness, narrow frequency range | | `warm` | Pleasant mid-range and low-mid-range, rounded harmonics | | `whining` | High-pitched fluctuating sound | ### 19. 🎵 Genre: What genres might this item fit best into? `80s`, `EDM`, `IDM`, `ambient`, `blues`, `chillout`, `chiptune`, `cinematic`, `disco`, `downtempo`, `drum & bass`, `dubstep`, `electronic`, `folk (genre)`, `funk`, `future bass`, `glitch`, `hip-hop`, `house`, `industrial`, `jazz`, `lo-fi`, `metal (genre)`, `orchestral`, `pop`, `rock`, `synthwave`, `techno`, `trance`, `trap`, `vaporwave`, `world`. **lo-fi:** Tape, vinyl, or bitcrush-style degradation — hiss, crackle, wow/flutter, reduced fidelity Specifying at least one genre is recommended for all presets and instruments. --- # Frequently asked questions > {/* ### Can I add my own samples into Floe? Floe does not support ad-hoc sampling at the moment. We describe Floe as a _sample library platform_ rather than a sampler (alternatively you could describe it as an open ROMpler). It is a platform for comprehensive, polished products. If you are a software developer, you can use our Lua tools to make your own sample libraries for Floe. ### Does Floe load SFZ/Soundfont/other formats? No, Floe currently only loads the Floe sample library format, an open format with similar ideas to SFZ but using the Lua programming language. Floe also supports the legacy Mirage sample library format used by some FrozenPlain libraries. --- # Glossary > {/* To best understand Floe, it's helpful to know exactly what we mean when we mention specific terms: - **[Package](/docs/installation/install-packages#what-is-a-package)** — the portable distribution container used to download and install Floe content (`.floe-pkg` or `.floe-pkg-enc`). Packages may contain sample libraries, presets, or both. - **[Sample Library](/docs/reference/sample-libraries)** — a collection of mapped, playable sounds along with images, tags, and other metadata. Sample libraries provide the _instruments_ and _impulse responses_ that Floe loads. - **[Instrument](/docs/reference/instruments)** — a playable sound source loaded into one of Floe's 3 layers, such as a sampled piano or an ambient drone (provided by a sample library). - **[Impulse Response](/docs/usage/effects#convolution-reverb)** — a sample that determines the character of Floe's Convolution Reverb effect (provided by a sample library). - **[Preset](/docs/usage/presets)** — a production-ready snapshot of all of Floe's parameters and options, along with a name, description, and tags. --- # Overview > A tour of Floe's window and how sound flows through it ## What is Floe? Floe is an audio plugin for your digital audio workstation (DAW). It's a platform for performing, finding, and transforming sounds from compatible sample libraries. It hosts sample-based instruments (sampled pianos, synths, textures, and so on) and exposes an extensive set of parameters for venturing into _sample-based synthesis_. A comprehensive presets system with powerful browsers, macros, a random variation generator, and other features make it a formidable engine for sample libraries. It focuses on ease-of-use and performance, designed to offer a curated experience for producing music rather than overwhelming complexity. ## Library platform Floe is not designed for ad-hoc sampling — you can't currently import your own samples. Instead, it's an open platform for professional, curated, sample-library products. For those with programming experience, the means to make custom libraries is fully open. ## Key features - 3 independent layers to blend and mix - even across different libraries - Totally free and open-source; offline, no logins, no catches - 11 effects in a reorderable rack - Powerful [granular synthesis](/docs/usage/granular) - Per-layer [arpeggiator](/docs/usage/arpeggiator) - Comprehensive [browsers](/docs/usage/browsers) for finding the right sound or preset - [Random variation generator](/docs/usage/randomisation) - CPU efficient - Resizable UI - All baseline features: ADSR, filters, EQ, MIDI CC & sustain pedal support - Sound design friendly: undo/redo, A/B comparison for preset edits, macro knobs - [Free sample libraries](/packages) ### New in version 2 Floe is improving: the recent free version 2 update of Floe offers a substantial set of new features and improvements. Read about the update in the [blog post](/blog/floe-2-0-0-beta-2). ## The UI ![Floe's main window with its four regions highlighted](/images/screenshots/overview.png) 1 2 3 4 5 1. **Top panel** — global controls: preset name and browser, save, undo/redo, the main menu, and master volume. 2. **Main content** — showing the background image of the sample library, with one of 3 selectable tabs: [_Perform_](/docs/usage/perform) shows the distraction-free basic view, [_Layers_](/docs/usage/layers) exposes the per-layer parameters for each of the three layers, and [_Effects_](/docs/usage/effects) is the reorderable effects rack. 3. **Bottom panel** — the keyboard, plus context-sensitive controls (key ranges, macros, etc.) depending on the active tab. 4. **Main tabs** — switches the main content between _Perform_, _Layers_, and _Effects_. 5. **Resize corner** — drag to scale the window (fixed aspect ratio). The _window size_ buttons in the preferences panel do the same. In some DAWs such as Logic Pro, you must grab this exact point of Floe, not the corner of DAW window wrapping it. ## Signal flow Notes are sent in parallel to three identical layers — each hosting its own instrument with per-layer envelope, tuning, filter and LFO. The layers are combined and fed through a shared, reorderable effects rack, then a master volume. ## Tips - Knobs and sliders respond to click-and-drag (up/down or left/right). Hold `shift` for fine adjustments, `ctrl`/`cmd`+click to reset to default, double-click to type a value, and right-click for more options. - Hovering over most elements displays a tooltip with a brief description. Tooltips can be disabled in the preferences panel. - Floe is designed to be efficient with your CPU and can be added multiple times in a single project; multiple instances will share resources such as sample libraries to keep memory usage low. --- # Quick Start Guide > {/* Get up and running with Floe in just a few simple steps. ## Before you start Floe is an **engine** — it's empty without sample libraries. If you already have packages (perhaps sent to your email), jump below to _Setting up Floe_. Otherwise, browse the [packages](/packages) page first to discover free and paid options. ## Setting up Floe 1. **[Download Floe](/download)** and install it on your computer. 2. **Download your packages** of your choice. 3. **Open your DAW**. 4. **Add the Floe plugin** - often found as a 'virtual instrument' under 'Floe Audio' in your plugin list. 5. **[Install your packages](/docs/installation/install-packages)** by opening the Floe's Preferences and clicking the **Install package** button. 6. **Select your downloaded package** file(s). After a few moments, your libraries and presets will be available to use. ## Load a preset Now, let's make some sound: 1. **Open the preset browser** by clicking the preset name at the top of Floe's window. 2. **Choose a preset** by clicking on one from the list on the right. 3. **Play some notes** on your MIDI keyboard or DAW piano roll. 4. **Close the preset browser** using the button or clicking outside the browser. ## Change an instrument A _Preset_ is a full production-ready setup of all of Floe's sounds and parameters. An _Instrument_ on the other hand, is a single sound-generator within Floe. These are loaded into any of Floe's 3 layers. Instruments are the building blocks in Floe. Sometimes an instrument is a single sample, sometimes it's a detailed multi-sampled emulation of a real instrument. 1. **Open the instrument browser** by clicking the instrument name in the layer you want to change. An instrument name might be something like _Xylophone_ or _Analog Pad_. 2. **Choose an instrument** by clicking on one from the list on the right. 3. **Play some notes** on your MIDI keyboard or DAW piano roll and notice how the sound has changed. note Floe is continuously improving. Share your feedback or feature ideas on GitHub, forums or via email. --- # Installing Floe > Instructions for downloading and installing Floe on Windows, macOS, and Linux Simply [download](/download) and run the installer for your operating system. For thoroughness, this page provides detailed installation instructions for each platform. Windows macOS Linux ## Requirements On Windows, Floe is available in the CLAP and VST3 formats. We recommend using the CLAP version where possible. Requirements: - Windows 10 or later - 64-bit computer - x86-64 processor with SSE2 support (almost all processors in a Windows PC since ~2006 have this) - 64-bit CLAP or VST3 host. CLAP hosts include Reaper, Bitwig, FL Studio (2024 or newer) and Studio One Pro (v7 or newer). VST3 hosts include Cubase, Studio One, Ableton Live, Reason, and more. Just to be extra clear: there's no 'standalone' application and no AAX (Pro Tools) support. We hope to expand Floe's compatibility in the future. ## Overview To install Floe, download the installer from the [downloads](/download) page and extract it (normally double-click). Double click on the installer EXE file and follow the instructions. ### Alternative: Manual Installation (Advanced) Normally you'll want to use the installer, but there could be some cases where you'd prefer to install Floe manually. To allow for this, we provide a zip file that contains Floe's plugin files; these can also be found on the [downloads](/download) page. Extract it and move the files to your plugin folders. - **CLAP:** Move `Floe.clap` into `C:\Program Files\Common Files\CLAP` - **VST3:** Move `Floe.vst3` into `C:\Program Files\Common Files\VST3` * * * ### How to update Floe To update Floe, simply download and run the latest installer again. It will replace the old version in a backwards-compatible way — your DAW projects won't break. Alternatively, if you manually installed Floe, install the latest files - replacing the old ones. ### Checking for updates Floe can automatically check for available updates. It does this in a simple, non-intrusive way. When a newer version is available, a red dot will appear on the 3-dots menu in Floe's window. ![Floe red dot update indicator](/images/screenshots/update-indicator.png) Open the menu and click "Info" to show you the options: ignore the update, or visit the download or changelog pages. Ignoring the update means the red dot will disappear until a newer version is available. ![Floe info panel update info](/images/screenshots/check-for-updates.png) ### Disabling automatic update checks You can disable automatic update checks by unchecking the "Check for updates" option in Floe's preferences panel. ### Beta updates There is also a checkbox on the preferences panel for receiving update notifications for the latest release, including if there's a newer beta version available. This is only recommended in certain situations. See the [Beta Testing](/docs/about-the-project/beta-testing) page for more information. --- # Install Packages > How to install Floe packages containing sample libraries and presets ### At a glance Download your package file(s). Click the 'Install package' button in Floe's Preferences panel. Direct it to the package file. ### Full instructions Firstly, if you haven't already, [download & install Floe](/download). Next, load up the Floe plugin in your DAW. Download your chosen package(s) (`.floe-pkg` or `.floe-pkg-enc` files containing sample libraries and presets). To install: 1. Open Floe's Preferences panel ( cog icon) 2. Go to the Packages tab 3. Click 'Install package' and select your package file(s) 4. Done - libraries/presets are immediately available The package files can be deleted after installation. No restart required. ![Floe Preferences panel showing the Packages tab](/images/screenshots/install-packages.png) ## Advanced Details ### What is a package? A package is the portable distribution container used by Floe. It's exclusively used as the format for **downloading and installing content**. A package may contain: - Samples Libraries - Presets/Preset Banks Typically, a package contains one sample library, and a bank of factory presets for the library. But alternatively, a package could also contain only presets, or a collection of sample libraries, or any combination. Floe doesn't remember packages after installation; they're just a means to get content onto your computer. Packages are created using Floe's [packaging tools](/docs/develop/packaging), or using a ZIP utility. ### Encrypted packages Some packages use the `.floe-pkg-enc` format. Installation is the same as any other package — click 'Install package' and select the file — with one extra step: Floe prompts for a license key. Encrypted packages require Floe version 2 or later. ![License key prompt](/assets/images/encrypted-package-key-required-ada43de387f73d3c97c39fbd812f252a.png) Paste the license key provided by the package developer, then click **Activate**. The whole process is offline; no internet connection or account is required. A license key is personal to you and embeds your identifying information. Once installed, Floe shows who the package is licensed to: ![Installed encrypted package showing license holder](/assets/images/encrypted-package-installed-4e4b0d6b5f7cab9dab0c4ee87284000d.png) ### ZIPs As of Floe version 2, Floe's default for packages now use `.floe-pkg` or `.floe-pkg-enc` format. The default used to be `.zip` files. Floe still supports packages in ZIP format. We switched to `floe-pkg` because it's natural to extract a ZIP as soon as you download it, but Floe's 'Install Package' button wanted the ZIP un-extracted, often leaving to confusion and hassle. If you still have a package ZIP, you can still install it. Don't extract it, leave it as a ZIP file and direct Floe to it using 'Install Package'. If you're on macOS: be aware that Safari automatically extracts ZIP files after downloading. To prevent this, open Safari's settings and uncheck **Open "safe" files after downloading** in the General tab. ### Install to a custom location 1. Create custom folders using Finder/File Explorer such as "Floe Libraries" and "Floe Presets" 2. Add them to Floe's preferences under their respective heading 3. Select them on the Package _install folder_ menus #### Full details By default, Floe installs content to standard folders on your main drive. This can be changed though by selecting custom folders in the Preferences panel's Packages tab. If you've not done this before, the dropdowns for _install folder_ menus might only show 'Default' locations. You need to first tell Floe about your custom folders and then select them here. To do that, use your file browser program (Finder/File Explorer) and create the folder(s) where you want to keep Floe content and add them on Floe's preferences. Floe uses separate folders for sample libraries versus presets, so you might want to create one for each. For example, on your _SAMPLES_ hard drive, create folders: "Floe Libraries" and "Floe Presets". Add these 2 folders on Floe's preferences panels and select them as the default installation locations. Further details about folder management can be found on the [Folders](/docs/usage/folders) page. ### How 'Install package' works Floe handles the installation process intelligently. It will check existing installations across all known folders, check for conflicts and handle upgrades. It will even detect if you've modified a library and give you the option to keep your modified version. It will ask you about skipping or overwriting if it needs too. It will never duplicate libraries unnecessarily. ### Manually installing For non-encrypted packages, (`.floe-pkg` or `.zip`), you can manually install libraries and presets by extracting the package file into the correct folders (instead of using the 'install package' button). Despite the different extension, `.floe-pkg` are also just ZIP files. You might want to first rename it to `.zip` and then extract it using any ZIP extraction tool - often just a matter of double-clicking on it. 1. Extract the package file. 2. Open Floe. 3. Open the Preferences panel using the gear icon at the top. 4. Open the Folders tab. 5. Here you can control which folders Floe looks for libraries and presets in. Copy/move the contents of the package's Libraries into one of Floe's library folders, and the same for Presets into one Floe's presets folder. 6. Done. No need to restart Floe. Note: `.floe-pkg-enc` (encrypted) packages cannot be manually extracted; they must be installed through Floe using a license key. ### Convert floe-pkg to zip No conversion needed! Just change the file extension from 'floe-pkg' to 'zip'. This only works for `.floe-pkg` files, not encrypted `.floe-pkg-enc` files. There are countless ways to do this. As quick guidance for our users: - On macOS Finder: right-click the file -> Get Info -> edit Name & Extension. - On Windows File Explorer: View -> Show -> File name extensions. Then right-click the file and rename. ### Uninstalling packages Floe doesn't track packages - they are just the installation format. However, you can uninstall libraries and presets. Visit the [Uninstalling](/docs/installation/uninstalling) page for full instructions. ### Mirage Compatibility If the package is a [Mirage](/docs/about-the-project/mirage) library and you are getting errors about missing Mirage Compatibility, [download Mirage Compatibility Package.floe-pkg](https://github.com/FrozenPlain/floe-mirage-compatibility/releases/download/v1.2/FrozenPlain.-.Mirage.Compatibility.Package.floe-pkg) and install it like any other package. --- # Uninstalling > Instructions for uninstalling Floe and removing libraries and presets You can uninstall sample libraries, presets, and Floe itself by following the steps below. If you want to completely remove Floe, follow all the steps in order. _Packages_ are not uninstalled directly because they're just the distribution format for sample libraries and presets; Floe doesn't 'remember' packages. If you uninstall or overwrite a library, preset or preset bank by accident you can typically recover the item from your computer's Trash or Recycle Bin. You may find that item in the trash has a suffix such as '(old)'. Once restored you may rename the file/folder to remove this suffix. ## Uninstall sample libraries 1. Open Floe 2. Click on the 3-dots menu at the top, then "Info". 3. For each installed libraries, click the _uninstall_ button. You can also do this by right-clicking on the library name in the instrument/IR browser and choosing 'Uninstall'. ![Uninstall library](/images/screenshots/uninstall-library.png) ## Uninstall presets 1. Open Floe 2. Open the preset browser by clicking on the preset name at the top. 3. Right-click on the heading of each preset bank and choose 'Uninstall' Repeat for all installed preset banks. ![Uninstall preset bank](/images/screenshots/uninstall-preset-bank.png) ## Uninstall Floe plugin ### Windows On Windows, Floe can be uninstalled using the standard method for uninstalling software, via the 'Add or Remove Programs' control panel. See the [Windows documentation here](https://support.microsoft.com/en-gb/windows/uninstall-or-remove-apps-and-programs-in-windows-4b55f974-2cc6-2d2b-d092-5905080eaf98). Close your DAW before running the uninstaller. **This uninstalls Floe, but not libraries or presets.** This uninstaller also supports uninstalling Mirage, the predecessor to Floe. ### / macOS or Linux To uninstall Floe on macOS or Linux, you must delete Floe's files manually. Visit the [file locations](/docs/reference/file-locations) page to find where Floe's files are located on your system. For each of these locations, delete the files and folders. The key files to delete are the plugin files. However, you might also want to delete Floe's small additional files for thoroughness. --- # Attribution > Information about attribution requirements for sample libraries in Floe ## At a glance If a sample library requires attribution: - Floe will show you the required attribution text. - Copy-and-paste this text alongside wherever you share your music. - You own your music (sell it, relicense it, etc.) - you just need to credit the creator of the sounds. The above bullet points assume the license is the "Creative Commons Attribution 4.0 International" license — a very common attribution-required license. ## About attribution-required licenses A license tells you what you can and can't do with a sample library. Most developers choose a license that allows you to use the sounds in your music without having to credit them. However, some developers choose an attribution-required license such as the widely-used [Creative Commons Attribution](https://creativecommons.org/licenses/by/4.0/) license (also known as "CC BY"). This license allows you to use the sounds for free, even in commercial projects, as long as you credit the creator by including a bit of attribution text along with your music. For example, you might include the text in a caption on your website, in the album notes or in a credits roll (or any ["reasonable manner"](https://creativecommons.org/licenses/by/4.0/legalcode.en#s3a2)). The music that you create with sounds under this license is yours: you can sell it, stream it, relicense it or give it away; you are just required to credit the sound's creator. For some people, giving attribution is a deal-breaker. But here's some reasons why it might not be so bad: - Attributions can support the creators of sounds - providing them with recognition, traffic, and potential customers. - Sharing where your sounds come from helps other musicians find great sounds too - increasing the quality of music everywhere. - Attributions can look professional and show a high level of care in your work. ## How Floe helps Floe makes it dead-easy to comply with attribution requirements. When you load a sound from a library that requires attribution, Floe will show a small icon in the top of the window. Clicking this will show you the exact text that you can copy-and-paste wherever you need to. Floe tracks all attribution requirements across all instances of Floe, so you only need to do it once. ![Attribution GUI](/assets/images/attributions-gui-d88fd4073e51e72bb4c0817c718e0618.png) _Example of the attribution GUI in Floe_ ## Disclaimer Whilst this page is based on careful research and understanding of the topic, it is not legal advice. --- # Autosave > How Floe's autosave feature works and how to use it Floe reduces the chance of you losing your work by automatically saving its state frequently. Autosaves are useful if either Floe or the DAW crashes unexpectedly — hopefully a very rare occurrence. But they're also useful for other reasons such as accidentally removing a track, or changing parameters in a way you didn't intend. Every instance of Floe has an auto-generated name, for example: dawn-205. You can see this in the top panel of Floe's window. This is useful because it helps identify which instance of Floe an autosave came from so that you can correctly restore it. Autosave files also contain the date and time they were created. The autosave feature has reasonable default settings, but you can edit them in the Preferences panel too. Autosaves are just preset files. You can load them as you would a preset file. Autosaves can be found here: - Windows: `C:\Users\Public\Floe\Autosaves` - macOS: `/Users/Shared/Floe/Autosaves` - Linux: `~/Floe/Autosaves` Some additional things to note: - The autosave system is efficient - it shouldn't noticeably slow your computer down. - Floe will automatically delete autosaves older than a given number of days. - Floe will only keep a certain number of autosaves per instance. If the limit is reached, the oldest autosave will be deleted to make room for the new one. - Autosaves are tiny files, typically around 2 Kb in size. Your computer won't run out of space because of them. In the future we'd like to add a friendly interface for browsing and restoring autosaves. --- # Error Reporting > How Floe handles error reporting and feedback Floe strives to be reliable for professional work. To help us achieve this we have various systems in place. ## Error reports If Floe detects that something has gone wrong, it will submit a totally anonymous error report to us. This report contains information about the error, the state of Floe leading up to the error, and information about the computer Floe is running on. This enables us to get the key information to fix bugs quickly without having to get you to manually gather and send us information. You can disable all online reporting in the Preferences panel if you wish. Floe is open source, so you can also inspect the code to see how this works. ## Send feedback Floe has a form that you can use to submit bug reports, feature requests, or general feedback. This is found by clicking on the 'Send Feedback' button in the three-dots menu at the top of Floe's window. Please use this to report any issues you encounter. We want to know about it and want to fix it. ## Crash protection Floe tries to never crash the host. If Floe detects that something has gone wrong, it will enter an unresponsive mode rather than crashing the host. It won't produce any sound and it can't be interacted with. In this rare situation, make note of the instance name at the top of Floe's window, such as 'dawn-205'. Then, remove the plugin from your DAW and re-add it. You can then restore your work from an [autosave](/docs/reference/autosave) with the instance name you just noted. Anonymous crash information will usually be reported to us automatically for us to address the issue. --- # File Locations > Quick reference guide for where Floe stores its files on Windows, macOS, and Linux This page provides a quick reference for where Floe creates and stores its files on your system. Windows macOS Linux ## Public files - Default sample libraries folder: `C:\Users\Public\Floe\Libraries\` - Default presets folder: `C:\Users\Public\Floe\Presets\` - Preferences: `C:\Users\Public\Floe\Preferences\floe.ini` - Autosaves: `C:\Users\Public\Floe\Autosaves\` ## Plugins - CLAP plugin: `C:\Program Files\Common Files\CLAP\Floe.clap` - VST3 plugin: `C:\Program Files\Common Files\VST3\Floe.vst3` ## Auxiliary files - Persistent store: `%APPDATA%\Floe\persistent_store` - Device ID: `%APPDATA%\Floe\device_id` - Logs: `%LOCALAPPDATA%\Floe\Logs\` ## Mirage files These are only relevant if you used to have [Mirage](/docs/about-the-project/mirage) installed. - Preferences: `C:\ProgramData\Mirage\Settings\mirage.json` - Preferences (alternate): `C:\Users\\AppData\Local\FrozenPlain\Mirage\mirage.json` - VST2: `C:\Program Files\VSTPlugins\mirage64.dll` - VST2 (alternate): `C:\Program Files\Steinberg\VSTPlugins\mirage64.dll` - VST2 (alternate): `C:\Program Files\Common Files\VST2\mirage64.dll` - VST2 (alternate): `C:\Program Files\Common Files\Steinberg\VST2\mirage64.dll` ## Notes Auxiliary files can be deleted at any time (although you may have to re-set some preferences) - they will be recreated by Floe the next time it starts up. `floe.ini` is user-editable. We currently do not have have documentation for its contents. But the mechanisms are in place: changes you make to this file are instantly reflected in Floe. Floe's UI preferences panel also edits this file. `persistent_store` is a small binary file for storing things that are preferable to persist between sessions. `device_id` is a randomly generated ID that we use when error-reporting is switched on so that we can identify 'devices' and get data on the error/crash rate of our releases. Logs are small diagnostic text files that can be useful when troubleshooting issues. --- # Instruments > Instruments are Floe's core building block An instrument is a playable sound source. It might be something like 'Upright Piano' or 'Ambient Drone'. It might be a single sample that loops, or a multisampled instrument with many samples mapped across the keyboard along with velocity layers and round robins. Instruments are loaded into any of Floe's 3 [layers](/docs/usage/layers) using a powerful _[browser](/docs/usage/browsers)_ which lets you easily find instruments across all your installed libraries. A layer that has no instrument loaded will say 'None' instead of the instrument name - click this to open the browser. Instruments are provided via sample libraries, developed using Floe's open developer tools. --- # Legacy Parameters > How Floe ensures backwards compatibility ## At a glance Sometimes when loading an old DAW project some parameters on Floe might have exclamation icons next to them - don't panic! Your sound is perfectly safe and stable. What's happened is that an update Floe has added new parameters. The old parameter still exists and works the same but it's hidden out of sight - that's what the exclamation means. To resolve, you have 2 options: - Do nothing! If you don't need to further edit the preset, you can just leave it with the legacy parameters. Floe is stable in this state and sounds identical to when it was saved. - Update or 'modernise' the legacy parameter. Do this if you want to edit the preset further. It will allow you to use the main UI and new parameters without the icons blocking you. Modernisation performs a lossless migration from the old parameter to the new version. It's normally perfectly safe to do this but there's a couple of important caveats. Please read below. ## Overview Floe strives for perfect backwards compatibility: a preset or DAW project saved with any version of Floe will load up sounding exactly the same in any later version. To make this possible without dragging an ever-growing pile of outdated UI into the main interface, Floe **never deletes a parameter**. When a parameter needs to change, we add a new parameter to the main UI and move the old one out of sight as a "legacy" parameter that quietly keeps doing its old job. ## When does a parameter become legacy? A parameter becomes legacy when we change it in a way that would otherwise alter how an existing project sounds. We try to keep this to a minimum. Common reasons: - **Adding new options to a menu** — for example, new LFO shapes, new filter types, or new modes for monophonic voice behaviour. Automation written against the old menu would land on different values in a wider menu, so we add a new menu parameter and keep the old one for compatibility. - **Improving a parameter's feel** — adjusting how the knob's position maps to the audible value so the response is better spread across the range, or has a more intuitive projection at low or high values. - **Combining or simplifying** several controls into one, where the new control isn't a 1-to-1 substitute for any single old one. In every case the old parameter stays alive behind the scenes so your projects sound the same, and a new modern parameter appears on the main UI. ## Presets vs. DAW projects When you load a **preset**, Floe typically automatically modernises any legacy values it finds: the audibly-equivalent value is copied onto the modern parameter and the legacy slot is cleared. You'll see no legacy parameters and the modern UI controls work as expected. When you load a **DAW project**, Floe can't modernise automatically because _it has no way of knowing whether your DAW is automating a legacy parameter_ — silently changing the target would break your automation. So instead, Floe keeps the legacy value intact, lets the legacy parameter override its modern equivalent, and shows a small yellow warning badge on the affected control. The Legacy Parameters panel (accessible from the 3-dots menu) lists every legacy parameter that is currently overriding a modern control. ## What the modern control looks like while overridden While a legacy override is in effect, the modern control on the main UI is **greyed out and not interactive** — there's no point dragging it because the legacy value is what reaches the audio engine. The yellow warning badge in its corner is clickable; it opens the Legacy Parameters panel directly. The control's knob position and any associated visualisers (filter response curves, EQ displays, envelope shapes, etc.) reflect the _modern_ parameter's underlying value, not the legacy value driving the audio. **The sound you hear is correct** — it's the legacy value being applied — but the on-screen position and graphics show the modern parameter underneath. Once the override is cleared, the display, interactivity and audio all match up again. ## Modernising a legacy parameter "Modernisting" (or "updating") hands control over from the legacy parameter to its modern replacement, copying across an audibly-equivalent value so the sound doesn't change. The Legacy Parameters panel offers two ways to do this: - **Update all** — modernises every overriding parameter at once. - **Update (per row)** — modernises a single parameter. Your project will sound exactly as it did before, and from then on the modern control on the main UI is live again. If you have any DAW automation targeting one of these parameters, **don't modernise it without first removing or re-creating that automation**: Floe decides whether a legacy parameter is "overriding" purely by checking whether its value is at the default, so live automation will re-engage the override the moment it writes a non-default value, and the modern control will go unresponsive again. The recommended order: 1. **Check your DAW** for any automation lanes targeting the legacy parameter. 2. If there is automation, **delete it in your DAW** (and, if you still want that automation, recreate it on the modern parameter). 3. Open the Legacy Parameters panel and click **Modernise** (per row) or **Modernise all**. If you have no DAW automation on a legacy parameter, you can skip step 2 — modernising is then completely safe. --- # Parameters > A list of all parameters in Floe ## Shorten parameter names In your DAW, the names of Floe's parameters are long and descriptive, such as "Effect Distortion On". You can switch to abbreviated names if you need the names to show in a smaller width, for example, "Dist On". Enable this option on Floe's preferences panel. You might need to close and re-open your DAW for this change to take effect. ## Parameter table For reference purposes, this section lists all of Floe's parameters in case you need to look up specific IDs or details. For more of a usage guide, consult the documentation pages on layers, effects, looping, etc. | Module | Name | ID | Abbreviated Name | Description | | --- | --- | --- | --- | --- | | Layer 1 | Volume | 160 | L1 Volume | Layer volume | | Layer 1 | Mute | 161 | L1 Mute | Mute this layer | | Layer 1 | Solo | 162 | L1 Solo | Mute all other layers | | Layer 1 | Pan | 163 | L1 Pan | Left/right balance | | Layer 1 | Detune Cents | 164 | L1 Detune Cents | Layer pitch in cents; hold shift for finer adjustment | | Layer 1 | Pitch Semitones | 165 | L1 Pitch Semitones | Layer pitch in semitones | | Layer 1/Playback/Loop | Start | 167 | L1Lp Start | Loop-start | | Layer 1/Playback/Loop | End | 168 | L1Lp End | Loop-end | | Layer 1/Playback/Loop | Crossfade Size | 169 | L1Lp Crossfade Size | Crossfade length; this smooths the transition from the loop-end to the loop-start | | Layer 1/Playback/Loop | Sample Start Offset | 171 | L1Lp Sample Start Offset | Change the starting point of the sample | | Layer 1/Playback/Loop | Reverse On | 172 | L1Lp Reverse On | Play the sound in reverse | | Layer 1/Main/Volume Envelope | On | 173 | L1Vol On | Enable/disable the volume envelope; when disabled, each sound will play out entirely | | Layer 1/Main/Volume Envelope | Attack | 174 | L1Vol Attack | Volume fade-in length | | Layer 1/Main/Volume Envelope | Decay | 175 | L1Vol Decay | Volume ramp-down length (after the attack) | | Layer 1/Main/Volume Envelope | Sustain | 176 | L1Vol Sustain | Volume level to sustain (after decay) | | Layer 1/Main/Volume Envelope | Release | 177 | L1Vol Release | Volume fade-out length (after the note is released) | | Layer 1/Main/Filter | On | 178 | L1Filt On | Enable/disable the filter | | Layer 1/Main/Filter | Legacy Cutoff Frequency | 179 | L1Filt Legacy Cutoff Frequency | Legacy cutoff parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/Main/Filter | Legacy Resonance | 180 | L1Filt Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/Main/Filter | Legacy Type | 181 | L1Filt Legacy Type | Legacy filter type parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/Main/Filter | Envelope Amount | 182 | L1Filt Envelope Amount | How strongly the envelope should control the filter cutoff | | Layer 1/Main/Filter | Attack | 183 | L1Filt Attack | Length of initial ramp-up | | Layer 1/Main/Filter | Decay | 184 | L1Filt Decay | Length ramp-down after attack | | Layer 1/Main/Filter | Sustain | 185 | L1Filt Sustain | Level to sustain after decay has completed | | Layer 1/Main/Filter | Release | 186 | L1Filt Release | Length of ramp-down after note is released | | Layer 1/LFO | On | 187 | L1Lfo On | Enable/disable the Low Frequency Oscillator (LFO) | | Layer 1/LFO | Legacy Shape | 188 | L1Lfo Legacy Shape | Legacy LFO shape parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/LFO | Mode | 189 | L1Lfo Mode | Oscillator phase mode. Retrigger: each voice has its own phase, Free: all voices that are playing simultaneously will have the same phase | | Layer 1/LFO | Amount | 190 | L1Lfo Amount | Intensity of the LFO effect | | Layer 1/LFO | Target (Legacy) | 191 | L1Lfo Target (Legacy) | Legacy LFO target parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/LFO | Time (Tempo Synced) | 192 | L1Lfo Time (Tempo Synced) | LFO rate (synced to the host) | | Layer 1/LFO | Time (Hz) | 193 | L1Lfo Time (Hz) | LFO rate (in Hz) | | Layer 1/LFO | Sync On | 194 | L1Lfo Sync On | Sync the LFO speed to the host | | Layer 1/EQ | On | 195 | L1Eq On | Turn on or off the equaliser effect for this layer | | Layer 1/EQ/Band 1 | Legacy Frequency | 196 | L1EqB1 Legacy Frequency | Legacy band 1 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/EQ/Band 1 | Legacy Resonance | 197 | L1EqB1 Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/EQ/Band 1 | Gain | 198 | L1EqB1 Gain | Band 1: volume gain at the frequency | | Layer 1/EQ/Band 1 | Legacy Type | 199 | L1EqB1 Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/EQ/Band 2 | Legacy Frequency | 200 | L1EqB2 Legacy Frequency | Legacy band 2 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/EQ/Band 2 | Legacy Resonance | 201 | L1EqB2 Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/EQ/Band 2 | Gain | 202 | L1EqB2 Gain | Band 2: volume gain at the frequency | | Layer 1/EQ/Band 2 | Legacy Type | 203 | L1EqB2 Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/Config | Legacy Velocity Mapping | 204 | L1 Legacy Velocity Mapping | Choose how MIDI velocity should affect the volume of this layer. There are 6 modes that can be selected for this parameter via the buttons on the GUI. By setting one layer to be quiet at high velocities and another layer to be quiet at low velocities you can create an instrument that sounds different based on how hard the notes are played. (0) Ignore velocity, always play full volume. (1) Loudest at high velocity, quietist at low velocity (2) Loudest at low velocity, quietist at high velocity (3) Loudest at high velocity, quietist at middle velocity and below (4) Loudest at middle velocity, quietist at both high and low velocities (5) Loudest at bottom velocity, quietist at middle velocity and above, | | Layer 1/Config | Keytrack On | 205 | L1 Keytrack On | Tune the sound to match the key played; if disabled it will always play the sound at its root pitch | | Layer 1/Config | Legacy Monophonic On | 206 | L1 Legacy Monophonic On | Only allow one voice of each sound to play at a time | | Layer 1/Config | MIDI Transpose On | 208 | L1 MIDI Transpose On | Transpose the mapping of samples by the given semitone offset, meaning a higher/lower sample may be triggered instead of stretching/shrinking the audio by large amounts (only useful if the instrument is multi-sampled) | | Layer 1/Playback/Loop | Loop Mode | 209 | L1Lp Loop Mode | The mode for looping the samples | | Layer 1/Config | Key Range Low | 210 | L1 Key Range Low | The lowest key that will trigger this layer; if the key is lower than this, the layer will not play | | Layer 1/Config | Key Range High | 211 | L1 Key Range High | The highest key that will trigger this layer; if the key is higher than this, the layer will not play | | Layer 1/Config | Key Range Low Fade | 212 | L1 Key Range Low Fade | The length of the volume fade-in at the low end of the key range | | Layer 1/Config | Key Range High Fade | 213 | L1 Key Range High Fade | The length of the volume fade-out at the high end of the key range | | Layer 1/Config | Pitch Bend Range | 214 | L1 Pitch Bend Range | The pitch range in semitones of the MIDI pitch wheel | | Layer 1/Config | Monophonic Mode | 215 | L1 Monophonic Mode | Control voice behavior when notes overlap. Off: multiple voices play simultaneously (polyphonic). Retrigger: new notes stop previous notes. Latch: first note plays until all keys are released, new notes are ignored | | Layer 1/Playback | Play Mode | 216 | L1 Play Mode | How this layer plays its samples | | Layer 1/Playback/Granular | Length | 217 | L1Grn Length | Duration of each grain snippet | | Layer 1/Playback/Granular | Speed | 218 | L1Grn Speed | How fast the grain position moves through the sample | | Layer 1/Playback/Granular | Position | 219 | L1Grn Position | Where in the sample grains are sourced from | | Layer 1/Playback/Granular | Density | 220 | L1Grn Density | Controls how densely grains overlap, relative to the grain length. At the midpoint, grains play end-to-end. Lower values add gaps between grains for a sparse texture; higher values make grains overlap for a denser, richer sound | | Layer 1/Playback/Granular | Spread | 221 | L1Grn Spread | Region around the playhead where grains can start from. Small values focus grains near the playhead, large values spread them across a wider area | | Layer 1/Playback/Granular | Smooth | 222 | L1Grn Smooth | Crossfade between grains to remove clicks. Low is hard cuts, high is full overlap fade | | Layer 1/Playback/Granular | Pan | 223 | L1Grn Pan | Randomise the stereo position of each grain. At 0% all grains play centred, at 100% grains can be panned anywhere from fully left to fully right | | Layer 1/Playback/Granular | Detune | 224 | L1Grn Detune | Randomise the pitch of each grain. At 0% all grains play at the original pitch, at 100% grains can be detuned up to a semitone up or down | | Layer 1/Playback/Granular | Direction | 225 | L1Grn Direction | Chance that grains spawn playing in the opposite direction to the main playhead. At 0% all grains play in the main direction, at 100% there's a 50/50 chance of each grain playing forwards or backwards | | Layer 1/Playback/Granular | Harmony | 226 | L1Grn Harmony | Chance that grains spawn at one of the selected harmony intervals instead of the root pitch. Configure which intervals are active using the Intervals button | | Layer 1/LFO | Legacy Shape V2 | 227 | L1Lfo Legacy Shape V2 | Legacy LFO shape parameter (v2). Kept for backwards-compatibility with DAW automation | | Layer 1/LFO | Target | 228 | L1Lfo Target | The parameter that the LFO will modulate | | Layer 1/Main/Filter | Resonance | 229 | L1Filt Resonance | The intensity of the volume peak at the cutoff frequency | | Layer 1/Arp | Note Order | 230 | L1Arp Note Order | Order in which held notes are played | | Layer 1/Arp | Trigger | 231 | L1Arp Trigger | Free: arpeggiator keeps running when new notes are pressed. Retrigger: arpeggiator restarts from step 1 | | Layer 1/Arp | Rate | 232 | L1Arp Rate | Arpeggiator rate (synced to host tempo) | | Layer 1/Arp | Length | 233 | L1Arp Length | Number of active steps in the arpeggiator pattern | | Layer 1/Arp | Arpeggiator Mode | 234 | L1Arp Arpeggiator Mode | Played Notes: arpeggiates held notes. Fixed Notes: plays a recorded note sequence | | Layer 1/Arp | Humanise | 235 | L1Arp Humanise | Add random timing variation to note starts and velocity. Higher values create looser, more human-like performance | | Layer 1/Arp | Auto Rate | 236 | L1Arp Auto Rate | Let Floe decide the rate so that the loop plays near to its original recorded rate rather than having to add large silent gaps between slices. The rate that Floe chooses varies depending on your host tempo. | | Layer 1/Arp | Polyrate | 237 | L1Arp Polyrate | Each octave plays at a different rate. Double means each octave up is 2x faster. 3:2 and 4:3 create polyrhythmic relationships between octaves | | Layer 1/Arp | One Shot | 238 | L1Arp One Shot | When enabled, the arpeggiator plays through the sequence once and then stops instead of looping | | Layer 1/EQ/Band 1 | Resonance | 239 | L1EqB1 Resonance | Band 1: sharpness of the peak | | Layer 1/EQ/Band 2 | Resonance | 240 | L1EqB2 Resonance | Band 2: sharpness of the peak | | Layer 1/Arp | Arpeggiator | 241 | L1Arp Arpeggiator | Enable/disable the arpeggiator | | Layer 1/LFO | Shape | 242 | L1Lfo Shape | Oscillator shape, including random and percussive waveforms | | Layer 1/EQ/Band 1 | Type | 244 | L1EqB1 Type | Band 1: type of EQ band | | Layer 1/EQ/Band 2 | Type | 245 | L1EqB2 Type | Band 2: type of EQ band | | Layer 1/EQ/Band 3 | Legacy Frequency | 246 | L1EqB3 Legacy Frequency | Legacy band 3 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 1/EQ/Band 3 | Resonance | 247 | L1EqB3 Resonance | Band 3: sharpness of the peak | | Layer 1/EQ/Band 3 | Gain | 248 | L1EqB3 Gain | Band 3: volume gain at the frequency | | Layer 1/EQ/Band 3 | Type | 249 | L1EqB3 Type | Band 3: type of EQ band | | Layer 1/Main/Filter | Cutoff Frequency | 250 | L1Filt Cutoff Frequency | The frequency at which the filter should take effect | | Layer 1/EQ/Band 1 | Frequency | 251 | L1EqB1 Frequency | Band 1: frequency of this band | | Layer 1/EQ/Band 2 | Frequency | 252 | L1EqB2 Frequency | Band 2: frequency of this band | | Layer 1/EQ/Band 3 | Frequency | 253 | L1EqB3 Frequency | Band 3: frequency of this band | | Layer 1/Main/Filter | Type | 254 | L1Filt Type | Filter type | | Layer 1 | Stereo Width | 255 | L1 Stereo Width | Layer stereo width: negative narrows toward mono, positive widens | | Layer 2 | Volume | 320 | L2 Volume | Layer volume | | Layer 2 | Mute | 321 | L2 Mute | Mute this layer | | Layer 2 | Solo | 322 | L2 Solo | Mute all other layers | | Layer 2 | Pan | 323 | L2 Pan | Left/right balance | | Layer 2 | Detune Cents | 324 | L2 Detune Cents | Layer pitch in cents; hold shift for finer adjustment | | Layer 2 | Pitch Semitones | 325 | L2 Pitch Semitones | Layer pitch in semitones | | Layer 2/Playback/Loop | Start | 327 | L2Lp Start | Loop-start | | Layer 2/Playback/Loop | End | 328 | L2Lp End | Loop-end | | Layer 2/Playback/Loop | Crossfade Size | 329 | L2Lp Crossfade Size | Crossfade length; this smooths the transition from the loop-end to the loop-start | | Layer 2/Playback/Loop | Sample Start Offset | 331 | L2Lp Sample Start Offset | Change the starting point of the sample | | Layer 2/Playback/Loop | Reverse On | 332 | L2Lp Reverse On | Play the sound in reverse | | Layer 2/Main/Volume Envelope | On | 333 | L2Vol On | Enable/disable the volume envelope; when disabled, each sound will play out entirely | | Layer 2/Main/Volume Envelope | Attack | 334 | L2Vol Attack | Volume fade-in length | | Layer 2/Main/Volume Envelope | Decay | 335 | L2Vol Decay | Volume ramp-down length (after the attack) | | Layer 2/Main/Volume Envelope | Sustain | 336 | L2Vol Sustain | Volume level to sustain (after decay) | | Layer 2/Main/Volume Envelope | Release | 337 | L2Vol Release | Volume fade-out length (after the note is released) | | Layer 2/Main/Filter | On | 338 | L2Filt On | Enable/disable the filter | | Layer 2/Main/Filter | Legacy Cutoff Frequency | 339 | L2Filt Legacy Cutoff Frequency | Legacy cutoff parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/Main/Filter | Legacy Resonance | 340 | L2Filt Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/Main/Filter | Legacy Type | 341 | L2Filt Legacy Type | Legacy filter type parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/Main/Filter | Envelope Amount | 342 | L2Filt Envelope Amount | How strongly the envelope should control the filter cutoff | | Layer 2/Main/Filter | Attack | 343 | L2Filt Attack | Length of initial ramp-up | | Layer 2/Main/Filter | Decay | 344 | L2Filt Decay | Length ramp-down after attack | | Layer 2/Main/Filter | Sustain | 345 | L2Filt Sustain | Level to sustain after decay has completed | | Layer 2/Main/Filter | Release | 346 | L2Filt Release | Length of ramp-down after note is released | | Layer 2/LFO | On | 347 | L2Lfo On | Enable/disable the Low Frequency Oscillator (LFO) | | Layer 2/LFO | Legacy Shape | 348 | L2Lfo Legacy Shape | Legacy LFO shape parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/LFO | Mode | 349 | L2Lfo Mode | Oscillator phase mode. Retrigger: each voice has its own phase, Free: all voices that are playing simultaneously will have the same phase | | Layer 2/LFO | Amount | 350 | L2Lfo Amount | Intensity of the LFO effect | | Layer 2/LFO | Target (Legacy) | 351 | L2Lfo Target (Legacy) | Legacy LFO target parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/LFO | Time (Tempo Synced) | 352 | L2Lfo Time (Tempo Synced) | LFO rate (synced to the host) | | Layer 2/LFO | Time (Hz) | 353 | L2Lfo Time (Hz) | LFO rate (in Hz) | | Layer 2/LFO | Sync On | 354 | L2Lfo Sync On | Sync the LFO speed to the host | | Layer 2/EQ | On | 355 | L2Eq On | Turn on or off the equaliser effect for this layer | | Layer 2/EQ/Band 1 | Legacy Frequency | 356 | L2EqB1 Legacy Frequency | Legacy band 1 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/EQ/Band 1 | Legacy Resonance | 357 | L2EqB1 Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/EQ/Band 1 | Gain | 358 | L2EqB1 Gain | Band 1: volume gain at the frequency | | Layer 2/EQ/Band 1 | Legacy Type | 359 | L2EqB1 Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/EQ/Band 2 | Legacy Frequency | 360 | L2EqB2 Legacy Frequency | Legacy band 2 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/EQ/Band 2 | Legacy Resonance | 361 | L2EqB2 Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/EQ/Band 2 | Gain | 362 | L2EqB2 Gain | Band 2: volume gain at the frequency | | Layer 2/EQ/Band 2 | Legacy Type | 363 | L2EqB2 Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/Config | Legacy Velocity Mapping | 364 | L2 Legacy Velocity Mapping | Choose how MIDI velocity should affect the volume of this layer. There are 6 modes that can be selected for this parameter via the buttons on the GUI. By setting one layer to be quiet at high velocities and another layer to be quiet at low velocities you can create an instrument that sounds different based on how hard the notes are played. (0) Ignore velocity, always play full volume. (1) Loudest at high velocity, quietist at low velocity (2) Loudest at low velocity, quietist at high velocity (3) Loudest at high velocity, quietist at middle velocity and below (4) Loudest at middle velocity, quietist at both high and low velocities (5) Loudest at bottom velocity, quietist at middle velocity and above, | | Layer 2/Config | Keytrack On | 365 | L2 Keytrack On | Tune the sound to match the key played; if disabled it will always play the sound at its root pitch | | Layer 2/Config | Legacy Monophonic On | 366 | L2 Legacy Monophonic On | Only allow one voice of each sound to play at a time | | Layer 2/Config | MIDI Transpose On | 368 | L2 MIDI Transpose On | Transpose the mapping of samples by the given semitone offset, meaning a higher/lower sample may be triggered instead of stretching/shrinking the audio by large amounts (only useful if the instrument is multi-sampled) | | Layer 2/Playback/Loop | Loop Mode | 369 | L2Lp Loop Mode | The mode for looping the samples | | Layer 2/Config | Key Range Low | 370 | L2 Key Range Low | The lowest key that will trigger this layer; if the key is lower than this, the layer will not play | | Layer 2/Config | Key Range High | 371 | L2 Key Range High | The highest key that will trigger this layer; if the key is higher than this, the layer will not play | | Layer 2/Config | Key Range Low Fade | 372 | L2 Key Range Low Fade | The length of the volume fade-in at the low end of the key range | | Layer 2/Config | Key Range High Fade | 373 | L2 Key Range High Fade | The length of the volume fade-out at the high end of the key range | | Layer 2/Config | Pitch Bend Range | 374 | L2 Pitch Bend Range | The pitch range in semitones of the MIDI pitch wheel | | Layer 2/Config | Monophonic Mode | 375 | L2 Monophonic Mode | Control voice behavior when notes overlap. Off: multiple voices play simultaneously (polyphonic). Retrigger: new notes stop previous notes. Latch: first note plays until all keys are released, new notes are ignored | | Layer 2/Playback | Play Mode | 376 | L2 Play Mode | How this layer plays its samples | | Layer 2/Playback/Granular | Length | 377 | L2Grn Length | Duration of each grain snippet | | Layer 2/Playback/Granular | Speed | 378 | L2Grn Speed | How fast the grain position moves through the sample | | Layer 2/Playback/Granular | Position | 379 | L2Grn Position | Where in the sample grains are sourced from | | Layer 2/Playback/Granular | Density | 380 | L2Grn Density | Controls how densely grains overlap, relative to the grain length. At the midpoint, grains play end-to-end. Lower values add gaps between grains for a sparse texture; higher values make grains overlap for a denser, richer sound | | Layer 2/Playback/Granular | Spread | 381 | L2Grn Spread | Region around the playhead where grains can start from. Small values focus grains near the playhead, large values spread them across a wider area | | Layer 2/Playback/Granular | Smooth | 382 | L2Grn Smooth | Crossfade between grains to remove clicks. Low is hard cuts, high is full overlap fade | | Layer 2/Playback/Granular | Pan | 383 | L2Grn Pan | Randomise the stereo position of each grain. At 0% all grains play centred, at 100% grains can be panned anywhere from fully left to fully right | | Layer 2/Playback/Granular | Detune | 384 | L2Grn Detune | Randomise the pitch of each grain. At 0% all grains play at the original pitch, at 100% grains can be detuned up to a semitone up or down | | Layer 2/Playback/Granular | Direction | 385 | L2Grn Direction | Chance that grains spawn playing in the opposite direction to the main playhead. At 0% all grains play in the main direction, at 100% there's a 50/50 chance of each grain playing forwards or backwards | | Layer 2/Playback/Granular | Harmony | 386 | L2Grn Harmony | Chance that grains spawn at one of the selected harmony intervals instead of the root pitch. Configure which intervals are active using the Intervals button | | Layer 2/LFO | Legacy Shape V2 | 387 | L2Lfo Legacy Shape V2 | Legacy LFO shape parameter (v2). Kept for backwards-compatibility with DAW automation | | Layer 2/LFO | Target | 388 | L2Lfo Target | The parameter that the LFO will modulate | | Layer 2/Main/Filter | Resonance | 389 | L2Filt Resonance | The intensity of the volume peak at the cutoff frequency | | Layer 2/Arp | Note Order | 390 | L2Arp Note Order | Order in which held notes are played | | Layer 2/Arp | Trigger | 391 | L2Arp Trigger | Free: arpeggiator keeps running when new notes are pressed. Retrigger: arpeggiator restarts from step 1 | | Layer 2/Arp | Rate | 392 | L2Arp Rate | Arpeggiator rate (synced to host tempo) | | Layer 2/Arp | Length | 393 | L2Arp Length | Number of active steps in the arpeggiator pattern | | Layer 2/Arp | Arpeggiator Mode | 394 | L2Arp Arpeggiator Mode | Played Notes: arpeggiates held notes. Fixed Notes: plays a recorded note sequence | | Layer 2/Arp | Humanise | 395 | L2Arp Humanise | Add random timing variation to note starts and velocity. Higher values create looser, more human-like performance | | Layer 2/Arp | Auto Rate | 396 | L2Arp Auto Rate | Let Floe decide the rate so that the loop plays near to its original recorded rate rather than having to add large silent gaps between slices. The rate that Floe chooses varies depending on your host tempo. | | Layer 2/Arp | Polyrate | 397 | L2Arp Polyrate | Each octave plays at a different rate. Double means each octave up is 2x faster. 3:2 and 4:3 create polyrhythmic relationships between octaves | | Layer 2/Arp | One Shot | 398 | L2Arp One Shot | When enabled, the arpeggiator plays through the sequence once and then stops instead of looping | | Layer 2/EQ/Band 1 | Resonance | 399 | L2EqB1 Resonance | Band 1: sharpness of the peak | | Layer 2/EQ/Band 2 | Resonance | 400 | L2EqB2 Resonance | Band 2: sharpness of the peak | | Layer 2/Arp | Arpeggiator | 401 | L2Arp Arpeggiator | Enable/disable the arpeggiator | | Layer 2/LFO | Shape | 402 | L2Lfo Shape | Oscillator shape, including random and percussive waveforms | | Layer 2/EQ/Band 1 | Type | 404 | L2EqB1 Type | Band 1: type of EQ band | | Layer 2/EQ/Band 2 | Type | 405 | L2EqB2 Type | Band 2: type of EQ band | | Layer 2/EQ/Band 3 | Legacy Frequency | 406 | L2EqB3 Legacy Frequency | Legacy band 3 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 2/EQ/Band 3 | Resonance | 407 | L2EqB3 Resonance | Band 3: sharpness of the peak | | Layer 2/EQ/Band 3 | Gain | 408 | L2EqB3 Gain | Band 3: volume gain at the frequency | | Layer 2/EQ/Band 3 | Type | 409 | L2EqB3 Type | Band 3: type of EQ band | | Layer 2/Main/Filter | Cutoff Frequency | 410 | L2Filt Cutoff Frequency | The frequency at which the filter should take effect | | Layer 2/EQ/Band 1 | Frequency | 411 | L2EqB1 Frequency | Band 1: frequency of this band | | Layer 2/EQ/Band 2 | Frequency | 412 | L2EqB2 Frequency | Band 2: frequency of this band | | Layer 2/EQ/Band 3 | Frequency | 413 | L2EqB3 Frequency | Band 3: frequency of this band | | Layer 2/Main/Filter | Type | 414 | L2Filt Type | Filter type | | Layer 2 | Stereo Width | 415 | L2 Stereo Width | Layer stereo width: negative narrows toward mono, positive widens | | Layer 3 | Volume | 480 | L3 Volume | Layer volume | | Layer 3 | Mute | 481 | L3 Mute | Mute this layer | | Layer 3 | Solo | 482 | L3 Solo | Mute all other layers | | Layer 3 | Pan | 483 | L3 Pan | Left/right balance | | Layer 3 | Detune Cents | 484 | L3 Detune Cents | Layer pitch in cents; hold shift for finer adjustment | | Layer 3 | Pitch Semitones | 485 | L3 Pitch Semitones | Layer pitch in semitones | | Layer 3/Playback/Loop | Start | 487 | L3Lp Start | Loop-start | | Layer 3/Playback/Loop | End | 488 | L3Lp End | Loop-end | | Layer 3/Playback/Loop | Crossfade Size | 489 | L3Lp Crossfade Size | Crossfade length; this smooths the transition from the loop-end to the loop-start | | Layer 3/Playback/Loop | Sample Start Offset | 491 | L3Lp Sample Start Offset | Change the starting point of the sample | | Layer 3/Playback/Loop | Reverse On | 492 | L3Lp Reverse On | Play the sound in reverse | | Layer 3/Main/Volume Envelope | On | 493 | L3Vol On | Enable/disable the volume envelope; when disabled, each sound will play out entirely | | Layer 3/Main/Volume Envelope | Attack | 494 | L3Vol Attack | Volume fade-in length | | Layer 3/Main/Volume Envelope | Decay | 495 | L3Vol Decay | Volume ramp-down length (after the attack) | | Layer 3/Main/Volume Envelope | Sustain | 496 | L3Vol Sustain | Volume level to sustain (after decay) | | Layer 3/Main/Volume Envelope | Release | 497 | L3Vol Release | Volume fade-out length (after the note is released) | | Layer 3/Main/Filter | On | 498 | L3Filt On | Enable/disable the filter | | Layer 3/Main/Filter | Legacy Cutoff Frequency | 499 | L3Filt Legacy Cutoff Frequency | Legacy cutoff parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/Main/Filter | Legacy Resonance | 500 | L3Filt Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/Main/Filter | Legacy Type | 501 | L3Filt Legacy Type | Legacy filter type parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/Main/Filter | Envelope Amount | 502 | L3Filt Envelope Amount | How strongly the envelope should control the filter cutoff | | Layer 3/Main/Filter | Attack | 503 | L3Filt Attack | Length of initial ramp-up | | Layer 3/Main/Filter | Decay | 504 | L3Filt Decay | Length ramp-down after attack | | Layer 3/Main/Filter | Sustain | 505 | L3Filt Sustain | Level to sustain after decay has completed | | Layer 3/Main/Filter | Release | 506 | L3Filt Release | Length of ramp-down after note is released | | Layer 3/LFO | On | 507 | L3Lfo On | Enable/disable the Low Frequency Oscillator (LFO) | | Layer 3/LFO | Legacy Shape | 508 | L3Lfo Legacy Shape | Legacy LFO shape parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/LFO | Mode | 509 | L3Lfo Mode | Oscillator phase mode. Retrigger: each voice has its own phase, Free: all voices that are playing simultaneously will have the same phase | | Layer 3/LFO | Amount | 510 | L3Lfo Amount | Intensity of the LFO effect | | Layer 3/LFO | Target (Legacy) | 511 | L3Lfo Target (Legacy) | Legacy LFO target parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/LFO | Time (Tempo Synced) | 512 | L3Lfo Time (Tempo Synced) | LFO rate (synced to the host) | | Layer 3/LFO | Time (Hz) | 513 | L3Lfo Time (Hz) | LFO rate (in Hz) | | Layer 3/LFO | Sync On | 514 | L3Lfo Sync On | Sync the LFO speed to the host | | Layer 3/EQ | On | 515 | L3Eq On | Turn on or off the equaliser effect for this layer | | Layer 3/EQ/Band 1 | Legacy Frequency | 516 | L3EqB1 Legacy Frequency | Legacy band 1 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/EQ/Band 1 | Legacy Resonance | 517 | L3EqB1 Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/EQ/Band 1 | Gain | 518 | L3EqB1 Gain | Band 1: volume gain at the frequency | | Layer 3/EQ/Band 1 | Legacy Type | 519 | L3EqB1 Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/EQ/Band 2 | Legacy Frequency | 520 | L3EqB2 Legacy Frequency | Legacy band 2 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/EQ/Band 2 | Legacy Resonance | 521 | L3EqB2 Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/EQ/Band 2 | Gain | 522 | L3EqB2 Gain | Band 2: volume gain at the frequency | | Layer 3/EQ/Band 2 | Legacy Type | 523 | L3EqB2 Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/Config | Legacy Velocity Mapping | 524 | L3 Legacy Velocity Mapping | Choose how MIDI velocity should affect the volume of this layer. There are 6 modes that can be selected for this parameter via the buttons on the GUI. By setting one layer to be quiet at high velocities and another layer to be quiet at low velocities you can create an instrument that sounds different based on how hard the notes are played. (0) Ignore velocity, always play full volume. (1) Loudest at high velocity, quietist at low velocity (2) Loudest at low velocity, quietist at high velocity (3) Loudest at high velocity, quietist at middle velocity and below (4) Loudest at middle velocity, quietist at both high and low velocities (5) Loudest at bottom velocity, quietist at middle velocity and above, | | Layer 3/Config | Keytrack On | 525 | L3 Keytrack On | Tune the sound to match the key played; if disabled it will always play the sound at its root pitch | | Layer 3/Config | Legacy Monophonic On | 526 | L3 Legacy Monophonic On | Only allow one voice of each sound to play at a time | | Layer 3/Config | MIDI Transpose On | 528 | L3 MIDI Transpose On | Transpose the mapping of samples by the given semitone offset, meaning a higher/lower sample may be triggered instead of stretching/shrinking the audio by large amounts (only useful if the instrument is multi-sampled) | | Layer 3/Playback/Loop | Loop Mode | 529 | L3Lp Loop Mode | The mode for looping the samples | | Layer 3/Config | Key Range Low | 530 | L3 Key Range Low | The lowest key that will trigger this layer; if the key is lower than this, the layer will not play | | Layer 3/Config | Key Range High | 531 | L3 Key Range High | The highest key that will trigger this layer; if the key is higher than this, the layer will not play | | Layer 3/Config | Key Range Low Fade | 532 | L3 Key Range Low Fade | The length of the volume fade-in at the low end of the key range | | Layer 3/Config | Key Range High Fade | 533 | L3 Key Range High Fade | The length of the volume fade-out at the high end of the key range | | Layer 3/Config | Pitch Bend Range | 534 | L3 Pitch Bend Range | The pitch range in semitones of the MIDI pitch wheel | | Layer 3/Config | Monophonic Mode | 535 | L3 Monophonic Mode | Control voice behavior when notes overlap. Off: multiple voices play simultaneously (polyphonic). Retrigger: new notes stop previous notes. Latch: first note plays until all keys are released, new notes are ignored | | Layer 3/Playback | Play Mode | 536 | L3 Play Mode | How this layer plays its samples | | Layer 3/Playback/Granular | Length | 537 | L3Grn Length | Duration of each grain snippet | | Layer 3/Playback/Granular | Speed | 538 | L3Grn Speed | How fast the grain position moves through the sample | | Layer 3/Playback/Granular | Position | 539 | L3Grn Position | Where in the sample grains are sourced from | | Layer 3/Playback/Granular | Density | 540 | L3Grn Density | Controls how densely grains overlap, relative to the grain length. At the midpoint, grains play end-to-end. Lower values add gaps between grains for a sparse texture; higher values make grains overlap for a denser, richer sound | | Layer 3/Playback/Granular | Spread | 541 | L3Grn Spread | Region around the playhead where grains can start from. Small values focus grains near the playhead, large values spread them across a wider area | | Layer 3/Playback/Granular | Smooth | 542 | L3Grn Smooth | Crossfade between grains to remove clicks. Low is hard cuts, high is full overlap fade | | Layer 3/Playback/Granular | Pan | 543 | L3Grn Pan | Randomise the stereo position of each grain. At 0% all grains play centred, at 100% grains can be panned anywhere from fully left to fully right | | Layer 3/Playback/Granular | Detune | 544 | L3Grn Detune | Randomise the pitch of each grain. At 0% all grains play at the original pitch, at 100% grains can be detuned up to a semitone up or down | | Layer 3/Playback/Granular | Direction | 545 | L3Grn Direction | Chance that grains spawn playing in the opposite direction to the main playhead. At 0% all grains play in the main direction, at 100% there's a 50/50 chance of each grain playing forwards or backwards | | Layer 3/Playback/Granular | Harmony | 546 | L3Grn Harmony | Chance that grains spawn at one of the selected harmony intervals instead of the root pitch. Configure which intervals are active using the Intervals button | | Layer 3/LFO | Legacy Shape V2 | 547 | L3Lfo Legacy Shape V2 | Legacy LFO shape parameter (v2). Kept for backwards-compatibility with DAW automation | | Layer 3/LFO | Target | 548 | L3Lfo Target | The parameter that the LFO will modulate | | Layer 3/Main/Filter | Resonance | 549 | L3Filt Resonance | The intensity of the volume peak at the cutoff frequency | | Layer 3/Arp | Note Order | 550 | L3Arp Note Order | Order in which held notes are played | | Layer 3/Arp | Trigger | 551 | L3Arp Trigger | Free: arpeggiator keeps running when new notes are pressed. Retrigger: arpeggiator restarts from step 1 | | Layer 3/Arp | Rate | 552 | L3Arp Rate | Arpeggiator rate (synced to host tempo) | | Layer 3/Arp | Length | 553 | L3Arp Length | Number of active steps in the arpeggiator pattern | | Layer 3/Arp | Arpeggiator Mode | 554 | L3Arp Arpeggiator Mode | Played Notes: arpeggiates held notes. Fixed Notes: plays a recorded note sequence | | Layer 3/Arp | Humanise | 555 | L3Arp Humanise | Add random timing variation to note starts and velocity. Higher values create looser, more human-like performance | | Layer 3/Arp | Auto Rate | 556 | L3Arp Auto Rate | Let Floe decide the rate so that the loop plays near to its original recorded rate rather than having to add large silent gaps between slices. The rate that Floe chooses varies depending on your host tempo. | | Layer 3/Arp | Polyrate | 557 | L3Arp Polyrate | Each octave plays at a different rate. Double means each octave up is 2x faster. 3:2 and 4:3 create polyrhythmic relationships between octaves | | Layer 3/Arp | One Shot | 558 | L3Arp One Shot | When enabled, the arpeggiator plays through the sequence once and then stops instead of looping | | Layer 3/EQ/Band 1 | Resonance | 559 | L3EqB1 Resonance | Band 1: sharpness of the peak | | Layer 3/EQ/Band 2 | Resonance | 560 | L3EqB2 Resonance | Band 2: sharpness of the peak | | Layer 3/Arp | Arpeggiator | 561 | L3Arp Arpeggiator | Enable/disable the arpeggiator | | Layer 3/LFO | Shape | 562 | L3Lfo Shape | Oscillator shape, including random and percussive waveforms | | Layer 3/EQ/Band 1 | Type | 564 | L3EqB1 Type | Band 1: type of EQ band | | Layer 3/EQ/Band 2 | Type | 565 | L3EqB2 Type | Band 2: type of EQ band | | Layer 3/EQ/Band 3 | Legacy Frequency | 566 | L3EqB3 Legacy Frequency | Legacy band 3 frequency parameter. Kept for backwards-compatibility with DAW automation | | Layer 3/EQ/Band 3 | Resonance | 567 | L3EqB3 Resonance | Band 3: sharpness of the peak | | Layer 3/EQ/Band 3 | Gain | 568 | L3EqB3 Gain | Band 3: volume gain at the frequency | | Layer 3/EQ/Band 3 | Type | 569 | L3EqB3 Type | Band 3: type of EQ band | | Layer 3/Main/Filter | Cutoff Frequency | 570 | L3Filt Cutoff Frequency | The frequency at which the filter should take effect | | Layer 3/EQ/Band 1 | Frequency | 571 | L3EqB1 Frequency | Band 1: frequency of this band | | Layer 3/EQ/Band 2 | Frequency | 572 | L3EqB2 Frequency | Band 2: frequency of this band | | Layer 3/EQ/Band 3 | Frequency | 573 | L3EqB3 Frequency | Band 3: frequency of this band | | Layer 3/Main/Filter | Type | 574 | L3Filt Type | Filter type | | Layer 3 | Stereo Width | 575 | L3 Stereo Width | Layer stereo width: negative narrows toward mono, positive widens | | Effect/Distortion | Type | 3 | Dist Type | Distortion algorithm type | | Effect/Distortion | Drive | 4 | Dist Drive | Distortion amount | | Effect/Distortion | On | 5 | Dist On | Enable/disable the distortion effect | | Effect/Bitcrush | Bits | 6 | Bitc Bits | Audio resolution | | Effect/Bitcrush | Sample Rate | 7 | Bitc Sample Rate | Sample rate | | Effect/Bitcrush | Legacy Wet | 8 | Bitc Legacy Wet | Legacy processed-signal volume. Kept for backwards-compatibility with DAW automation | | Effect/Bitcrush | Legacy Dry | 9 | Bitc Legacy Dry | Legacy unprocessed-signal volume. Kept for backwards-compatibility with DAW automation | | Effect/Bitcrush | On | 10 | Bitc On | Enable/disable the bitcrush effect | | Effect/Compressor | Legacy Threshold | 11 | Comp Legacy Threshold | Legacy threshold parameter. Kept for backwards-compatibility with DAW automation | | Effect/Compressor | Legacy Ratio | 12 | Comp Legacy Ratio | Legacy ratio parameter. Kept for backwards-compatibility with DAW automation | | Effect/Compressor | Gain | 13 | Comp Gain | Additional control for volume after compression | | Effect/Compressor | Auto Gain | 14 | Comp Auto Gain | Automatically re-adjust the gain to stay consistent regardless of compression intensity | | Effect/Compressor | On | 15 | Comp On | Enable/disable the compression effect | | Effect/Filter | On | 16 | Filt On | Enable/disable the filter | | Effect/Filter | Legacy Cutoff Frequency | 17 | Filt Legacy Cutoff Frequency | Legacy cutoff parameter. Kept for backwards-compatibility with DAW automation | | Effect/Filter | Legacy Resonance | 18 | Filt Legacy Resonance | Legacy resonance parameter. Kept for backwards-compatibility with DAW automation | | Effect/Filter | Legacy Gain | 19 | Filt Legacy Gain | Legacy gain parameter. Kept for backwards-compatibility with DAW automation | | Effect/Filter | Legacy Type | 20 | Filt Legacy Type | Legacy type parameter. Kept for backwards-compatibility with DAW automation | | Effect/StereoWiden | Width | 21 | Ster Width | Increase or decrease the stereo width | | Effect/StereoWiden | On | 22 | Ster On | Turn the stereo widen effect on or off | | Effect/Chorus | Rate | 23 | Chr Rate | Chorus modulation rate | | Effect/Chorus | Legacy High-pass | 24 | Chr Legacy High-pass | Legacy high-pass parameter. Kept for backwards-compatibility with DAW automation | | Effect/Chorus | Depth | 25 | Chr Depth | Chorus effect intensity | | Effect/Chorus | Legacy Wet | 26 | Chr Legacy Wet | Legacy processed-signal volume. Kept for backwards-compatibility with DAW automation | | Effect/Chorus | Legacy Dry | 27 | Chr Legacy Dry | Legacy unprocessed-signal volume. Kept for backwards-compatibility with DAW automation | | Effect/Chorus | On | 28 | Chr On | Enable/disable the chorus effect | | Effect/Filter | Resonance | 29 | Filt Resonance | The intensity of the volume peak at the cutoff frequency | | Effect/Filter | Gain | 30 | Filt Gain | Volume gain of shelf/peak filter | | Effect/StereoWiden | Mode | 31 | Ster Mode | Stereo widening algorithm: Balanced (constant-power M/S), Legacy (original behaviour, kept for old presets), or Bass Mono (mono below the crossover, widened above) | | Effect/StereoWiden | Bass Mono | 32 | Ster Bass Mono | Frequencies below this point are summed to mono (Bass Mono mode only) | | Effect/Compressor | Type | 33 | Comp Type | The compressor algorithm to use | | Effect/Compressor | Attack | 34 | Comp Attack | How quickly the compressor responds to a rise in level | | Effect/Compressor | Release | 35 | Comp Release | How quickly the compressor recovers after the level drops | | Effect/Compressor | Mix | 36 | Comp Mix | Blend between the dry input and the compressed signal | | Effect/Convolution Reverb | Legacy High-pass | 65 | Conv Legacy High-pass | Legacy high-pass parameter. Kept for backwards-compatibility with DAW automation | | Effect/Convolution Reverb | Legacy Wet | 66 | Conv Legacy Wet | Legacy processed-signal volume. Kept for backwards-compatibility with DAW automation | | Effect/Convolution Reverb | Legacy Dry | 67 | Conv Legacy Dry | Legacy unprocessed-signal volume. Kept for backwards-compatibility with DAW automation | | Effect/Convolution Reverb | On | 68 | Conv On | Enable/disable the convolution reverb effect | | Effect/Reverb | Decay Time | 69 | Rvrb Decay Time | Reverb decay time | | Effect/Reverb | Pre Low Cutoff | 70 | Rvrb Pre Low Cutoff | Low-pass filter cutoff before reverb | | Effect/Reverb | Pre High Cutoff | 71 | Rvrb Pre High Cutoff | High-pass filter cutoff before reverb | | Effect/Reverb | Low Cutoff | 72 | Rvrb Low Cutoff | Low-pass filter cutoff after reverb | | Effect/Reverb | Low Gain | 73 | Rvrb Low Gain | Low-pass filter gain | | Effect/Reverb | High Cutoff | 74 | Rvrb High Cutoff | High-pass filter cutoff after reverb | | Effect/Reverb | High Gain | 75 | Rvrb High Gain | High-pass filter gain | | Effect/Reverb | Chorus Amount | 76 | Rvrb Chorus Amount | Chorus effect amount | | Effect/Reverb | Chorus Frequency | 77 | Rvrb Chorus Frequency | Chorus effect frequency | | Effect/Reverb | Size | 78 | Rvrb Size | Reverb size | | Effect/Reverb | Delay | 79 | Rvrb Delay | Reverb delay | | Effect/Reverb | Mix | 80 | Rvrb Mix | Processed signal volume | | Effect/Reverb | On | 81 | Rvrb On | Enable/disable the reverb effect | | Effect/Phaser | Feedback | 82 | Phs Feedback | Feedback amount | | Effect/Phaser | Mod Rate | 83 | Phs Mod Rate | Speed at which the phaser filters modulate | | Effect/Phaser | Center Frequency | 84 | Phs Center Frequency | Center frequency of the phaser filters | | Effect/Phaser | Shape | 85 | Phs Shape | Shape of the phaser filter's peaks | | Effect/Phaser | Mod Depth | 86 | Phs Mod Depth | The range over which the phaser filters modulate | | Effect/Phaser | Stereo Amount | 87 | Phs Stereo Amount | Adds a stereo effect by offsetting the left and right filters | | Effect/Phaser | Mix | 88 | Phs Mix | Mix between the wet and dry signals | | Effect/Phaser | On | 89 | Phs On | Enable/disable the phaser effect | | Effect/Delay | Mode | 90 | Dly Mode | Delay type | | Effect/Delay | Filter Cutoff | 91 | Dly Filter Cutoff | High/low frequency reduction | | Effect/Delay | Filter Spread | 92 | Dly Filter Spread | Width of the filter | | Effect/Delay | Time Left (ms) | 93 | Dly Time Left (ms) | Left delay time (in milliseconds) | | Effect/Delay | Legacy Time Right (ms) | 94 | Dly Legacy Time Right (ms) | Right delay time (in milliseconds) | | Effect/Delay | Time Left (Tempo Synced) | 95 | Dly Time Left (Tempo Synced) | Left delay time (synced to the host tempo) | | Effect/Delay | Time Right (Tempo Synced) | 96 | Dly Time Right (Tempo Synced) | Right delay time (synced to the host tempo) | | Effect/Delay | On | 97 | Dly On | Synchronise timings to the host's BPM | | Effect/Delay | Mix | 98 | Dly Mix | Level of processed signal | | Effect/Delay | On | 99 | Dly On | Enable/disable the delay effect | | Effect/Delay | Feedback | 100 | Dly Feedback | How much the signal repeats | | Effect/Filter | Type | 105 | Filt Type | Filter type | | Effect/Filter | Cutoff Frequency | 106 | Filt Cutoff Frequency | Frequency of filter effect | | Effect/Chorus | High-pass | 107 | Chr High-pass | High-pass filter cutoff | | Effect/Convolution Reverb | High-pass | 108 | Conv High-pass | Wet high-pass filter cutoff | | Effect/Bitcrush | Mix | 109 | Bitc Mix | Blend between the dry input and the bitcrushed signal | | Effect/Bitcrush | Output | 110 | Bitc Output | Output level after the mix | | Effect/Chorus | Mix | 111 | Chr Mix | Blend between the dry input and the chorused signal | | Effect/Chorus | Output | 112 | Chr Output | Output level after the mix | | Effect/Convolution Reverb | Mix | 113 | Conv Mix | Blend between the dry input and the convolution reverb signal | | Effect/Convolution Reverb | Output | 114 | Conv Output | Output level after the mix | | Effect/Distortion | Mix | 115 | Dist Mix | Blend between the dry input and the distorted signal | | Effect/StereoWiden | Mix | 116 | Ster Mix | Blend between the dry input and the stereo-widened signal | | Effect/Filter | Mix | 117 | Filt Mix | Blend between the dry input and the filtered signal | | Effect/Compressor | Threshold | 118 | Comp Threshold | The threshold that the audio has to pass above before the compression should start taking place | | Effect/Compressor | Ratio | 119 | Comp Ratio | The intensity of compression (high ratios mean more compression) | | Effect/EQ | On | 120 | Eq On | Enable/disable the equaliser effect | | Effect/EQ | Mix | 121 | Eq Mix | Mix between the wet and dry signals | | Effect/EQ/Band 1 | Type | 122 | EqB1 Type | Band 1: type of EQ band | | Effect/EQ/Band 1 | Frequency | 123 | EqB1 Frequency | Band 1: frequency of this band | | Effect/EQ/Band 1 | Resonance | 124 | EqB1 Resonance | Band 1: sharpness of the peak | | Effect/EQ/Band 1 | Gain | 125 | EqB1 Gain | Band 1: volume gain at the frequency | | Effect/EQ/Band 2 | Type | 126 | EqB2 Type | Band 2: type of EQ band | | Effect/EQ/Band 2 | Frequency | 127 | EqB2 Frequency | Band 2: frequency of this band | | Effect/EQ/Band 2 | Resonance | 128 | EqB2 Resonance | Band 2: sharpness of the peak | | Effect/EQ/Band 2 | Gain | 129 | EqB2 Gain | Band 2: volume gain at the frequency | | Effect/EQ/Band 3 | Type | 130 | EqB3 Type | Band 3: type of EQ band | | Effect/EQ/Band 3 | Frequency | 131 | EqB3 Frequency | Band 3: frequency of this band | | Effect/EQ/Band 3 | Resonance | 132 | EqB3 Resonance | Band 3: sharpness of the peak | | Effect/EQ/Band 3 | Gain | 133 | EqB3 Gain | Band 3: volume gain at the frequency | | Master | Volume | 0 | Mst Volume | Master volume | | Master | Legacy Velocity To Volume Strength | 1 | Mst Legacy Velocity To Volume Strength | Legacy parameter. The amount that the MIDI velocity affects the volume of notes; 100% means notes will be silent when the velocity is very soft, and 0% means that notes will play full volume regardless of the velocity | | Master | Timbre | 2 | Mst Timbre | The intstruments timbre. Not every instrument contains timbre information; instruments that do will be highlighted when you click on this knob. | | Macro | 1 | 101 | 1 | A macro that can be assigned to any parameter in the plugin. The macro will affect all parameters that are assigned to it. | | Macro | 2 | 102 | 2 | A macro that can be assigned to any parameter in the plugin. The macro will affect all parameters that are assigned to it. | | Macro | 3 | 103 | 3 | A macro that can be assigned to any parameter in the plugin. The macro will affect all parameters that are assigned to it. | | Macro | 4 | 104 | 4 | A macro that can be assigned to any parameter in the plugin. The macro will affect all parameters that are assigned to it. | --- # Sample Libraries > What is a Floe sample library Sample libraries are collections of mapped, playable sounds along with images, tags, and other metadata. Without sample libraries, Floe can't produce any sound. Sample libraries often have a theme or focus, such as 'Music Box Suite' — multisampled music box instruments, or 'Lost Reveries' — a collection of ambient single-sample ambient tones. A sample library may contain: - Instruments - Impulse Responses Sample libraries are not loaded directly; instead you load the instruments into Floe's layers, or impulse responses into Floe's convolution reverb. However, you can view your installed libraries by opening the 3-dots menu on Floe's main window and clicking "Info". Libraries typically focus on instruments, however, sometimes a sample library exclusively contains impulse responses for use in the convolution reverb - expanding the options for sound design. At a technical level, _Floe sample libraries_ are a new, custom format; they're open, portable folders of audio files and configuration files developed with Floe's [developer tools](/docs/develop/develop-libraries). Typically, a sample library is in a folder with a name like `Developer Name - Library Name`. Sample libraries can contain thousands of audio files and can be many gigabytes in size. They typically have a `Samples` subfolder and a file called `floe.lua`. --- # Arpeggiator > Information about Floe's per-layer arpeggiator ## At a glance - A per-layer note sequencer that retriggers the layer's instrument in time with your host. - Each [layer](/docs/usage/layers) has its own independent arpeggiator on the **Arp tab**. - Two modes: _Played Notes_ (arpeggiates the chord you're holding) and _Fixed Notes_ (plays a recorded note sequence). - Up to 64 steps, each with its own velocity, gate, note/interval, on/off and tie. ## What is the arpeggiator? The arpeggiator turns a held chord — or a recorded note sequence — into a rhythmic pattern of individual notes, synced to your host's tempo. Each step of the pattern triggers the layer's instrument as if you'd played it from a keyboard, so the volume envelope, filter, LFOs and effects all respond exactly the same way they would for a manually played note. Because the arpeggiator is per-layer, you can create interesting combination of sequences across layers. ![Layer Arp Tab](/images/screenshots/layer-arp.png) ## Turning it on Open a layer's **Arp tab** and click the _Arpeggiator_ button to enable it. Next to that button is the **Mode menu**: - **Played Notes**: the held chord is arpeggiated. Each step plays one of the notes you're holding, transposed by an optional per-step semitone interval. The order in which the notes are picked is set by _Note Order_ (Up, Down, Up/Down, Random, Thumb, Up+, and so on). - **Fixed Notes**: each step plays a specific MIDI note that you set yourself, regardless of what you play in. Use the **Record** button to capture a sequence by playing notes on your keyboard. ## The step sequencer Below the mode controls is the step sequencer. The number of active steps is set by _Length_. ### Velocity bars Each step has a vertical bar. Click and drag inside the sequencer to set velocities — drag across multiple steps to draw a shape. The bars represent **velocity, not volume**. How that velocity becomes loudness is shaped by the [_Velocity to volume curve_](/docs/usage/midi#velocity) on the layer's Config tab. By default that curve doesn't start at zero, so even a zero-velocity step still produces a quiet sound. This distinction matters most for multisampled instruments that have separate velocity layers: a step's velocity selects which velocity layer is played, not just how loud it is. A low-velocity step on a piano, for example, gives you the soft-velocity samples rather than just a quieter version of the loud ones. ### Step rows Under each bar you'll find: - **Step number / on-off**: click to mute or unmute the step. A disabled step stays silent but keeps its other settings. - **Note / interval**: in _Fixed Notes_ mode this is the MIDI note name; in _Played Notes_ mode it's a semitone offset added to whichever held note is being played at that step. Drag to change, or double-click to type a value. - **Tie** (link icon): fuses the step with the previous one to create a single, longer note. Tied steps inherit the velocity and gate of the tie-chain's root step. - **Gate** (small knob): the proportion of the step duration that the note actually sounds for. 100% is legato-like; lower values create staccato patterns. Gated notes still trigger the Release of the volume envelope on the MAIN tab. Right-click any step for a context menu with options to reset the step, apply its settings to all steps, or rotate the whole pattern forwards/backwards. When the pattern is longer than fits on screen, an **Overview** toggle in the top-right of the sequencer shows a compact, non-editable view of all steps at once. ### How a step triggers the instrument Each step starts a new note on the layer, which triggers the **volume envelope's attack**. When the step ends — either at its gate-off point or when a following non-tied step begins — the **volume envelope's release** is triggered. If your volume envelope has a slow attack or long release, steps will overlap and bleed into one another; with a fast attack and short release, you'll get a tight, percussive feel. ## Sequence controls Below the step sequencer is the **SEQUENCE** section: - **Rate**: the step length, synced to host tempo. Choose from triplet, straight or dotted divisions from 1/64 up to 4/1. - **Auto Rate** (only visible for sliced instruments): picks a rate automatically so the slices play back close to the loop's originally recorded speed, avoiding long silent gaps between slices when your host tempo is far from the loop's native tempo. While Auto Rate is on, the Rate control is replaced with a read-only display showing the chosen rate. The multiplier (1x, 2x, 1/2x, dotted, triplet, and so on) lets you offset that choice up or down without losing the auto-fit behaviour. Because the chosen rate has to land on one of the tempo-synced divisions (1/4, 1/8, 1/16T, …), it can only change in discrete steps as the host tempo moves. So as you sweep the host tempo, you'll cross boundary points where the chosen rate jumps to the next division. The jump is calibrated so the upper end of each range stays close to the loop's native feel — which means crossing upward into a new range actually slows the perceived rate. It can therefore feel faster at, say, 147 BPM than at 148 BPM, even though your host is running faster. The same boundary points apply to every layer in the project, so two arpeggiators using Auto Rate stay in the same rhythmic ratio across tempo changes. - **Length**: how many steps are active in the pattern (1–64). - **Order** (Played Notes only): how held notes are picked across the steps — Chord, Up, Down, Up/Down, Down/Up, Random, Random No Repeat, Up x2, Down x2, Up/Down x2, Converge, Diverge, Thumb, Up+. - **Humanise**: adds random timing and velocity variation to each step. Small amounts loosen up a rigid pattern; larger amounts produce a much more human-feeling performance. ## Config controls The **CONFIG** section holds behaviour switches: - **Trigger**: _Free_ keeps the arpeggiator running across new key presses, so playing new notes changes the held chord without restarting the pattern. _Retrigger_ restarts the pattern from step 1 every time a new chord is pressed. - **Polyrate**: lets each octave of the held chord play at a different rate. _Double at octaves_ doubles the rate per octave up; _3:2 at octaves_ and _4:3 at octaves_ create polyrhythmic relationships between octaves. Useful for creating complex, evolving patterns from a simple chord. - **One Shot**: when enabled, the pattern plays through once and then stops instead of looping. - **Record** (Fixed Notes mode): click to start recording, then play notes on your keyboard to fill the sequence step-by-step. Click again to stop. ## Sliced instruments Some instruments come with built-in slice markers (for example, a sliced drum loop). When you load one of these, the arpeggiator switches into a locked **slice mode**: it plays the instrument's slices in order as its steps, rather than running a user-defined pattern. The mode/length/order controls are hidden, and a **SLICING** section appears with two extra controls: - **Offset**: the first slice to play. - **Length**: how many slices to loop through (or _All_ for everything from the offset onwards). The step sequencer still shows per-step velocity and gate, so you can shape the dynamics and rhythmic feel of the slice playback. ## Tips - Use the interesting Polyrate _Double at octaves_ and hold an octave (2 Cs for example) on your keyboard for a unique doubling-up effect. - When in _Chord_ order, be careful to trigger your chords at precisely the same time. If there's a slight gap, the arpeggiator will begin with the first note, and only add the second note in the next step since it didn't see the second note at the time the first was hit. - For percussion, _Chord_ order with a generous _Humanise_ setting is normally best. --- # Browsers > Comprehensive guide to using Floe's browsers for presets, instruments, and impulse responses. One of Floe's core goals is to provide a fast and fluid way to find and load sounds across large sound pools: the _browsers_ are the main way to do this. You may spend a lot of time with the browsers. They're used in several places on the interface: - Presets - Instruments for each layer - Impulse responses for the Convolution Reverb effect All browsers work the same, with some minor differences depending on context. ![Browser Panel](/images/screenshots/browser-full.png) 1 2 3 ## Overview The fundamental design is a two-panel layout: filters on the left, and results on the right (loadable items). Similar to if you were shopping online for t-shirts: you might use filters to narrow down the results by size, colour, price range, etc., and then browse the results that match your criteria. The same principle applies here, except we use filters such as library, tag, or folder to instantly narrow down results of presets, instruments, or impulse responses. Initially however, Floe starts in the simple 'ONE' filter mode. This mode lets you select only one filter at a time. If you click on another filter, it replaces the existing one. You can change to AND or OR mode using the multi-mode menu **(3)**. When no filters are applied, all items are shown in the results list. - **1**: filters panel: filters to narrow down the results. Here we can see filters for libraries (Celtic Harp, Dulcitone, Lost Reveries, etc.) and folders within those libraries (Core, Extras, Mic Options, etc.). Clicking on these will filter down the results on the right panel (2). - **2**: the results list, showing items that match the current filter settings. Click these to load them. **Double-click** to load and close the browser in one action. - Numbers in brackets next to each filter, like _(26)_, show how many items match that filter. If you were to select this filter, the results list would narrow down to those matching items (unless you are using multi-select modes and already have filters). - **Search libraries/tags**: filters search box: type here to narrow down the available filters. - **Search instruments**: results search box: type here to filter the results list by name. - **Favourites**: on each item in the results list you can click the star that appear on the right when you hover over an item. This adds it to your favourites list, which can be accessed using the _Favourites_ button. - **Left/right arrows** : navigate to the previous/next item in the results list. - **Random icon** : load a random item from the results list. - **Location arrow** : scroll to the currently loaded item in the results list. - **Unload instrument**: unload the currently selected item. You can also click again on the loaded item in the results list to unload it. ## Filter buttons Simple filters are small buttons, used for tags, authors and other simple filters. Click on them to filter down the results list. ![Filter button](/images/screenshots/filter-button.png) ## Filter cards Additionally, Floe has filter _cards_. They look quite different from the small filter buttons, but they actually function mostly in the same way, they just offer more information and house a tree-like structure of folders (also just a type of filter button). Cards are used for _sample libraries_ in the instrument and IR browsers, and for _preset banks_ in the preset browser. Cards are made up of two sections, the _header_ (**1**) and the _body_ (**2**). Both sections can be clicked. ![Browser Filter Card](/images/screenshots/filter-card.png) 1 2 ### Selecting in filter cards Click on the header (**1**) to expand or collapse the entire sample library or preset bank. Inside every card is an _All Items_ button that selects all items within. Alternatively, click on individual items in the body (**2**) to select specific folders within the library or bank — notice the item individually shows a gold left edge. ![Filter card all selected](/images/screenshots/filter-card-all-selected.png) ![Filter card single item selected](/images/screenshots/filter-card-body-item-selected.png) - **Subtle gold background**: indicates the filter is selected. - **Gold left edge**: indicates the filter is actively contributing to the results list. ### Folder trees Items in the body (**2**) are sometimes hierarchical. You can see that some items are more indented than others. In this case, _Close_ and _Room_ are subfolders of _Mic Options_. If you select a parent folder, the results list also shows items that match the subfolders. You can see _Mic Options_ is selected (it has a gold background), but also the gold left edge border extends to _Close_ and _Room_ indicating they are included in the filtering of the results list. ![Filter card item tree selected](/images/screenshots/filter-card-body-tree.png) Developers typically don't use much hierarchy, but it can be an intuitive categorisation mechanism. Just because a parent folder has subfolders does not mean that it doesn't include its own items too (albeit this is less common). Imagine folders on your computer: a folder can contain files as well as subfolders. So sometimes you will find items that do cannot be found searching through the subfolders alone. ### Right-click You can often right-click on filter cards to bring up additional options. ## Multi-select mode By default, the browsers are in single-select mode: clicking on a new filter replaces the existing filter. Use the ONE/AND/OR menu in the top to switch to a multi-select mode. ![Browser more-options menu](/images/screenshots/browser-menu.png) - **AND** mode means that all selected filters must be matched for an item to appear in the results list. The more filters you select, the narrower the results become. - **OR** mode means that items matching any of the selected filters will appear in the results list. The more filters you select, the broader the results become. Selected filters appear as dismissable buttons at the top of the results list, with an _AND_/_OR_ label between them showing how they're combined. In AND mode, Floe greys-out filters that wouldn't add to the result set (no items would match the combined filter), helping you avoid dead-end combinations. ## Keyboard navigation The browsers support keyboard navigation using the arrow keys and enter. The focused item is denoted by a blue outline box. This box is initially hidden but becomes visible when you press any arrow key. - Up/down arrows to move the selection in the results list. - Enter/return to 'click' the currently highlighted item. - Left/right arrows or tab to move between the filters panel and results list. - CTRL+F (CMD+F on Mac) to focus the results search box. - Home/End to jump to the start/end of the results list. - Hold CTRL (CMD on Mac) and use the up/down arrows to jump by to the previous/next folder. - Page Up/Page Down to jump up/down by 8 items at a time. Filter cards are keyboard-navigable, but filter buttons are not currently. ## Tips - Double-click on an item to load it and close the browser in one action. --- # Effects > Information about the audio effects available in Floe Floe has a selection of 11 reorderable effects that are applied to the mix of the [layers](/docs/usage/layers). Audio flows through the rack from top to bottom. ![Effects panel](/images/screenshots/effects.png) ## Reordering You can change the ordering of the effects by dragging and dropping the effect names — either the name in the rack or the name next to the on/off switch. ## Enabling and bypassing Each effect has two controls for its active state: - **Switchboard toggle** (left sidebar): Toggles the effect on or off. When toggled off, the effect is both deactivated and hidden from the rack. - **Bypass button** (power icon in the effect heading): Deactivates the effect's audio processing but keeps it visible in the rack. This is useful for quickly A/B comparing with and without an effect, or for keeping your effect chain layout while temporarily disabling an effect. A bypassed effect appears greyed out in the rack. Click the bypass button again to reactivate it. The close button (✕) on an effect removes it from the rack entirely, same as toggling it off in the switchboard. ## Panel buttons The buttons in the panel heading act on all effects at once: - **Randomise** (shuffle icon): Randomly turns effects on or off and shuffles their order. - **Bypass all** (power icon): Bypasses every active effect, or reactivates them all if any are already bypassed. - **Remove all** (unload icon): Removes every effect from the rack. Right-clicking an effect — either its heading or its switchboard entry — opens a menu for resetting that effect's parameters to their defaults. ## Mix Every effect has a _Mix_ knob in its heading area. Mix blends the original incoming audio (the _dry_ signal) with the effect's output (the _wet_ signal): - At 0%, you hear only the dry signal — the effect is effectively inaudible. - At 100%, you hear only the wet signal — the original is fully replaced by the effect's output. - In between, the two are crossfaded. This lets you dial in the strength of an effect without changing any of its other settings — useful for subtle reverb tails, parallel compression, gentle distortion, and so on. ## Convolution Reverb The convolution unit adds a reverb-like effect to the sound by utilising an impulse response (IR) selected using a dedicated [browser](/docs/usage/browsers). Floe offers some realistic reverb room IRs, but also IRs that produce unusual sound effects. The set of available IRs depend on what sample libraries you have installed and their features. Floe always has a built-in set of impulse responses available. But additionally, some sample libraries expand this collection, such as the community [Antique IRs](/packages/antique-irs) library. ## All available effects | Name | Description | | --- | --- | | Distortion | Distort the audio using various algorithms. | | Bit Crush | Apply a lo-fi effect to the signal by either reducing the sample rate or by reducing the sample resolution. Doing either distorts the signal. | | Compressor | Compress the signal to make the quiet sections louder. | | Filter | Adjust the volume frequency bands in the signal, or cut out frequency bands altogether. The filter type can be selected with the menu. | | Stereo Widen | Increase or decrease the stereo width of the signal. | | Chorus | An effect that changes the character of the signal by adding a modulated and pitch-varying duplicate signal. | | Reverb | Algorithmically simulate the reflections and reverberations of a real room. | | Delay | Simulate an echo effect, as if the sound is reflecting off of a distant surface. | | Convol Reverb | The Convolution reverb effect applies a reverb to the signal. The characteristic of the reverb is determined by the impulse response (IR). The IR can be selected from the menu. | | Phaser | Modulate the sound using a series of moving filters | | EQ | Three-band parametric equaliser. Each band can be configured as a peak, shelf, notch, low-pass or high-pass filter. | --- # Folders > Managing sample library and preset folders in Floe Floe has a flexible folder system for managing your sample libraries and presets, allowing for custom organisation and easy use of external drives. Floe works _with_ your natural usage of drives, files, and folders rather than enforcing rigid requirements. There are two **separate** types of folders that Floe manages: **sample library folders** and **preset folders**. You can see and manage folders in Floe's preferences panel — opened by clicking the cog icon at the top of Floe's window: ![Folder Preferences GUI](/images/screenshots/folders.png) Floe automatically scans these folders (and their subfolders) for presets and libraries respectively. Anything added, removed or changed in these folders is reflected in Floe immediately. Floe doesn't have a separate 'memory' about presets and libraries — what exists in your folders is the only source of truth. If you're not yet familiar with what a sample library or preset is, read more about these concepts on the [glossary](/docs/getting-started/glossary) page. ### Adding folders Add a folder to either sample libraries or presets by clicking the 'Add Folder' button. A file dialog will open - select your desired folder. Floe will immediately start scanning it. Floe scans subfolders of the folder you pick too; so you typically want to select a top-level folder such as "Floe Libraries" or "Floe Presets" that contains all your libraries/presets inside it rather than adding each individual library/preset folder. ### Removing folders Use the trash icon to remove a folder from either sample libraries or presets. This does not physically delete the folder, it just removes it from Floe's scanning list. You cannot remove Floe's default folders (the first on the lists). ### Open folder Use the link icon to open the folder in your system's File Explorer/Finder. ### Moving libraries/presets to a new location Floe does not have an automatic 'move' function, but you can easily move them using your system's File Explorer/Finder alongside Floe's folder management. To move your existing libraries or presets to a new folder follow these steps: 1. **Create the new folder in File Explorer/Finder**. For example, create a folder called "Floe Libraries" and "Floe Presets" on your external drive. 2. **Open Floe's preferences** panel by clicking the . Open the _Folders_ tab. 3. **Add the new folder** using the 'Add Folder' button. Ensure you use the right button for 2 separate types: libraries and presets. 4. **Open your existing libraries/presets folders** using the link icon next to the folder listing. 5. Use File Explorer/Finder to **move the libraries/presets** to your desired new location. This often involves selecting all items in the folder and cut-and-pasting them (or drag-and-drop) into the new folder. Floe, in the background, should instantly detect the changes and update its library and preset listings accordingly. If not, try restarting Floe or your DAW. ### Set the default installation folder If you've added extra folders, you can select these as the default location to install libraries and presets in the future. Use the dropdown on the _Packages_ tab of the preferences panel. ### Got mixed up? If you loose track regarding what files are libraries vs. presets, here's some tips: - Sample libraries are folders typically with names like `Developer Name - Library Name`. They often contain a `Samples` subfolder and a file called `floe.lua`. - Preset banks are folders typically with names like `Library Name Factory Presets`. They often have various subfolders for different categories, each containing many tiny `.floe-preset` files. We usually recommend not mixing libraries and presets in the same folder, however, Floe can handle this if needed — just set up both types of folders to point to the same location. ### Organising presets ### Why are libraries and presets separate? The separation provides several benefits — even though the common case is that a sample library comes with an associated factory preset bank: - Sample libraries are developed using technical programming language tools - not typically edited by most users, whereas presets are often created and modified by users. Using different folders avoids confusion and frees up more fearless customisation for the 2 separate types of users (musicians, composers vs. sample library developers). - Preset banks can refer to multiple sample libraries rather than always relating to just one. - Samples libraries are often very large with hundreds of audio files and need to be stored on an external drive, whereas presets are tiny and can easily zipped and shared. --- # Granular Synthesis > Information about Floe's per-layer granular synthesis ## At a glance - A per-layer granular engine that resynthesises the layer's instrument from short, overlapping snippets of audio called _grains_. - Two granular modes: _Granular Playback_ (time-stretched movement through the sample) and _Granular Fixed_ (frozen at one position). - Selected from the **Play Mode** menu at the top of the layer's [Playback tab](/docs/usage/layers#playback-tab), alongside _Standard Playback_. ## About Floe's granular engine Floe's granular engine works like most other granular synths — short, overlapping snippets of audio (_grains_) are spawned from the loaded sample, and parameters like grain length, density, position and pitch shape the resulting texture. If you've used granular engines elsewhere, the controls here will feel familiar. Granular synthesis works with any sample-based instrument loaded into a layer. The same controls are available regardless of whether the instrument is a single sample or a multisampled library — Floe sources its grains from whichever sample would be played for the incoming note. A few things that set Floe's granular engine apart: - Two distinct modes — a time-stretched _Granular Playback_ mode where the playhead moves through the sample at a controllable speed, and a _Granular Fixed_ mode where it stays parked at one position. - A harmony grid that lets grains randomly spawn at chosen intervals — pick from musical presets like _Octaves_, _Major Triad_, _Pentatonic_, _Whole Tone_, or toggle individual semitones yourself. - A focus on smooth, easy-to-use parameters: knobs are tuned for musical results across their whole range, so it's hard to land on a setting that sounds broken or harsh. ## Choosing a mode The Play Mode menu at the top of the Playback tab switches the layer between three modes: - **Standard Playback**: the normal sample-playback engine — straight playback with optional looping. The granular controls are hidden. - **Granular Playback**: a granular engine where the grain playhead moves through the sample at a user-controlled speed. Use this to time-stretch, slow down, or reverse-scrub the sample without changing pitch. - **Granular Fixed**: a granular engine where the playhead is frozen at a user-controlled position in the sample. Use this to "spray" grains around a single point — perfect for drones, pads, and ambient textures. The two granular modes share the same parameter set, with one exception: _Granular Playback_ has a **Speed** knob, while _Granular Fixed_ has a **Position** knob. Everything else is identical. ## Granular Playback ![Layer Playback tab in Granular Playback mode](/images/screenshots/layer-playback-granular-speed.png) In _Granular Playback_ mode the playhead moves continuously through the sample, and grains are spawned from the playhead's current location. The looping controls remain available, so the playhead can loop in the same way as standard playback. This mode is great for: - Slow, drifting playback of long evolving samples. - Blurry time-stretching a sample to fit a slower tempo without pitching it down. ## Granular Fixed ![Layer Playback tab in Granular Fixed mode](/images/screenshots/layer-playback-granular-fixed.png) In _Granular Fixed_ mode the playhead is locked at a fixed position in the sample, set by the **Position** knob. A vertical band on the waveform shows where grains are being sourced from, and its width reflects the **Spread** setting. Loop controls and the sample-start handle are hidden because they have no meaning here — the sample isn't being played back linearly. This mode is great for: - Freezing a moment of a sample into a sustained pad or drone. - Using a very large Spread to source grains from all over the sample. - Finding interesting timbres hiding inside a longer recording and holding on them. - Combining with a slow LFO on Position to create evolving, scanned textures. ## Parameters ### Playhead - **Speed** (Granular Playback): how fast the grain playhead moves through the sample. The centre-detent position is 1× — normal speed — and you can dial all the way down to a complete stop or up to several times faster than the original. To play backwards, use the **Reverse** toggle. - **Position** (Granular Fixed): where in the sample grains are sourced from, as a percentage from start to end. - **Spread**: the size of the region around the playhead that grains can start within. Small values keep grains tightly focused on the playhead; large values scatter them across a wider window, which softens transients and creates more diffuse, cloud-like textures. ### Grains - **Density**: how heavily grains overlap relative to their length. At the midpoint, grains play end-to-end. Lower values introduce gaps for sparse, pointillistic textures; higher values pack many grains on top of each other for a thick, smeared sound. - **Length**: the duration of each grain, from a few milliseconds up to a second. Short grains sound granular and percussive; long grains preserve more of the original tone. - **Smooth**: the crossfade applied at the edges of each grain to avoid clicks. Low values give hard, percussive grain edges; high values fully overlap-fade neighbouring grains for a glassy, smooth result. ### Random The Random section adds per-grain variation so the texture doesn't sound mechanical. Each control sets the _range_ of randomisation; at 0% the grains are uniform, at 100% they vary across the full range. - **Pan**: randomises each grain's stereo position. Higher values widen the granular cloud across the stereo field. - **Detune**: randomises each grain's pitch within ±1 semitone. Useful for thickening and chorusing. - **Direction**: chance that a grain plays backwards. At 100% every grain has a 50/50 chance of forwards or backwards. - **Harmony**: chance that a grain spawns at one of the selected harmony intervals rather than at the root pitch. The **Intervals** menu next to the knob picks which intervals are active — pick from presets like _Octaves_, _Fifth_, _Major Triad_, _Pentatonic_, _Whole Tone_, _Chromatic_, _Cluster_, and many more, or toggle individual semitones on and off. The knob is greyed out until at least one non-unison interval is selected. ## Tips - It's often interesting to control the Position (_Granular Fixed_ mode) using the LFO or a [macro](/docs/usage/macros) for added movement. - The volume envelope, filter and effects all apply to the granular output exactly as they would for standard playback, so you can shape granular textures with the same tools you'd use anywhere else in Floe. --- # Key Ranges > How to use key ranges to split the keyboard into zones for different layers Key ranges let you split the keyboard into zones, with each layer responding to specific keys. This enables keyboard splits, layered zones, and smooth transitions between different sounds across the keyboard. ## Setting up key ranges Configure key ranges on each [layer's **Config tab**](/docs/usage/layers#config-tab) using the low and high key controls. Click and drag these handles to set the range that layer will respond to. ![Key range controls](/images/screenshots/key-range-controls.png) **Fade controls** let you create smooth transitions at the edges of key ranges. Set the number of notes that fade in at the start or fade out at the end of each range. This is used for creating seamless overlaps between layers. For multisampled instruments in particular, consider using the **Transpose** parameter to change the pitch of the layer. This works by shifting the underlying mapping of samples so higher/lower samples are triggered as opposed to the standard pitch parameter which algorithmically re-pitches the sound. ## Key range display A bar above the keyboard at the bottom of the interface shows which keys trigger each layer, with colours corresponding to each layer. Only layers with loaded instruments appear; the bar is hidden entirely when all layers use the full keyboard range (C-2 to G8). ![Key range display above the keyboard](/images/screenshots/key-range-bars.png) Since 128 MIDI keys can't fit on screen, the keyboard shows a scrollable section — use the octave scroll buttons or drag the octave number to navigate. The display scrolls with the keyboard. Small chevrons indicate when a range extends beyond the visible keyboard area, and vertical lines mark the boundaries of each range. Gradients on the bars show fade-in and fade-out regions, with more transparency indicating lower volume. Hover over the display to see an enlarged view with more detail. Sample library developers can define named ranges (like drum names or natural vs. extended ranges) which appear as thicker labelled capsules. ![Enlarged key range view with named ranges, fades, and off-screen chevrons](/images/screenshots/key-range-enlarged.png) --- # Layers > Information about Floe's three-layer architecture and how to use layers At the core of Floe are the 3 independent layers, each with their own instrument and sound-shaping options. This structure allows for blending multiple sounds together to create dynamic, rich, and complex tones. ![Floe's three layers](/images/screenshots/layers.png) These are displayed in three columns on the main panel. Each layer is identical. Floe’s layers are the first things in the processing chain; each layer is processed in parallel, and then the three streams of audio are mixed together and fed through the effects rack, from top to bottom. When you play a note into Floe, all layers are triggered simultaneously. If a layer doesn't have an [instrument](/docs/reference/instruments) (the sound-generator at the heart of a layer), it is inactive. Click the x-mark icon button at the top right of a layer to clear it. ## Top Controls A permanent fixture on each layer are the _top controls_, which provide quick access to key functions. ![Layer Top Controls](/images/screenshots/layer-top-controls.png) 1 2 3 - **1**: the _instrument_ selector: click this to open the [browser](/docs/usage/browsers) and select a new instrument for this layer - or unload the current one. You can also right-click and choose 'Unload' from the menu, or click the x-mark. - **2**: instrument navigation: left/right arrows to quickly switch between instruments, a randomise button to load a random instrument, and an unload button to clear this layer. The navigation and randomise buttons are based on the current filter settings in the browser. For example, if you have selected the 'Distant Signals' sample library on the browser's filters, the navigation buttons will only cycle through instruments from that library. - **3**: mute/solo buttons: buttons to mute or solo this layer. Soloing a layer automatically mutes the other two layers. - **Volume**: adjust the layer's output volume. - **Pitch**: adjust the layer's pitch in semitones. Double click the number to type in a precise value. Or click and drag to change the value, or use the left/right buttons. - **Detune**: adjust the layer's pitch in cents (hundredths of a semitone). - **Pan**: adjust the layer's stereo position. Uses a constant power pan law (AKA -3dB centre). - **Stereo**: increase or decrease the stereo width of the layer. ## Playback Tab The Playback tab controls how the loaded instrument's samples are played back. ![Layer Playback Tab](/images/screenshots/layer-playback.png) - **Play mode** (top selector): switches between _Standard Playback_ (normal sample playback) and [granular modes](/docs/usage/granular) for time-stretching or frozen-position playback. The waveform will often have [looping](/docs/usage/looping) controls on it. - **Waveform display**: shows the waveform and voice markers. For a single-sample instrument this is the actual sample; for a multisampled instrument it often displays the last played sample, although it will sometimes deliberately lock with a checkered overlay to avoid rapid flickering images. The arrow on the left edge is the sample-start handle — drag it to adjust where playback begins. When you play a note, red voice markers track across the waveform. - **Sample info caption**: shows _single sample_ or _multisample_, the sample length, and the root key of the loaded instrument. - **Reverse**: toggle to play the sample(s) in reverse. - **Loop mode** (bottom selector): select the looping mode — _No Loop_, _Standard_, _Ping-Pong_, etc. Visit the [looping](/docs/usage/looping) page for full details. It's typically a good idea to add a small attack using the volume envelope to avoid clicks if you change the sample-start position. ## Main Tab The Main tab houses the volume envelope and the per-voice filter. ![Layer Main Tab](/images/screenshots/layer-main.png) ### Volume Envelope - **Volume Envelope on/off**: typically it's best to leave the volume envelope enabled, but in some situations you can turn it off to allow samples to play unaltered in their entirety. - **ADSR graph**: 3 draggable points representing Attack, Decay+Sustain, and Release. Use these to shape this layer's voices volume over time. Hold `shift` for fine adjustments. ### Filter Each voice belonging to this layer can be processed by a filter to shape its frequency content. - **Filter on/off**: toggle to enable or disable the filter for this layer. - **Filter graph**: an interactable frequency-response graph. - **Filter type selector**: click to open a menu of available filter types such as low-pass, high-pass, band-pass. - **Cut**: adjust the filter's cutoff frequency. - **Res**: adjust the filter's resonance (emphasis around the cutoff frequency). - **Env**: this bi-directional control adjusts how much the filter's cutoff is modulated by the filter envelope to the right. At the middle position the envelope has no effect; positive values open the cutoff up as the envelope progresses, negative values close it down. - **Filter envelope ADSR**: in the same manner as the volume envelope, 3 draggable points representing Attack, Decay+Sustain, and Release shape how the filter cutoff moves over time, scaled by _Env_. ## LFO Tab The Low Frequency Oscillator (LFO) can modulate various parameters to add movement and interest to the sound. ![Layer LFO Tab](/images/screenshots/layer-lfo.png) - **LFO on/off**: enable/disable the Low Frequency Oscillator. - **Waveform display**: a live representative preview of the current LFO shape and rate. - **Target**: select the parameter that the LFO will modulate: Volume, Filter, Pan, Pitch, or Grain Position. Some targets require their associated feature to be active (e.g. the filter must be enabled, or the play mode must be Granular Fixed). - **Shape**: choose the LFO waveform shape. - **Mode**: switch between _Retrigger_ — new notes always start with the LFO at the beginning of its cycle — and _Free_ — the LFO runs continuously regardless of note events, so all notes share the same LFO phase. - **Amount**: control the intensity of the LFO effect on the target parameter. - **Time**: adjust the LFO rate. When Sync is enabled, this is synced to the host tempo (e.g., 1/4 note); when disabled, it operates in Hz. - **Sync**: toggle to sync the LFO speed to the host tempo. ## EQ Tab Each layer includes a simple 3-band equaliser to sculpt the frequency content of the audio. ![Layer EQ Tab](/images/screenshots/layer-eq.png) - **EQ on/off**: toggle to enable or disable the equaliser for this layer. - **EQ graph**: a frequency-response display showing the combined effect of all 3 bands. Each band has a draggable point you can move directly on the graph. Use the mouse scroll wheel to change the resonance of the node. The 3 bands have identical controls: - **Band type selector**: click to open a menu of available EQ band types such as peak, low shelf, high shelf. - **Freq**: adjust the centre frequency of the EQ band. - **Reso**: adjust the resonance (Q factor) of the EQ band, controlling how narrow or wide the frequency band is. - **Gain**: this bi-directional control adjusts the gain (boost or cut) applied at the frequency. ## Config Tab The Config tab contains MIDI and playback behaviour settings for this layer. ![Layer Config Tab](/images/screenshots/layer-config.png) - **Transpose**: transpose the mapping of samples by the given semitone offset. This is particularly useful for multi-sampled instruments as it triggers different samples rather than algorithmically pitch-shifting the audio (which is what the layer's top control _pitch_ does). - **Pitch Bend Range**: set the pitch range in semitones for the MIDI pitch wheel. - **Keytrack**: when enabled, tunes the sound to match the key played. When disabled, the sound always plays at its root pitch regardless of the MIDI note. This is not typically useful if the instrument is multi-sampled. - **Monophonic**: select the voice behaviour when notes overlap. _Off_ (polyphonic): multiple voices can play simultaneously. _Retrigger_ (monophonic): new notes stop previous notes, triggering their volume envelope Release section. _Latch_ (monophonic): the first note plays until all keys are released; new notes are ignored — useful for drones and textural elements. - **Range** and **Key Fade**: visit the [key ranges](/docs/usage/key-ranges) page for full details about these settings. - **Velocity to volume curve**: graphical control showing how MIDI velocity affects the layer's volume. A straight line from bottom-left to top-right means there's a 1:1 relationship with velocity and volume. The curve can be adjusted to create different velocity response characteristics. Visit the [MIDI](/docs/usage/midi) page for full details about editing velocity curves. --- # Looping > Information about the looping features in Floe ## At a glance - Each layer can loop its instrument while a note is held, either using loop points baked into the sample library or your own custom loop region. - The available modes adapt to the loaded instrument: library authors can offer built-in loops, restrict which modes are usable, or disable looping altogether. - Set on the **Loop mode** selector at the bottom of the layer's [Playback tab](/docs/usage/layers#playback-tab); custom loop points are dragged directly on the waveform. ## Loop modes The Loop mode menu offers up to six choices, depending on what the loaded instrument supports: - **Instrument Default**: use whatever the library author chose for each region — including no looping at all. - **Built-in Standard** / **Built-in Ping-Pong**: use the library's built-in loop points, but force every loopable region into the chosen direction. Loop handles are shown on the waveform but are not editable. - **No Loop**: don't loop, even if the instrument has built-in loops. Some libraries require looping (e.g. sustained pads) and will ignore this. - **Standard**: custom wrap-around looping. When the playhead reaches the end of the loop, it jumps back to the start. - **Ping-Pong**: custom looping that alternates between playing forwards and backwards through the loop region. ![Loop Mode Menu](/images/screenshots/loop-mode-menu.png) The custom modes are only available when the instrument allows user-defined loops. For multisampled instruments, the same loop region (as a percentage of each sample) is applied to every region. ## Editing the loop region When a custom mode is active, three handles appear on the waveform: - **Loop start** and **loop end**: drag horizontally to set the loop boundaries. Double-click to type an exact value. - **Crossfade**: drag to set the crossfade length. The shaded region of the waveform highlights the looped portion, and the crossfade is drawn as a sloped overlay at the boundary. You can also drag inside the loop region itself to move the whole loop without resizing it. Enabling **Reverse** mirrors the entire display — the loop end appears on the left and the loop start on the right — but the underlying loop points are unchanged. If the instrument has built-in loops that aren't editable, the handles are still drawn so you can see where the loop sits, but they're greyed out and can't be moved. ## Crossfade A crossfade smooths the boundary so you don't hear a click when the loop wraps. It usually helps to have a small crossfade enabled, especially for sustained or tonal material. In **Standard** mode, the crossfade fades from a region just before the loop end into the loop start — the same audio is mixed against itself on either side of the wrap. In **Ping-Pong** mode, the crossfade is applied at the turnaround points where the direction reverses. Floe automatically clamps the crossfade length so it can never: - Exceed the length of the loop region itself. - Extend past the start of the sample (the crossfade needs audio before the loop start to fade in from). - In ping-pong mode, extend past the end of the sample (the turnaround at the loop end also needs audio on both sides). If you make the loop region smaller than the current crossfade, the crossfade shrinks to fit. The crossfade handle is hidden when the loop spans the whole sample, since there's no audio outside the loop to fade against. ## Other playback controls The same waveform also hosts two controls that aren't strictly part of looping but live alongside it: - **Sample start offset**: the arrow handle at the bottom-left. Drag it to skip the first part of the sample. The skipped region is drawn in a dimmed colour. - **Reverse**: a toggle below the waveform. Plays the sample (and any loop) backwards. When the sample start is moved into the audio, it's a good idea to add a short attack on the volume envelope to avoid clicks. --- # Macros > Learn how to use macros in Floe to control multiple parameters with a single knob ## At a glance - Control multiple parameters at once with a single knob. - 4 macros available, each controlling up to 6 parameters. - Perfect for expressive performance and creating custom controls. - Found in the bottom panel: Play tab for performance, Macros tab for editing. ## What are macros? Macros are powerful controls that let you move multiple parameters simultaneously with a single knob turn. Think of them as custom controls that you design to fit your musical needs. Instead of tweaking multiple knobs separately, you can create a macro that adjusts filter cutoff, reverb amount, and delay feedback all at once — perfect for dramatic breakdowns or smooth transitions. Floe provides 4 macros, and each macro can control up to 6 different parameters. This gives you tremendous flexibility to create expressive, performance-ready controls that transform your sounds in musical ways. ## Setting up macros _Complete workflow: creating macro destinations, adjusting amounts, and renaming_ ### Creating a macro destination 1. Navigate to the **Macros tab** in the bottom panel 2. Hover your mouse over any macro knob — a **plus icon** will appear 3. Click the plus icon to enter **destination selection mode** 4. All automatable parameters in Floe will now show plus icons 5. Click on any highlighted parameter to link it to your macro ![Macro connect GUI](/assets/images/macros-connect-0e2ed5e0eca68332962003ef358d1107.png) ### Adjusting macro strength Once you've linked a parameter to a macro, a small knob appears next to the macro. This **destination amount knob** controls how much the macro affects that parameter. ![Macro destination amount](/assets/images/macros-destination-amount-f36f619e2450896b6a87dcd7f566263a.png) - **Positive values**: Parameter increases when macro is turned up - **Negative values**: Parameter decreases when macro is turned up (bi-directional control) - **Strength**: Higher percentages create more dramatic changes The macro's effect is relative to the parameter's current position, so you can set your base sound first, then use macros to perform variations around that starting point. ## Managing macros ### Removing destinations To unlink a parameter from a macro: 1. Hover over the destination amount knob 2. A **minus icon** will appear below the knob 3. Click the minus icon to remove the connection ### Renaming macros Give your macros meaningful names: 1. Go to the **Macros tab** 2. Click on the macro's name 3. Type your new name ![Macro rename](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK4AAABvCAIAAAD62myoAAATmElEQVR42u2deVQU157H819kMyjIJt00i6yNyNZAA0IDzaLgxiI7tICK+pRFBEKi4oYiihuoAaMoBPd9RVE0yiKiRtRokpc5yeTMmZz35s2bN8ub5Z/5NkWKoqq7aLAxtt4636PdVberbt3fp37397t1q/hIf5I5JT1jM2jCJ1MgPWNTvUmmesYm+p8wNVlv4pCGbzIxMDb9TerWK6VvbDrB2ISW8iiTTPUnT9GfbG4w2UIpU0umDKdYMWRtMEVgMEVIydDMhikjcxFL7AJmQiMzAXaCXRmYWOqbWOhNNp8wafCUhzRQMX26wtSJGFOVnEJVmC2sN5mib2pmZG45aarATGQ3dZqT0NlV5CqGhK5igZub0F0scBdbi92sXV0Frm4CF1eUQUljK2v8ymCKuYGpuSElE0sITYE20TOxMDSzNjAXGFgIDa1ERta2RgIHyFDgYGBtr29tN8HKdoKlaIKljZ6lEDKwEhpZCY2n2kyeKppsjX8FkyynGltY0frE3HKimYXRlAHhM9aggJVwkpXNRxQBtNAWH0+EtZQGY6HA5IAHCH1jtRzwoTDJjKIBFuKhwcBsGA1KmQ0xYWQhmmhhC+EDlwwKBSOzARRMlSjoT7bQG7gGuCjoDT8vvd+qqk4TJptSNKBxYQNzW3tYWuDkInB2hZTmF7spUXBToiB0cYOsHZ0t7BxMBDb4iaEZztrcwMQMKBiZWg3RgNbAKVsIDSxtDKeKJgrsjIQORsJphkIHA6GDvsB+wlTbj61EH1vZTLASQvpWNoZWNhOn2kyyFik1VQjUKAKYKEw0w7+Wn2CNlTXKgBsTa9uPBEIbIiKIoEBEUCAiKBARFIgICkQEBSKCAhFBgYigQERQICIoEBEUiAgKRAQFIoICEUGBiKBA9F6i4OjkPMPT088/QBoYFDwzJCRUhv/xxVcicRO72ztMIwZ4z1FwdRPD+pGRUVFR0fySycK8vH0IE+8hCu7TPWRh4SMSwBVcxTRHp3E6SaAmdp8ukfgFBimdE/jLrLuRWnNqQcW+8MwCd/9QwoE2UchOi0Qr89t7RD/h4ysR2oi0VSWRrZ3HDM+ZIaGsoyw+8ZylzH3XovLK7aY5ERTeVHXViv/7ZQ/X8OgmYAxEDLZ29pSNYR47ewf0IN4+vrhCuTQgntCKe0CMEiGPVAkcFwVKucd6o5d+RlAYu660FoEDSlRb40JETwGzj/hbWB2egMsQ/PmY64N9gice3wOT57V+ow6IzL1XvGSzCQqj1p3zpTQH0J9ebocbGENfjiyDZTCkGGMLVri2D5XJEJy6uLrBJ1HOCf86untKY5PjCqqy6tu4QMhSlxEUxugPoI7zZRKf6W8ScrJMiH5kVHuY7jGDtQfkrs4uriP+UBqXmlZzmkVDRHYRQUHD+GARk4OvDi5/89rAt4eFR9CGRGePwGJsJI2hl4nIKmB1HKHJSwkKIygjOZzJwfGGFfwXa0JiomJRTn7+svSMjAi5nCdNAA3hEXLaotLAIA0Z0krs6RUak/3FbRoFkOERLCco8OnF1xtoDu6cK1VXLG/xkubm5m7O0tnZuW1bdUzMLJW/cnJ2YdpVk+CDmYzIZGGa+xIV3kUSrGjooGlI23l2LPuxEdnY2ovsHW2nOTuIPe2cxaJpzvgqFNm9VyhsKE+mOfiXVzV+Eg9umfiExDNnzvztP//rWX9/t/qluroahuf+3NPLe8i0YeH89QErTHR4/AG25uTmrSoozMnJlcsj1RXzDotldhNyxepRQWDv6iGWhsvzKxfWnM3+8sHi4/15rc8yDt6J3/JVUMoKZ28p+HhPUPipr4pG4fOSRG6BwqJimBkcQL/+6c/dvMvZs2fhz7k7YQ5Y8TsG5vgmOiOVGUppaVlbWxvr0NeuXSsqLlbZW0XlldEoKBrvadgyQpGtWBoRW7o359gjtcnqFx2ynHJHD4nOo1CQP4fm4Pm9Sm6BlatWoZX/4aefKRSgH378kZ+GK1euBEgDWftxcxMzfb4mLgH0qPQE58+f5zn6yZMnVe4/Y89l2n5h6Ss04UASl55ce1EdBEMhyPH+ORUHxIFy3Uah/cwaGoWK4gTW1nnz51Pt29PT8+e//CtNw9OnT/lpOHLkCL9jcHRS7VSRLg4NRXCSz8ioqHv37nWPtNy8eZPrmUIXLqaNl7r95Igt4x2VmNVwb0QOaCVuPeHk6a+rKNjZ2/39p90UB3/9fqetHTsIYl5/L16+pFH4p19/HdEeq1YVcAePmbcnuPWxtbPnCSlEtnaIV7o1W5pbWrj7zzncSVvOwYVvyMvFNzhl9xXNOVDqeH9ceT1iSZ1EIStFTruEq63FrK25eXms9v35l19oGr77/ocRL03W3WokAsz8kFsfZifiK2GzUlBY2D2aZcnSfHbw+1k9bTm+oSobEeIDmFalyRcd7UXYqPquR8tjv3nZOonCjo0ZNArrSxeyth5pamI1bm9v71/+7W8UCn/99/84dfpMR0cHjzHS0jPYXlomo4eMVAwDePvwDFRfunRJQwjud/Wc6+jdfvI2z7AVXJS6ZkG6CHurNHZO82Pv6KTwvM/U+QZkGTqJwrmmVTQK8XNDhjtzL5Wt/O3r1xQKtNP+tKJCnUl27d7NOiLCSdoYDtMcNd86MySE3/zXvn549FbfjitPys8Nu2RZs7Do/Uv81PbroYo16iydceA2TtrJ048nhHR9NyZMjA6Fzquf0ih4eAxzmHFxc9Q1+q3bd1j7qa3dpbIkunae697F1Y0TMwbRWwEZcxMcjLr6NDQ0rjjVr8426noo/wCpumaJ39yi0sZQev0tJVLTfaiveao6kaDk5bqHwrOO9RQH//uPe1j3oLMVCpXtfuHCBe5+6ESDtSDa50SOXjwJAjN90LA+x0+cwNaLF1WnfDkH2tSFpdx0l1Z6/U3WfrIP3Z+37tDczxtiCrcrBzZcpuMzFL+pOae5j1U4csVm3UPh5W/jzf/9827WyAw3ZhyMzJubufsJD49QWbirq4snieBGA0wUWF4hPiFRnVfAVvxLmaH4zLOqy08b2/ou3O190NU9a/Zs1tiUJihwAwV5fqXqiVX2jggOWIXnVBzQPRSetK+jOwgnp2F9c3JKisp2f/DgAXckeGl+vsrCbW1tfF6BgwL6b3XjzdikjgNKJ24/uv2gh7WVNViJrIE/mx1MrDjDCQlVrf7zFcgOfGKUwbXIwQmfIWnS0swv7rIKxxTt0D0UmONLYSG+wy70CLm6q3DtunXMkmjTGzduaJjcSyR+PKNMzFsV3FvSx48fVwkBU8wChw8f4RnK5Bn8Tqo+rSp36Ms59ih1z1XljdPpPvgM5bY84ZYMySzWPRSa6pbSKCxRsO8rtre381+IKg3AXEpLy3gCQ/Tc7IEdVzd6q59/AHuAKCeXnwNWZVLT0thTWgKHjq7yttngmOaKzeoziHYqbOQZa5ohi9M9FMoL42kUDu7MY23dUlWlCQc8NETI2cPy8shIehqLimF/GxE9ixpuiVugsbGRnwO6Mnv37uMOVtI7j1B/GxMSS8PzvnqqenypqcfFd6Y0cbFaVva3i96NG5WjQyEs1IdGAdkE9w6hhhyopAE5HqsAs6tWF7Ux3Qb3tqT7dA/NH+TiCVN4YkYlkbb23GCQHl1O23sdCYU6FGQ55bp6O+rHh5tpGmZFsX3yho0bNeSACwR3AgEzUFBnVFfG2HOoTKatdoFPYN77HnGCpEfobHWOgUfp9bfsnFx1FYWG2jwahRbOfEZ0qEjcNeeApqGwqJjrn5kTUngmJjGnunv7+GqlXXwlEv573yrGHLNLeObUq7w38U7dpx41CpHhEuasxqBAL+5gsFZqxhxn5IaEw25Kid2HzZof5TxpFX2/+3TmDrmjnOrmK8wq3qk40q3JPcnMLzoC4vN0fhbT9ROraRQutYzLDHHWtFWe6J2Sf4CUOddZ3eQGTcQMUPhvPaikITh9FRLI3JbH6jhQHOlJ3HZyRvjc92FC29zZQUzHUFYQr/VqMYcRNXEz6D7orl0rFaCDD9YgpiZzGz1ksfJlGxK2tCIUUBzuQgwBMrIa76ftuz5v7aGQrNVOXgHvz4zno/VDAwx//2l30nxt3ltjRou4xDV85B6eQOWN7DELCeSYn95EqOPqF+IbmyZNWhqqWDMzswjdgXd00jR37/fwkZhXnRtpGv65v1pbFWIOIPLPEiB6V1CInzvzf34enNym3TqNrZ8m+j2fmaRmP49TzQKDgoh5dPJVG0QEBSKCAhFBgYigQERQICIoEBEUiAgKRGPV6+//CBEUiD4MFKSBwakZWUuWrSDiEYXC73LopORU1zeesPPRiFP8Ssoq9jcc/sOqokxFDhGPKBTe/nGzF+UVlZS1njqXnpk9jiiUVXy+snA1cf7vfgfh5e1bU7t3YUr6uKAQFiGv3VNPbKwrsYKfv/RQU/O4oJC/fCX8D3fqX3BIKC3/AKmGs4xs7eznzJ2nyWt2Ka0qKHryTX9KWjpBQXNt3b4zVBaufRTQO8yZx563mKVYRJ0zrVff/XD1eltyShr/kRbl5qHwlqptGtasuGQNyqdnZvGUQazkJnbX4p+Q0HUUVJpsfFE4fOToopxcaGVB4aHDTbh8AcT8+ATeJwv8anbuioyO0SIKN9tvP+jq0XByOkFhXFBYu27Y+wOWLVemUsdaWrV4VgQFnUQBXhpeof3OXdoBVG7YtCA+MTpm1vaanZu2VGElAovKjZti44bN/4eld9Tuqtt/AN4FMUdh0eqCwiIWCrKwiHWVG1AmPSOTjkvyl63A3nr7nsAhbdlaXbJm8BHstesrl+QvQ1yCAnvr6vHVPyCQOx0Zzgn7PNjQWFr26QxP9lM9Pr4SVGNf3f7cvCXcZ/UR7mRmKfbsq8NBmRPzCQpDcQBah/oaPWs2yLh0+eqz5y+xvu2W8s1nCADxeU1ZOW0PlKeaD1f2t6+/R/lHj59eu3GTiQJ6om/6XzzEhmfPqZKU5fYfbLjdce/5y1cvX33Xce/+qdOD7znrf/EtDnf67Hns8H5nFxXKlFcM+zNAu/fsw3rU7X5nNz709PZFMbotEIafYOut9jv48OLb18v/sJLeik4Qm7AeW6kPDYe+pIKVDxSFbdU1uPShsPAINDQs1P3wES5fJgrQ52vX+/kHUO9OY6GQkppGUYJ4U/nUgJv46LEWrGGhgIs+aWGyjcjWydkFVz/WoAI8HQRQQBmYRzzwuG1IqAwQwWxDJ1VegQJbt23H5Y7d4ugwKMJeypzePr59T75p/qqVqjM8Cji7+/V96vEsOBtA1tX9kJqKjePiQDggRdIHigJLaE3mKzYpFBoPHWbG9kwUsB5tiq8LU1KZD8fhKmOhUMB4rDYoeCba/SDj2XuVKGAN88V98B/YD+XJcVywBR/DTIC/PNKEAjGzYvF56bLl+Ly6ZOjPGiQkLQSCODT1OB7OtPXESfq8sAZbqYz3Q80gmo7l5C6Glixdhl4c/rurp5fOICgU4DmYP2ShAHvg+mW+XgkrYWkWCsywEZ4DR6ELqEPhRtutYWfxaQXNHOIVfEbKgyCG1vrKjViJsGBgxv1MuP2HvX34FfevkoCwK9euo5K1u/bMjo1jvROOxAqDo57K7vN2h4YooE1RgGWzt4AC7M11aZToeALu4fLV61QHh44DcSXz4V0PTy+QBN9ABS7btu+gw1KCwqBOnDqD9dKgYA29AoJBdLrMHuQtoEBVHqkBEhmWEPcMH8QNKCktu3GznYp/WXkEagKPiJ4CFYZ7ix74czcEhUHhAsL60IE/rKAJCrAiyjDfYvEWUEBgy4xMuUIBxID0+7/oNCd7YADeV+KPfoF5OxjrcRb76g8QFIZSLKxE7E014ogoUAMA+Ip+mnYM6RmZ+NWoUDh/8TIuSua7efhRQPXQi+Erasjs3YpXl1DV2L23DnVIS8+ktyKExBrkO9QoCH67s3boRdQR8kjgW7Oj9sNF4ey5C5UbNkGbq7Zeb7tJpe+ZWQoNYwUIyV5v3xOsgeVWFhTW7NxFpemjQgFE4icI4rJ/u23GjwI0Z958HAa/ajrWjF9hD53dD+/c/drTS/m4+6zZsUgx0HNtqdqWla3A+SEiRgdBIY4gF9kvDlF/4OCi3DxQgh4E5alw4UNPJtGsSLuRUEQy3nGhCQpUJnbpyjWUxHrYGF4BVxg6Gs1RQJB/6vRZ7AHG0xAF6lLGcZG/YP3jp8+OHmvxYAw4hssjz124RAWG9zu7wRk9XiIYeDcPsln4P2rMA4koqv3+h40rC1enMFzlOAkG9vL2ESj/uE80laaOftaGzximcyGLQWyo7q6mnb0DAkl1W7Hex1fCelPYu4DChs1b5VEx2kdhQULSug3j9VJyWOKzteuYY0FIzNCUuIjJ1JUxN2nLiTNuY/3L7iNMaNu978CChIXjUe/ZcXMQHCDOQEJfUFiEABB+vuPe/Td5o9YHjkLxmvKC4pLxmtsYFBxSd7CxcHVpuDzK189fu0pcmHz2/EXqPhOwQNcQERmt9aO8NVEovP3j+vlLY+fMq9xU9fn6jeM7+d3R2SVrUe6mqmp4iPHQnrqDBxoOj9PO36YoFH6XQ6+t3DRvQQJ5JIZ0EOTpKIICQYGIoEBEUCAiKBARFIgICkQEBSKCAhFBgYigQERQICIoEBEUiAgKRAQFIoICkW6jQBaykIUsZCGLquX/AV+hNQKmXZ8VAAAAAElFTkSuQmCC) ### Using macros for performance Switch to the **Play tab** for quick access to your macros during performance. This keeps your most expressive controls front and center while you're making music. ## For preset creators If you're creating presets for others, macros are essential for making your sounds performance-ready. Well-designed macros turn static presets into dynamic, expressive instruments. Consider what aspects of the sound would be most musical to control, and create macros that enhance the emotional impact of the preset rather than just providing technical adjustments. - Every macro should audibly do something - you should be able to easily hear that something is different moving from 0 to 100% on the macro knob. - Ideally macro names are a single word with no abbreviations - Check how the macros look on both the LAYERS and PEFORM page. Are the names readable or too cluttered? - Avoid technical details in macro names - describe what turning from 0 to 100% does to the patch's sound. For example, 'Pulse' rather than 'L1 LFO', 'Reverb' instead of 'Convol Mix', 'Vibrato' if the properties of increasing the that macro knob adds a vibrato effect. - Something to consider quite often: just like a 'Volume' knob _increases volume_ as you turn it up, so should your macro _increase the property_ of the name you've given. This is more intuitive. For example, set a macro that _decreases_ the gain of a high-shelf filter: call it 'Damp' or 'Muffle' because turning up the macro increases the sense of 'muffle' in the sound. Alternatively, you could invert the macro programming so that it increases the gain of the high-shelf filter. Then, a more appropriate name would be 'Brightness' or 'Highs'. Which inversion to use is up to you and depends on what is important. - Both 0% and 100% on the macro dial should be valid and usable. For example, if at 0% it essentially mutes the instrument, this isn't typically very helpful. Or it's similarly bad if 100% means the instrument is so loud it's clipping the meter. It can occasionally be useful to break this rule in the case of something like a filter cutoff where it's useful to be able to filter out the sound to nothing when recording a performance. - Not all 4 macros have to be used all the time. However, when not using 4, avoid put unused macros between or before active ones. Right-click a macro to Copy Macro and Paste Macro (or Reset Macro) to move macros so that macros are filled from left to right with unused macros at the end. --- # MIDI > Information about MIDI control in Floe Floe is controllable via MIDI in the typical ways you'd expect from a software instrument. ## MIDI CC ### Default MIDI CC mappings Floe applies some default MIDI CC mappings when it starts. These are the defaults out of the box, but you have full control to remove or change them — see the sections below. The default mappings are: - **CC 1 (Modwheel)** — Macro 1 - **CC 7** — Master Volume - **CC 11** — Master Timbre You can disable the whole set via the **Default CC mappings** option in the MIDI CC Assignments panel (or in Preferences). While that option is enabled, the defaults are reapplied every time Floe starts — so removing an individual default mapping only clears it from the current instance. ### MIDI CC Assignments panel You can view and manage all MIDI CC assignments from the **MIDI CC Assignments** panel. Open it from the top-panel menu (the three-dots button). This panel shows every active CC-to-parameter mapping, including which module each parameter belongs to. From here you can pin or unpin mappings, remove them, and toggle the default CC mappings option. ![MIDI CC Assignments panel](/images/screenshots/midi-cc-assignments.png) ### Creating MIDI CC mappings All automatable parameters in Floe can be assigned to a MIDI CC. This allows you to control Floe from a MIDI controller for example. To create a mapping, right-click on the parameter you want to assign and select **MIDI CC Learn**. Then move the control on your MIDI controller that you want to assign to that parameter. This will create a mapping between the parameter and the MIDI CC. You can remove a mapping by right-clicking on the parameter and selecting **Remove MIDI CC**, or by using the trash icon in the MIDI CC Assignments panel. ### How mappings are saved MIDI CC mappings are saved with your DAW project. By default they only apply to the current instance of Floe in your DAW — they won't be applied if you load a new instance. If you want a mapping to apply to every new instance, **pin** it (see below). Preset files do not save MIDI CC mappings. So you can load presets and your MIDI CC mappings will remain. ### Pinning mappings You can **pin** a MIDI CC mapping so that it is automatically applied to all new Floe instances. There are two ways to pin a mapping: - In the **MIDI CC Assignments** panel, click the pin icon next to a mapping. - Right-click a parameter that has a CC mapping and select **Pin MIDI CC**. Pinned mappings are stored globally in your preferences, not in your DAW project. ## Sustain Pedal Floe supports sustain pedal control via MIDI CC-64. When the sustain pedal is pressed, currently held notes will continue playing even after key release, until the pedal is released. This mimics standard piano sustain pedal behaviour. ## Pitch Wheel Floe supports the MIDI pitch wheel. The extent of the pitch bend can be configured individually for each layer by using the pitch bend range parameter on the [Config tab of each layer](/docs/usage/layers#config-tab). This per-layer configuration allows for interesting sound design possibilities. A pitch bend range of 0 will disable pitch bend for that layer. ## Velocity [Each layer](/docs/usage/layers#config-tab) has a customisable velocity-to-volume curve that shapes how hard you play (MIDI velocity) into the volume of each note. ![Velocity to volume curve editor](/images/screenshots/velocity-curve.png) ### How the curve works The horizontal axis is velocity — far left is the softest possible velocity (MIDI value 1), far right is the hardest (MIDI value 127), and higher-resolution velocity from DAWs that support it works too. The vertical axis is the resulting note volume. When you play a note, a red indicator appears at its velocity position on the curve so you can see where you're playing. A straight line from bottom-left to top-right gives a 1:1 response — the harder you play, the louder the note, in equal proportion. By moving, adding, or removing control points (and reshaping the curve between them), you can change this relationship: make soft playing louder than it would be naturally, cap the volume of hard hits, or create a non-linear response that emphasises a particular dynamic range. Setting different curves across the 3 layers also opens up creative sound design — for example, fading one layer in as you play harder while another fades out. By default the curve doesn't start at zero, so even a zero-velocity note still produces a quiet sound. You can drag the left-most point down to silence if you want zero-velocity notes to be inaudible. ### Velocity and multisampled instruments It's worth noting that velocity does more than just control volume. For multisampled instruments that contain separate velocity layers, a note's velocity also selects _which_ sample is played — not just how loud it is. A low-velocity note on a piano, for instance, plays the soft-velocity samples (with their distinct tone and character) rather than a quieter version of the hard-hit samples. The velocity curve only reshapes the volume response; it doesn't change which velocity layer gets triggered. ### Editing velocity curves Find the velocity curve editor on the **Config tab** for each layer. - **Double-click** anywhere on the curve to add a control point (up to 6 per layer) - **Drag control points** to move them - **Drag between points** to adjust curve shape - **Double-click a point** to remove it - **Right-click** for menu options --- # Perform > The distraction-free page for exploring presets and variations The _Perform_ page is Floe's distraction-free home: a place to audition presets, dial-in variations, and play with macros without the fuss of the per-layer or effects controls. The library's background image fills the panel, keeping you connected to the character of the sound. ![Floe's Perform page](/images/screenshots/perform.png) The controls on this page are presented from elsewhere in Floe. Use [Layers](/docs/usage/layers) and [Effects](/docs/usage/effects) to dive deeper into sound design. - Browse through presets using the large chevrons (these perform the same action as the ones in the top panel). - If they were added by the preset author, the Macros can be used to shape the sound. - Use the [_Random Variation_](/docs/usage/randomisation) strip to generate fresh takes on the current sound - the further right you click the wilder the results. Use _Undo_ to go back. - Compare your edits to the original preset using the _Original/Modified_ toggle. This is a simple A/B check to evaluate your edits. - The rightmode bottom box contains the extended preset description/notes. If the preset author didn't specific it, it may contain an automatically generated description that gives a reasonable hint into the preset's characteristics. --- # Presets > How to use Floe presets A preset is a full production-ready setup of all of Floe's parameters and options, along with a name, description, and tags. It's a snapshot of Floe's state ready to be loaded using the preset [browser](/docs/usage/browsers). Presets typically only use instruments and impulse responses from a single sample library. However, using any installed instruments and impulse responses is supported. You can have presets that blend sounds from completely different libraries. ## The preset selector The preset selector sits in Floe's top panel and is your main way to load, navigate and save presets. ![Floe's top panel showing the preset selector](/images/screenshots/top-panel.png) - **Preset name and description** — the dark box shows the current preset's display name and short description. The name is suffixed with _(modified)_ if any parameters have changed since loading. Click anywhere in the box to open the preset [browser](/docs/usage/browsers). Right-click for a small menu to _Load Blank Preset_ (clears all instruments and IRs, resets all parameters to their defaults) or to _Open Containing Folder_ for the current preset on disk. - **/ Previous / Next** — load the previous or next preset. The order respects whatever filters are currently active in the preset browser, so you can quickly audition presets from a chosen library, tag or folder. - **Random** — load a random preset, also respecting the currently selected filters. - **Save** — save the current state as a new preset. Opens the save preset panel where you can choose name, folder, description and tags. - **Load from file** — open a system file picker to load a `.floe-preset` file directly from anywhere on your computer, without needing it to be in one of Floe's preset folders. Useful for trying a preset someone has sent you, or for loading a one-off preset from outside your usual library structure. ## Saving presets Click the save button in the [preset selector](#the-preset-selector) to open the Save Preset panel. ![Floe's Save Preset panel](/images/screenshots/save-preset.png) - **Author** — a free-text field for whoever made the preset. The button next to it remembers the current author as your default, and the button fills the field with that remembered value — useful for tagging all your own presets with the same name. - **Description** — a multi-line description split into two parts: a short part shown next to the preset name in the top panel, and a longer continuation shown on the perform page. To control the split explicitly, press Enter where you want it to break — everything before the newline becomes the short part. Otherwise Floe takes the first sentence (up to a full stop within roughly the first 56 characters) as the short part, and if no sentence break fits it falls back to the last word boundary in that range. If you leave the field blank entirely, Floe generates an auto-description from the preset's contents — instruments in use, looping, sound character, and so on — so even unwritten presets get something meaningful in the top panel and on the perform page. - **Tags** — checkbox-style tags grouped by category (Sound source, Real instrument category, Sound type, and so on). Tags drive the preset browser's filters, so adding accurate tags makes a preset easier to find later. Some categories will grey out remaining tags once a related tag is selected to keep combinations sensible. - **Cancel** — close the panel without saving. - **Overwrite** — only appears when the current state was loaded from an existing preset file; saves over that file in place. - **Save / Save As New** — opens a file picker to choose where on disk to save the `.floe-preset` file. The file name you pick becomes the preset's display name in the browser. The first time you save, the picker opens in a `User` folder inside your default preset folder (created automatically); after that, it remembers wherever you last saved. At a technical level, presets are just portable files (`.floe-preset`) arranged into folders on your computer. You can rename and organise them as you wish using your usual file browser (Finder, File Explorer, etc.) - Floe automatically detects changes in its [preset folders](/docs/usage/folders) and immediately displays the new hierarchy on the preset browser. The name of the preset file is the name you see in Floe's preset browser. The description and tags are stored inside the preset file itself and can only be edited by using Floe to save over the preset. Presets are tiny files - typically just a few kilobytes in size. Even whole banks of presets take up very little disk space. ## Preset banks A _preset bank_ is a small extension to Floe's preset system. Some folders are marked as 'banks' and contain some more [metadata](/docs/develop/develop-preset-packs) such as a description and version. 'Music Box Suite Factory Presets' is a preset bank, for example. (Floe also automatically identifies some well-known factory preset banks that existed before the banks system was added, even without a metadata file present.) --- # Randomisation > How to use Floe's randomisation features to explore new sounds ## Random Variation (PERFORM page) ![The Random Variation strip on the PERFORM page](/images/screenshots/perform-variation-strip.png) The PERFORM page hosts the **Random Variation** strip. Click anywhere on the strip to generate a new variation of the current sound. Where you click matters: - **Further left** stays close to the current preset — small, related tweaks. - **Further right** strays much further — wilder instrument swaps, more effects toggled, bigger parameter moves. Hovering the strip shows a percentage and a short description: _small_, _medium_, _large_, _huge_, or _extreme variation_. The shuffle icon at the left of the strip repeats the most recent amount, so you can keep rolling fresh variations at the same intensity without having to re-click the strip. A Random Variation is built from the last loaded presets — its instruments, parameter values, effects, and macros — rather than from scratch. Concretely, it may: - **Swap instruments**: each layer's instrument is replaced with another one. Closer matches (same library or folder, overlapping tags) are favoured; the strip position controls how far the picker is allowed to roam. - **Add or remove layers**: blank layers may be filled in; populated layers may occasionally be cleared. Filling in is much more likely than emptying out, so wilder variations tend to add detail rather than thin the sound. - **Nudge macros**: a subset of your active [macros](/docs/usage/macros) is shifted by a moderate-to-large amount, picking up the rest of the patch with them. - **Toggle effects**: a small number of effects are flipped on or off — newly enabled effects get a fresh set of randomised parameters (within safe ranges, so you won't get a sudden +30 dB gain blast). - **Shift octaves**: occasionally a layer is transposed up or down an octave or two for flavour. Every variation creates a single undo step, so you can roll variations rapidly and step back to the previous state with the undo button in the top bar. ## All-layers instrument shuffle (LAYERS page) The LAYERS page has a **shuffle button** in the top-right that loads a random instrument into every layer in one go. It's equivalent to clicking each layer's individual shuffle button (see below) in turn. Each layer's selection honours that layer's own browser filters, so if one layer is filtered to a specific library and another to a specific tag, the shuffle respects both at once. ## Per-layer instrument shuffle (LAYERS page) Each layer has its own shuffle button in the layer top controls. It loads a random instrument into that layer only, based on the currently selected filters in that layer's [instrument browser](/docs/usage/browsers). For example, filter a layer to the _Music Box Suite_ library and the layer shuffle will only pick instruments from there. The left/right arrows next to the shuffle button step through the same filtered list one item at a time. ## Effects shuffle (EFFECTS page) The EFFECTS page has a shuffle button in the top-right of the tab bar. It **randomly turns each effect on or off** and **shuffles their order in the rack**. Parameter values inside each effect are left alone, so anything you've dialled in is preserved when an effect is re-enabled later. If you do want more dramatic effect changes — including new internal parameter values — use the [Random Variation](#random-variation-perform-page) strip on the PERFORM page; it'll touch effects as part of the broader patch variation. ## Impulse response shuffle The Convolution Reverb effect's impulse response selector has a shuffle button alongside its menu. Click it to load a random impulse response, honouring the currently selected filters in the [IR browser](/docs/usage/browsers). ## Preset browser shuffle The Presets browser, like every browser, has its own shuffle button to load a random preset from the currently filtered results. The same controls are duplicated above the browser on the main GUI so you can shuffle without opening the browser. Use the filters in the browser to narrow down what _random_ means — for example, only ambient presets from a chosen library. ## Tips - Use browser filters to keep the browser-based shuffles within a chosen library, folder, or tag. - Use the undo button in the top bar to step back through variations — every roll is a single undoable change. --- # Reproducibility > How to make Floe's playback exactly reproducible in a DAW ## At a glance 1. Reset on transport is on by default, so every DAW render of your track already comes out the same. 2. For finer-grained control within a render, set a Reset keyswitch — a MIDI note that restarts the variation wherever you send it (for example, before each MIDI pattern). 3. Pick a Seed to choose which variation plays back; the same seed always produces the same performance. ## Background Floe has several elements that vary between performances, including: - Round robin sample selection - The granular engine's randomised grain properties - The LFO's random waveforms (Random Steps and Random Glide) - Other smaller sources of variation throughout the engine Left alone, these would drift between plays. The Instance Config panel is where you control them — open it from the top-panel menu (the three-dots button). ![Instance Config Panel GUI](/images/screenshots/instance-config.png) ## How it works Although the variation feels random as you play, it actually follows a fixed sequence behind the scenes — round robins step through their samples in a set order, and the randomised elements are drawn from a fixed sequence too. Given the same notes and settings, Floe will always produce the same result, as long as it knows where to begin. By "the same notes" we mean every detail of how they're played: order, timing, length, and velocity all count. Any change between one play and the next sends the variation down a different path from that moment on. So to get a repeatable performance, you put a marker in the sand: a moment that tells Floe "start every variation sequence from here." Every time you hit that marker, Floe rewinds to the same starting point, and the performance that follows will be identical. ## Placing the marker Floe gives you two ways to set the marker — use either, or both at once. The difference is how fine-grained the control is. - Reset on transport — the marker is placed each time the DAW transport starts playing. Enabled by default. There's only one moment of control (the start of playback), but it's enough to make every render of your track come out the same. - Reset keyswitch — a MIDI note that places the marker whenever you send it. Drop a keyswitch before each MIDI pattern and the variation restarts at every one of them, giving you fine-grained control over where reproducibility kicks in. The note itself is consumed and does not trigger any sound. Shown as a blue marker on the on-screen keyboard. ## Seed The seed is a number that picks the starting point for Floe's variation. Each seed gives a different round robin starting position and a different sequence of randomised choices — and the same seed always reproduces the same performance. To explore alternatives, change the seed and replay the same notes; you'll hear a different result that is itself fully reproducible. ## Tips - Reproducibility runs forwards, not backwards. If you're improvising and a particular take sounds great, there's no way to recapture the variation you just heard — Floe doesn't record the path it took. Decide on the part first, then audition seeds against it until you find one that fits. - These settings belong to this specific instance of Floe rather than being a global preference, and they are saved with your DAW session. Loading a preset leaves them untouched, so you can audition presets without losing your reproducibility setup. Different instances in the same project can use different settings. - A single instance only has one seed, so every marker hit within that instance uses the same one. If a seed sounds great under one section of your track but wrong under another, you can either hunt for a seed that works across all your reset points, or load a second instance of Floe for the section that needs its own variation.