Skip to content

feat: Add Browser API support#192

Open
Dandiggas wants to merge 2 commits intoideoforms:masterfrom
Dandiggas:feat/browser-api
Open

feat: Add Browser API support#192
Dandiggas wants to merge 2 commits intoideoforms:masterfrom
Dandiggas:feat/browser-api

Conversation

@Dandiggas
Copy link
Copy Markdown

Summary

Adds a new browser.py handler that exposes Live's Browser API via OSC, enabling programmatic loading of audio files and samples.

New Endpoints

Browser Navigation

Endpoint Description
/live/browser/get/user_folders List user folders in Places
/live/browser/get/samples List samples root items
/live/browser/list [path] List items at a browser path

Loading Files

Endpoint Description
/live/browser/load [path] Load item to current selection
/live/browser/load_to_slot [path, track, slot] Load directly to Session clip slot
/live/browser/load_to_arrangement [path, track, beat] Load to Arrangement view position

Preview

Endpoint Description
/live/browser/preview [path] Preview audio file
/live/browser/stop_preview Stop current preview

View Control (in application.py)

Endpoint Description
/live/application/get/focused_document_view Get current view (Session/Arranger)
/live/application/focus_view [name] Focus a view
/live/application/show_view [name] Show a view

Usage Example

# List user folders
client.send_message('/live/browser/get/user_folders', [])

# Load audio file to Session clip slot
client.send_message('/live/browser/load_to_slot', ['Downloads/Audio Files/kick.wav', 0, 0])

# Load to Arrangement at beat 16
client.send_message('/live/browser/load_to_arrangement', ['Samples/Drums/snare.wav', 1, 16])

Implementation Notes

  • Uses Live's Browser.load_item() API
  • load_to_slot sets highlighted_clip_slot to target Session view
  • load_to_arrangement switches to Arranger view and sets song position
  • Path navigation supports nested folders (e.g., Downloads/Audio Files/kick.wav)

Related

Addresses the browser API request in recent issues.

Testing

Tested with Ableton Live 12 on macOS.

Adds browser.py handler exposing Live's Browser API via OSC:

New endpoints:
- /live/browser/get/user_folders - List user folders in Places
- /live/browser/get/samples - List samples root items
- /live/browser/list [path] - List items at a browser path
- /live/browser/load [path] - Load item to current selection
- /live/browser/preview [path] - Preview audio file
- /live/browser/stop_preview - Stop preview
- /live/browser/load_to_slot [path, track, slot] - Load to specific Session clip slot
- /live/browser/load_to_arrangement [path, track, beat] - Load to Arrangement view

Also adds view control endpoints in application.py:
- /live/application/get/focused_document_view
- /live/application/focus_view [view_name]
- /live/application/show_view [view_name]

Closes #XX (Add browser API request)
@CLAassistant
Copy link
Copy Markdown

CLAassistant commented Mar 21, 2026

CLA assistant check
All committers have signed the CLA.

bimsonz added a commit to bimsonz/AbletonOSC that referenced this pull request Apr 5, 2026
Adds BrowserHandler with full browser integration for programmatic
control of Ableton's content browser. Combines and improves on ideas
from ideoforms#183, ideoforms#192, and ideoforms#191.

Endpoints (25):
- Load by name (10): load_instrument, load_drum_kit, load_audio_effect,
  load_midi_effect, load_effect, load_sound, load_sample, load_plugin,
  load_max_device, load_user_preset
- Load by target (2): load_to_slot (session view via highlighted_clip_slot),
  load_to_arrangement (arrangement view, best-effort positioning)
- Discovery (8): get/categories, get/children, search,
  list_audio_effects, list_midi_effects, list_sounds, list_plugins,
  list_user_presets
- Preview (2): preview, stop_preview
- Utility (3): refresh (cache invalidation), hotswap_start, hotswap_load

Key design decisions:
- Explicit track_index on all load endpoints for reliable programmatic use
- Tiered name matching: exact > case-insensitive > extension-stripped > substring
- Depth-limited recursive search (max_depth=4) for safety on large libraries
- Session view loading via highlighted_clip_slot for precise slot targeting
- Browser cache invalidation via filter_type toggle for detecting new content
- Common _load_from_categories helper to DRY up load-by-name pattern

Closes ideoforms#183, closes ideoforms#192, closes ideoforms#191
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants