{"id":44691346,"url":"https://github.com/tucktuckg00se/intersect","last_synced_at":"2026-04-25T11:01:23.836Z","repository":{"id":338405721,"uuid":"1157741106","full_name":"tucktuckg00se/INTERSECT","owner":"tucktuckg00se","description":"A nondestructive, time-stretching, and intersecting sample slicer plugin with independent per-slice parameter control.","archived":false,"fork":false,"pushed_at":"2026-04-19T01:11:45.000Z","size":13798,"stargazers_count":225,"open_issues_count":3,"forks_count":12,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-04-19T03:16:55.554Z","etag":null,"topics":["au-plugin","audio-plugin","audio-sampler","juce-framework","linux","macos","music-production","vibe-coded","vst-plugin","vst3","windows"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tucktuckg00se.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"buy_me_a_coffee":"tucktuckgoose","github":"tucktuckg00se"}},"created_at":"2026-02-14T08:09:38.000Z","updated_at":"2026-04-18T20:12:28.000Z","dependencies_parsed_at":"2026-02-24T05:00:41.404Z","dependency_job_id":"83e73c02-932e-4539-b4f1-0f81e0544e4d","html_url":"https://github.com/tucktuckg00se/INTERSECT","commit_stats":null,"previous_names":["tucktuckg00se/intersect"],"tags_count":50,"template":false,"template_full_name":null,"purl":"pkg:github/tucktuckg00se/INTERSECT","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tucktuckg00se%2FINTERSECT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tucktuckg00se%2FINTERSECT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tucktuckg00se%2FINTERSECT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tucktuckg00se%2FINTERSECT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tucktuckg00se","download_url":"https://codeload.github.com/tucktuckg00se/INTERSECT/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tucktuckg00se%2FINTERSECT/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32259472,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T09:15:33.318Z","status":"ssl_error","status_checked_at":"2026-04-25T09:15:31.997Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["au-plugin","audio-plugin","audio-sampler","juce-framework","linux","macos","music-production","vibe-coded","vst-plugin","vst3","windows"],"created_at":"2026-02-15T07:11:29.974Z","updated_at":"2026-04-25T11:01:23.825Z","avatar_url":"https://github.com/tucktuckg00se.png","language":"C++","funding_links":["https://buymeacoffee.com/tucktuckgoose","https://github.com/sponsors/tucktuckg00se"],"categories":[],"sub_categories":[],"readme":"# INTERSECT\n\n**Support development:** [Sponsor on GitHub](https://github.com/sponsors/tucktuckg00se) · [Buy me a coffee](https://buymeacoffee.com/tucktuckgoose)\n\nINTERSECT is a sample slicer instrument plugin (VST3/AU/Standalone) with multi-sample sessions, per-slice locking, slice note ranges, multiple time/pitch algorithms, and MIDI-triggered slice playback.\n\n![INTERSECT screenshot](.github/assets/screenshot.png)\n*Theme shown: Open Color (`oc.intersectstyle`)*\n\n## Table of Contents\n\n- [Quick Start](#quick-start)\n- [Installation](#installation)\n- [Workflow Basics](#workflow-basics)\n- [Interface Layout](#interface-layout)\n- [Controls and Shortcuts Reference](#controls-and-shortcuts-reference)\n- [MIDI Controller Routing (NRPN)](#midi-controller-routing-nrpn)\n- [Theme Customization](#theme-customization)\n- [Build from Source](#build-from-source)\n- [Dependencies](#dependencies)\n- [License](#license)\n- [Support / Known Limitations](#support--known-limitations)\n\n## Quick Start\n\n[Watch the Quick Start Guide on YouTube](https://youtu.be/zsdtyIff2PQ)\n\n## Installation\n\nDownload the latest release zip from [Releases](https://github.com/tucktuckg00se/INTERSECT/releases), then place plugin files in your system plugin folders.\n\n### Try the experimental GPU stem separation pre-release\n\nA v0.14.0 release candidate with downloadable GPU runtime bundles is available for testing: **[INTERSECT v0.14.0-rc.1](https://github.com/tucktuckg00se/INTERSECT/releases/tag/v0.14.0-rc.1)**.\n\nThis pre-release adds GPU stem separation via on-demand ONNX Runtime bundles. If you try it on Windows DirectML, AMD MIGraphX, Intel macOS, or CoreML on Apple Silicon, please report your OS, GPU, runtime selection, and any issues [issue #31](https://github.com/tucktuckg00se/INTERSECT/issues/31).\n\n### Release package contents\n\n| Platform | Minimum OS | Included binaries |\n| --- | --- | --- |\n| Windows x64 | Windows 10 | `INTERSECT.vst3`, `INTERSECT.exe` |\n| Linux x64 | Ubuntu 22.04  or equivalent (glibc 2.35+) | `INTERSECT.vst3`, `INTERSECT` (standalone) |\n| macOS arm64 | macOS 10.13 (High Sierra) | `INTERSECT.vst3`, `INTERSECT.component`, `INTERSECT.app` |\n| macOS x64 | macOS 10.13 (High Sierra) | `INTERSECT.vst3`, `INTERSECT.component`, `INTERSECT.app` |\n\n### Plugin install paths\n\n| Format | Windows | macOS | Linux |\n| --- | --- | --- | --- |\n| VST3 | `C:\\Program Files\\Common Files\\VST3\\` | `~/Library/Audio/Plug-Ins/VST3/` | `~/.vst3/` |\n| AU | n/a | `~/Library/Audio/Plug-Ins/Components/` | n/a |\n\nAfter copying files, rescan plugins in your DAW.\n\n### macOS unsigned build note\n\nIf macOS reports that INTERSECT is damaged or blocked, clear quarantine flags:\n\n```bash\nxattr -cr ~/Library/Audio/Plug-Ins/VST3/INTERSECT.vst3\nxattr -cr ~/Library/Audio/Plug-Ins/Components/INTERSECT.component\nxattr -cr /Applications/INTERSECT.app\n```\n\n## Workflow Basics\n\n1. **Multi-sample session:** INTERSECT can load and concatenate multiple audio files per instance (`.wav`, `.ogg`, `.aiff`, `.flac`, `.mp3`). `LOAD` replaces the session, `APPEND` adds more files to the current session.\n2. **Current editor layout:** header bar, sample lane, slice lane, waveform, time/zoom bar, action bar, and bottom signal-chain editor.\n3. **Slice creation:** draw slices manually, chop live with **LAZY**, or split a selected slice via **AUTO**.\n4. **Inheritance model:** `GLOBAL` in the Signal Chain edits sample defaults. `SLICE` edits the selected slice and locks fields that diverge from the global value.\n5. **Playback model:** MIDI triggers slices by note mapping. A slice belongs to one loaded sample, but playback and editing happen on the concatenated session timeline. A slice can respond to one note or a `LOW`-to-`HIGH` range, with `ROOT` defining the transposition center for that slice. Mute groups can choke voices in the same group.\n6. **Algorithms:**\n   - `Repitch`: pitch and speed are linked. `MODE` switches the playback interpolation between `Linear` and `Cubic`.\n   - `Signalsmith`: independent time/pitch via Signalsmith Stretch (`TONAL`, `FMNT`, `FMNT C`).\n   - `Bungee`: granular stretch mode with `GRAIN` choices (`Fast`, `Normal`, `Smooth`).\n7. **Repitch + Stretch interaction:** when `ALGO=Repitch` and `STRETCH=ON`, `PITCH` and `TUNE` become BPM-driven read-only displays.\n8. **SET BPM:** available in the Time/Pitch module for both `GLOBAL` and `SLICE`; it calculates BPM from musical duration.\n9. **Filter model:** the filter is per-voice and resolves its settings at note-on. Cutoff changes affect newly triggered notes immediately, but do not retarget voices that are already playing.\n10. **Filter envelope amount:** `AMT` is measured in semitones, so `+12 st` means the envelope can push cutoff up by one octave and `-12 st` means one octave down. This stays consistent across low and high base cutoff values.\n11. **Key tracking:** `KEY` is a percentage of note tracking. `0%` ignores note pitch, `100%` makes cutoff follow pitch at full keyboard scaling, and intermediate values blend between them. In slice range mode, tracking follows the slice `ROOT` note.\n12. **Drive:** `DRIVE` is pre-filter saturation. It adds harmonics before the filter rather than simply turning the signal up.\n13. **Drive asymmetry:** `ASYM` biases the drive waveshaper to produce even-harmonic saturation, adding a warmer, tube-like character. A DC blocker engages automatically when asymmetry is above zero.\n14. **Loop crossfade:** `FADE` smooths loop and ping-pong seams with equal-power crossfading. It is active only when `LOOP` is not `OFF`.\n15. **Load behavior:** file decoding/loading is asynchronous (off the audio thread).\n16. **Undo/redo:** snapshot-based history for slice and parameter edits.\n17. **MIDI host stop handling:** responds to `All Notes Off (CC 123)` and `All Sound Off (CC 120)`.\n\n## Interface Layout\n\n### Header Bar\n\n| Area | Function | Notes |\n| --- | --- | --- |\n| Status text | Shows warnings, errors, and missing-file notices | Click warning/error text to copy the message |\n| `UNDO` / `REDO` | History navigation | Same as `Ctrl/Cmd + Z` and `Ctrl/Cmd + Shift + Z` |\n| `PANIC` | Kills active voices immediately | Also stops lazy chop |\n| `LOAD` | Open file browser | Replaces the current session |\n| `APPEND` | Open file browser | Adds files to the current session |\n| `SET` | Popup for theme, UI scale, and NRPN settings | Also shows current plugin version |\n\n### Sample Lane, Slice Lane, and Waveform\n\n| Area | Function | Notes |\n| --- | --- | --- |\n| Sample lane | Compact session-sample overview above the slice lane | Reflects selection and zoom; drag to reorder samples; includes per-sample `STEMS` / `CANCEL` and delete buttons |\n| Slice lane | Compact slice-region overview above the waveform | Reflects selection and zoom |\n| Waveform | Main editing surface | Drag-and-drop loading/appending, slice selection, boundary editing, move/duplicate, preview |\n| Overlay hints | Contextual help and action prompts | Used by `ADD`, `AUTO`, and other actions |\n| Playback cursors | Voice-position display | Shows active playheads |\n| Transient preview markers | Auto Chop preview | Dashed markers shown before applying transient split |\n\n## Stem Separation\n\n1. Click a sample's `STEMS` button in the sample lane.\n2. Choose the model, output folder, device, and which stems to export.\n3. Start the export from the overlay panel.\n\nNotes:\n- Stem separation runs on the selected session sample and writes the exported stems to the chosen folder.\n- While a stem export is running, that sample's `STEMS` button changes to `CANCEL`.\n- `DEVICE` defaults to CPU. GPU can be selected when the build and local runtime support it.\n- If INTERSECT cannot use the selected GPU path, it warns before export so you can switch devices instead of silently exporting on CPU.\n- Stem separation is compute-heavy. On older PCs, especially on CPU exports, startup and processing can be noticeably slower.\n\n### Time / Zoom Bar\n\n| Area | Function | Notes |\n| --- | --- | --- |\n| Time ruler | Shows time markings for the current view | Updates with zoom level |\n| Drag horizontally | Scroll | Uses the current zoom level |\n| Drag vertically | Zoom | Anchored to the drag start position |\n\n### Action Bar\n\n| Button | Function | Notes |\n| --- | --- | --- |\n| `ADD` | Toggle draw-slice mode | Drag on the waveform to create a slice |\n| `LAZY` / `STOP` | Start/stop real-time lazy chopping | Label changes while active |\n| `AUTO` | Open/close Auto Chop panel | Requires a selected slice |\n| `COPY` | Duplicate selected slice | Equivalent to duplicate command |\n| `DEL` | Delete selected slice or selected sample | Uses the last lane you interacted with |\n| `ZX` | Snap edits to nearest zero crossing | Toggle |\n| `FM` | Follow MIDI note selection | Auto-selects the played slice |\n| `RESEQ` | Resequence slice MIDI notes | Opens overlay with `BY POSITION` and `AS CREATED` modes; requires 2+ slices |\n\n### Signal Chain Bar\n\nThe bottom bar is the main parameter editor. It has four modules: `TIME/PITCH`, `FILTER`, `AMP`, and `PLAYBACK`.\n\n**Collapsed mode** (default): `GLOBAL` and `SLICE` tabs switch between scopes, with one parameter strip visible at a time.\n\n**Expanded mode**: shows both strips simultaneously — slice on top, global below — with no tabs. Click the chevron toggle on the right edge of the context bar to switch between modes.\n\n**Context bar** (bottom edge):\n- `SLICES` count and the global `ROOT` note are always visible on the right. The global `ROOT` is editable only when no slices exist.\n- When a slice is selected: slice sample range, length, a `NOTE`/`RANGE` toggle, numeric note controls, read-only note names, and override count.\n\nGeneral behavior:\n- Drag up/down on a value to edit it.\n- Double-click a value to type it directly.\n- In `SLICE` mode, editing a field locks that field for the selected slice when it differs from the global value.\n- In `SLICE` mode, clicking a locked field label or right-clicking the field clears that override.\n\n## Controls and Shortcuts Reference\n\n### Header Bar\n\n| Control | Function | Notes |\n| --- | --- | --- |\n| Status text | Copy warning/error message | Only active when a warning or error is being shown |\n| `UNDO / REDO` | History navigation | Buttons in the header |\n| `PANIC` | Kill active voices immediately | Also stops lazy chop |\n| `LOAD` | Open file chooser | Replaces the current session |\n| `APPEND` | Open file chooser | Adds files to the current session |\n| `SET` | Theme, scale, and NRPN popup | Theme chooser, `+/- 0.25` scale, and NRPN settings |\n\n### Signal Chain Bar\n\n#### Context Bar\n\n| Control | Function | Notes |\n| --- | --- | --- |\n| `SLICES` | Slice count | Always visible on the right side of the context bar |\n| Global `ROOT` | Root note for new slices | Always visible on the right side of the context bar; editable only before any slices exist |\n\n#### Time/Pitch Module\n\n| Control | Function | Notes |\n| --- | --- | --- |\n| `BPM` | Tempo reference | `20` to `999` |\n| `SET BPM` | Calculate BPM from duration menu | 16 bars to 1/16 note |\n| `PITCH` | Semitone shift | `-48` to `+48 st` |\n| `TUNE` | Fine detune | `-100` to `+100 ct` |\n| `ALGO` | Playback algorithm | `Repitch`, `Signalsmith`, `Bungee` |\n| `MODE` | Repitch interpolation mode | `Repitch` only: `Linear` or `Cubic` |\n| `TONAL` | Tonality limit | Signalsmith only |\n| `FMNT` | Formant shift | Signalsmith only |\n| `FMNT C` | Formant compensation | Signalsmith only |\n| `GRAIN` | Grain mode | Bungee only: `Fast`, `Normal`, `Smooth` |\n| `STRETCH` | Tempo-sync stretch toggle | Works with the selected algorithm |\n\nTime/Pitch notes:\n- When `ALGO=Repitch` and `STRETCH=ON`, `PITCH` and `TUNE` become BPM-derived read-only displays.\n- In `SLICE` mode, the context row also exposes the selected slice's `NOTE`/`RANGE` mapping.\n\n#### Slice Context Row\n\n| Control | Function | Notes |\n| --- | --- | --- |\n| `NOTE / RANGE` | Switch between single-note and note-range triggering | Slice-only, shown in the context bar |\n| `NOTE` | Single trigger note | Shown only in note mode; drag to edit |\n| `LOW` | Lowest note in the trigger range | Shown only in range mode |\n| `HIGH` | Highest note in the trigger range | Shown only in range mode |\n| `ROOT` | Transposition and filter key-track reference note for the slice | Shown only in range mode |\n| Note name text | Read-only pitch name display | Appears after the numeric field(s) and is not draggable |\n\n#### Filter Module\n\n| Control | Function | Notes |\n| --- | --- | --- |\n| `ON` | Enable/disable the filter | Per-voice filter toggle |\n| `TYPE` | Filter mode | `LP`, `HP`, `BP`, `NT` |\n| `SLOPE` | Filter steepness | `12 dB` or `24 dB` |\n| `CUT` | Base cutoff frequency | Displayed in Hz |\n| `RESO` | Resonance amount | Higher values emphasize the cutoff region |\n| `DRIVE` | Pre-filter saturation | Adds harmonics before filtering |\n| `ASYM` | Drive asymmetry | Biases waveshaper toward even harmonics for a warmer tone |\n| `KEY` | Key tracking amount | `0-100%`, relative to the slice/root note mapping |\n| `ATK / DEC / SUS / REL` | Filter envelope shape | Separate from the amp envelope |\n| `AMT` | Filter envelope depth | Bipolar semitone offset (`st`) applied to cutoff |\n\nFilter notes:\n- Start with `ON`, `TYPE=LP`, modest `RESO`, and a lower `CUT` to hear the filter clearly.\n- Raise `DRIVE` if you want a dirtier or more aggressive tone before the filter stage. Add `ASYM` to bias the saturation toward even harmonics for a warmer, tube-like character.\n- Use `KEY` when you want higher MIDI notes to sound brighter and lower notes darker. In slice range mode, the filter tracks from that slice's `ROOT` note.\n- Use positive `AMT` for a classic opening filter envelope and negative `AMT` for an inverted sweep.\n- `AMT` is in semitones because it controls octave-style movement of cutoff. `+12 st` doubles the cutoff, `-12 st` halves it.\n- Filter settings resolve at note-on, so changing cutoff while a note is already playing affects the next note rather than re-tuning the current voice.\n\n#### Amp Module\n\n| Control | Function | Notes |\n| --- | --- | --- |\n| `ATK / DEC / SUS / REL` | Amp envelope | Standard ADSR for voice level |\n| `TAIL` | Release-tail toggle | Allows playback to continue past slice boundary during release |\n| `GAIN` | Output gain | `-100` to `+24 dB` |\n\n#### Playback Module\n\n| Control | Function | Notes |\n| --- | --- | --- |\n| `REV` | Reverse playback | Toggle |\n| `LOOP` | Loop mode | `OFF`, `LOOP`, `PP` |\n| `FADE` | Loop crossfade amount | Active when `LOOP` is `LOOP` or `PP` |\n| `MUTE` | Mute group | Voices in the same group choke each other |\n| `1SHOT` | One-shot playback | Ignores note-off until the slice ends |\n| `OUT` | Output bus | `SLICE` mode only, `1` to `16` |\n| `VOICES` | Max playable voices | `GLOBAL` mode only, `1` to `31` |\n\n### Action Bar\n\n| Button | Function |\n| --- | --- |\n| `ADD` | Toggle draw-slice mode (shows a waveform hint to drag and create a slice) |\n| `LAZY` / `STOP` | Start/stop real-time lazy chopping |\n| `AUTO` | Open Auto Chop panel for the selected slice (prompts you to select a slice first if none is selected) |\n| `COPY` | Duplicate selected slice |\n| `DEL` | Delete the selected slice, or the selected sample when the sample lane was the last thing clicked |\n| `ZX` | Snap edits to nearest zero crossing |\n| `FM` | Follow MIDI (auto-select played slice) |\n| `RESEQ` | Resequence MIDI note assignments (opens overlay with `BY POSITION` or `AS CREATED`) |\n\n### Auto Chop Panel\n\nRequires a selected slice before opening.\n\nAll three parameter cells support drag-to-edit (drag up/down) and double-click text entry.\n\n| Control | Function |\n| --- | --- |\n| `SENS` | Transient detection threshold (`0–100%`) with live marker preview |\n| `MIN` | Minimum slice length (`20–500 ms`) — suppresses transients too close together |\n| `SPLIT TRANSIENTS` | Split selected slice at detected transients |\n| `DIV` | Equal split count (`2–128`) |\n| `SPLIT EQUAL` | Split selected slice into equal divisions |\n| `CANCEL` | Close panel without applying |\n\n### Waveform and Mouse Gestures\n\n| Gesture | Result |\n| --- | --- |\n| Drag-and-drop file | Load sample session |\n| Drag-and-drop file onto loaded session | Append to current session |\n| Click sample in sample lane | Select sample |\n| Drag sample in sample lane | Reorder session samples |\n| Click slice | Select slice |\n| Click empty waveform in `ADD` mode | Begin draw-slice gesture |\n| Drag `S` / `E` edge handles | Resize selected slice |\n| Drag inside selected slice | Move slice |\n| `Ctrl` + drag selected slice | Duplicate slice to new position |\n| `Alt` + drag waveform | Temporary draw-slice gesture |\n| Press `ADD` / `Shift + A` | Enters draw mode and shows an on-waveform hint |\n| `Shift` + click waveform | Preview from clicked sample position |\n| Mouse wheel | Cursor-anchored zoom |\n| `Shift` + mouse wheel | Horizontal scroll |\n| Middle-button drag | Combined horizontal scroll + vertical zoom |\n| Drag in time / zoom bar | Horizontal drag scrolls, vertical drag zooms |\n\n### Keyboard Shortcuts\n\n| Shortcut | Action |\n| --- | --- |\n| `Ctrl/Cmd + Z` | Undo |\n| `Ctrl/Cmd + Shift + Z` | Redo |\n| `Shift + A` | Toggle `ADD` mode |\n| `Shift + Z` | Toggle `LAZY` / `STOP` |\n| `Shift + C` | Toggle Auto Chop panel |\n| `Shift + D` | Duplicate selected slice |\n| `Delete` / `Backspace` | Delete selected slice, or selected sample when the sample lane was the last thing clicked |\n| `Shift + X` | Toggle `ZX` |\n| `Shift + F` | Toggle `FM` |\n| `Right Arrow` or `Tab` | Select next slice |\n| `Left Arrow` or `Shift + Tab` | Select previous slice |\n| `Esc` | Close Auto Chop panel |\n\nSingle-letter action shortcuts are intentionally unbound so DAW keyboard-MIDI note entry remains available.\n\n## MIDI Controller Routing (NRPN)\n\nINTERSECT supports NRPN-based slice editing from a hardware or software MIDI controller. Enable it via the **SET** button in the header bar — the popup contains an NRPN section with channel and consume options.\n\n**Controller requirements:** The controller must have **endless rotary encoders** (not fixed-range knobs) and must support NRPN mode with configurable MSB/LSB address values. Crucially, it must send **relative** data bytes — CC 96 (Data Increment) and CC 97 (Data Decrement) — one step per click. Controllers that only send absolute values (CC 6 Data Entry) will not work, nor will standard fixed-range knobs. Examples include the Akai MPD32 and MPD218. Results may vary.\n\nSelect the slice to edit by enabling **FM** (Follow MIDI) and playing its MIDI note. Then use the start/end knobs to adjust the slice boundaries. Commit happens automatically ~300ms after the knob stops moving — the same feel as releasing a parameter slider. Zoom in for finer control; each knob step moves `viewWidth / 16383` samples.\n\n### NRPN Parameter Table\n\nNRPN numbers use CC 99 (MSB address) / CC 98 (LSB address) to select the parameter, then CC 96 (Data Increment) or CC 97 (Data Decrement) to send a ±1 step. No absolute-value data bytes (CC 6/38) are used.\n\nWhen programming a hardware controller, set the knob to **NRPN mode** with **MSB 64** and the LSB from the table below.\n\n| NRPN | MSB | LSB | Name | Direction | Notes |\n| --- | --- | --- | --- | --- | --- |\n| 8193 | 64 | 1 | Zoom | CC 96 / CC 97 | Zoom in / out |\n| 8194 | 64 | 2 | Slice start | CC 96 / CC 97 | Each step = viewWidth / 16383 samples |\n| 8195 | 64 | 3 | Slice end | CC 96 / CC 97 | Each step = viewWidth / 16383 samples |\n\n### SET Button — NRPN Settings\n\nOpen with the **SET** button in the header bar.\n\n| Control | Function |\n| --- | --- |\n| `NRPN` | Enable/disable NRPN slice editing |\n| `CONSUME CCs` | Strip NRPN edit CCs from MIDI output so they don't reach downstream instruments |\n| `CH −` / `CH +` | MIDI channel filter (0 = omni) |\n\nSettings are saved to the INTERSECT settings file alongside theme and UI scale.\n\n### DAW-specific notes\n\n**Ableton Live:** NRPN control does not work in Ableton Live. Ableton intercepts the CC 96/97 data-increment bytes before they reach the plugin, so the plugin only ever sees the address bytes (CC 98/99) and can never fire an event. This is an Ableton routing limitation with no known workaround on the plugin side.\n\n**REAPER / Bitwig:** Route a MIDI track to the plugin instance as normal. No additional configuration is needed; all CC messages are forwarded to the plugin.\n\n## Theme Customization\n\nINTERSECT supports custom `.intersectstyle` themes. On first launch it creates default `dark.intersectstyle` and `light.intersectstyle` in the user theme directory.\n\n| OS | Theme folder |\n| --- | --- |\n| Windows | `%APPDATA%\\Roaming\\INTERSECT\\themes\\` |\n| macOS | `~/Library/Application Support/INTERSECT/themes/` |\n| Linux | `~/.config/INTERSECT/themes/` |\n\nCreate a custom theme:\n\n1. Copy one of the starter files from [`themes/`](themes/) and rename it, for example `mytheme.intersectstyle`.\n2. Set a unique `name:` value (used in the UI theme list).\n3. Edit colors as 6-digit hex `RRGGBB`.\n4. Place the file in your user theme folder.\n5. Restart the plugin, then use the **SET** button in the header to select the theme.\n\nThe **SET** button popup also controls interface scale (`0.5x` to `3.0x` in `0.25` steps).\n\n## Build from Source\n\n### Prerequisites\n\n- CMake `3.22+`\n- C++20 compiler\n- Git\n\n### Platform setup\n\nPick your platform below to install the required toolchain and libraries, then follow the shared **Clone and build** steps.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eWindows\u003c/strong\u003e\u003c/summary\u003e\n\n1. Install [Visual Studio 2022](https://visualstudio.microsoft.com/vs/community/) (Community edition is free).\n   During installation, select the **\"Desktop development with C++\"** workload.\n2. Install [CMake](https://cmake.org/download/) (add to PATH during install) and [Git](https://git-scm.com/download/win).\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003emacOS\u003c/strong\u003e\u003c/summary\u003e\n\n1. Install Xcode Command Line Tools:\n   ```bash\n   xcode-select --install\n   ```\n2. Install CMake via [Homebrew](https://brew.sh/):\n   ```bash\n   brew install cmake\n   ```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eLinux — Debian / Ubuntu\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\nsudo apt update\nsudo apt install -y build-essential cmake git libasound2-dev libfreetype-dev \\\n  libx11-dev libxrandr-dev libxcursor-dev libxinerama-dev \\\n  libwebkit2gtk-4.1-dev libcurl4-openssl-dev\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eLinux — Fedora\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\nsudo dnf install -y gcc-c++ cmake git alsa-lib-devel freetype-devel \\\n  libX11-devel libXrandr-devel libXcursor-devel libXinerama-devel \\\n  webkit2gtk4.1-devel libcurl-devel\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eLinux — Arch\u003c/strong\u003e\u003c/summary\u003e\n\n```bash\nsudo pacman -S --needed base-devel cmake git alsa-lib freetype2 \\\n  libx11 libxrandr libxcursor libxinerama webkit2gtk-4.1 curl\n```\n\n\u003c/details\u003e\n\n### Clone and build\n\n```bash\ngit clone --recursive https://github.com/tucktuckg00se/INTERSECT.git\ncd INTERSECT\ncmake -B build\ncmake --build build --config Release\n```\n\n### Build outputs\n\n- VST3: `build/Intersect_artefacts/Release/VST3/INTERSECT.vst3`\n- Standalone:\n  - Windows: `build/Intersect_artefacts/Release/Standalone/INTERSECT.exe`\n  - Linux: `build/Intersect_artefacts/Release/Standalone/INTERSECT`\n  - macOS: `build/Intersect_artefacts/Release/Standalone/INTERSECT.app`\n- AU (macOS): `build/Intersect_artefacts/Release/AU/INTERSECT.component`\n\n### Release workflow (repo maintainers)\n\nPushing a tag matching `v*` triggers the GitHub Actions release workflow, which builds and packages:\n\n- Windows x64\n- Linux x64\n- macOS arm64\n- macOS x64\n\n## Dependencies\n\n- [JUCE](https://github.com/juce-framework/JUCE) (git submodule)\n- [Signalsmith Stretch](https://github.com/Signalsmith-Audio/signalsmith-stretch) (MIT)\n- [Signalsmith Linear](https://github.com/Signalsmith-Audio/linear) (dependency of Signalsmith Stretch)\n- [Bungee](https://github.com/bungee-audio-stretch/bungee) (MPL-2.0)\n\n## License\n\nINTERSECT is licensed under the [GNU General Public License v3.0](LICENSE).\n\n## Support / Known Limitations\n\n- INTERSECT project recall stores sample file paths for every file in the session; if files move, relink is required.\n- Builds are unsigned; platform security prompts (especially macOS) may require manual trust/quarantine removal.\n- Report bugs or request features via GitHub Issues on this repository.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftucktuckg00se%2Fintersect","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftucktuckg00se%2Fintersect","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftucktuckg00se%2Fintersect/lists"}