; BROWSER QUICKSEARCH ; -> Type a short abbreviation and the script finds and loads the plugin from Ableton's browser. ; !! Required to add custom tags in the browser. This script works by typing really fast. If you interfere, sometimes keys get fired into the wrong context and mess up stuff. Use at your own risk! #Requires AutoHotkey v2.0 #SingleInstance Force SendMode("Input") SetWorkingDir(A_ScriptDir) SetTitleMatchMode(2) global SearchSleepMs := 300 #HotIf WinActive("ahk_class Ableton Live Window Class") ; ================================================================== ; HOTSTRING EXAMPLES (type the abbreviation, it auto-expands) ; ================================================================== ; Built-in Ableton devices (two tags: Device + Ableton) ::glue:: { SearchAndInsertTaggedPlugin("Device", "Ableton", "Glue Compressor", 0) } ::eq8:: { SearchAndInsertTaggedPlugin("Device", "Ableton", "EQ Eight", 0) } ::over:: { SearchAndInsertTaggedPlugin("Device", "Ableton", "Overdrive", 0) } ; Third-party VST3 plugins (two tags: vendor + VST3) ::q4:: { SearchAndInsertTaggedPlugin("FabFilter", "VST3", "Pro-Q 4", 1) } ::mb:: { SearchAndInsertTaggedPlugin("FabFilter", "VST3", "Pro-MB", 1) } ::ds:: { SearchAndInsertTaggedPlugin("FabFilter", "VST3", "Pro-DS", 1) } ::ser:: { SearchAndInsertTaggedPlugin("XFer Records", "AutoHotKey", "Serum 2", 1) } ::kon:: { SearchAndInsertTaggedPlugin("Native Instruments", "VST3", "Kontakt 8", 1) } ::dec:: { SearchAndInsertTaggedPlugin("Soundtoys", "VST3", "Decapitator", 1) } ::val:: { SearchAndInsertTaggedPlugin("Valhalla DSP", "VST3", "ValhallaRoom", 1) } ; Presets with a custom tag ::myrack:: { SearchAndInsertTaggedPlugin("Preset", "AutoHotKey", "Your Favorite Rack.adg", 1) } #HotIf ; ------------------------------------------------------------------ ; HOW TAGS WORK: ; Ableton's browser lets you search by tags using the # prefix. ; You can use TWO tags to narrow down results, for example: ; #Device #Ableton → only Ableton built-in devices ; #FabFilter #VST3 → only FabFilter VST3 plugins ; #Preset #AutoHotKey → only presets you tagged "AutoHotKey" ; ; The `downArrow` parameter lets you pick a specific result when ; the search returns more than one match. Set it to 0 if the search ; string is unique enough to always land on the right result. ; ; BEST PRACTICE: Create a custom tag (e.g. "AutoHotKey") in Ableton ; and assign it to every plugin you want to load via hotkey. That way ; each search always returns exactly one result and you can set ; downArrow to 0 for a clean one-shot insert. ; ------------------------------------------------------------------ ; ================================================================== ; SEARCH FUNCTIONS ; ================================================================== ; Two-tag search (for hotstrings): ; Uses two #tag entries to narrow results, then types the plugin name. SearchAndInsertTaggedPlugin(tag1, tag2, pluginName, downArrow := 0) { global SearchSleepMs BlockInput("On") Send("{#}" tag1) Sleep(SearchSleepMs) Send("{Enter}") Sleep(SearchSleepMs) Send("{#}" tag2) Sleep(SearchSleepMs) Send("{Enter}") Sleep(SearchSleepMs) Send(pluginName) Sleep(SearchSleepMs) Loop downArrow { Send("{Down}") Sleep(SearchSleepMs) } Send("{Enter}") Sleep(SearchSleepMs) Send("{Esc}") BlockInput("Off") } ; Single-tag search (for F-key bindings): ; Opens the browser search, applies one custom tag, types the plugin name. AddTaggedPlugin(tag, pluginName, downArrow) { BlockInput("On") sleepTime := 300 Send("^f") Sleep(sleepTime) Send("{Esc}") Sleep(sleepTime) Send("^f") Sleep(sleepTime) Send("{#}" tag) Send("{Enter}") Sleep(sleepTime) Send(pluginName) Sleep(sleepTime) Send("{Enter}") Sleep(sleepTime) Loop downArrow { Send("{Down}") Sleep(sleepTime) } Send("{Enter}") Sleep(sleepTime) Send("{Esc}") Sleep(sleepTime) Send("^!b") BlockInput("Off") } ; April 2026 — Released under MIT license by Yannis Lever ; This code is provided as-is with no warranty. Use at your own risk. ; Check out www.livehack.tools for more LiveHacks!