Skip to content

[BUG] Several advertised tools call Live API members that don't exist (verified on Live 12.4) — group/freeze/annotation/fade/follow-action/MIDI-send are non-functional #3

Description

@ktkt40208

Thanks for open-sourcing this — the flat 1:1 LOM-over-TCP surface is handy, and the thread-safe queue design is nice.

While evaluating the tool surface I found that a group of advertised actions reference Live Object Model (LOM) members that don't exist in current Live, so they can never succeed. Because most are guarded with hasattr(...), they don't crash — they quietly return {"ok": false, "error": "... not available"} (and a few return {"ok": true} while doing nothing), so they're easy to miss in a smoke test.

How I verified

Introspected the live LOM on a running Ableton Live 12.4 (Song, Track, MixerDevice, Clip, DeviceParameter) and cross-checked against the official Cycling '74 LOM reference (docs.cycling74.com/apiref/lom/) and the Live 11 API doc archive.

Affected tools (grouped by root cause)

  1. Track Groupscreate_group_track, group_tracks call Song.create_group_track(), which does not exist. Song only exposes create_audio_track / create_midi_track / create_return_track / create_scene. Creating/ungrouping group tracks is not in the Live API at all (it's a UI-only command, Edit ▸ Group Tracks / Cmd-G) — so this can't be implemented, only documented. ungroup_track currently returns {"ok": true, "message": "Ungroup operation requested (may require manual implementation)"} without doing anything.

  2. Freeze / Flattenfreeze_track / unfreeze_track read/write Track.freeze_available and Track.freeze_state; the real members are Track.can_be_frozen (read-only) and Track.is_frozen (read-only), and there is no method to trigger freeze. flatten_track calls Track.flatten(), which doesn't exist.

  3. Track delayget_track_delay / set_track_delay use Track.delay, which doesn't exist.

  4. Annotationsget_track_annotation / set_track_annotation use Track.annotation; get_clip_annotation / set_clip_annotation use Clip.annotation. Neither Track nor Clip has an annotation member.

  5. Clip follow actionsget_clip_follow_action / set_clip_follow_action / set_follow_action_time use Clip.follow_action_A/B, follow_action_time, follow_action_chance_A/B. None of these exist on Clip. set_clip_follow_action returns {"ok": true, ...} even though the hasattr guards skip every assignment (false success).

  6. Clip fadesget_clip_fade_in / set_clip_fade_in / get_clip_fade_out / set_clip_fade_out use Clip.fade_in_time / Clip.fade_out_time, which don't exist on Clip (envelope fades live on Sample as sample_env_fade_in/out).

  7. MIDI sendsend_midi_cc / send_program_change call Song.send_midi(), which doesn't exist. (A Remote Script sends MIDI through the control-surface layer, not via Song.)

  8. Groove amountget_groove_amount / set_groove_amount use Track.groove_amount; groove is exposed as Clip.groove (a groove object), not a track property.

  9. Sub-routingset_track_input_sub_routing / set_track_output_sub_routing are self-described "simplified implementation" and return {"ok": true, "message": "... limited in LiveAPI"} without changing routing (false success).

  10. Take lanesdelete_take_lane calls Track.delete_take_lane(), which doesn't exist (create_take_lane does).

  11. Metronome volumeget_metronome_volume / set_metronome_volume read/write Song.metronome, which is the metronome on/off toggle (bool), not a volume. There is no metronome-volume member in the LOM.

Not a bug (for reference): nudge_down (Song.nudge_down exists) and set_clip_signature_numerator (Clip.signature_numerator exists) do work.

Expected behavior

Advertised tools either work, or clearly report that the operation is unsupported by the Live API — rather than returning {"ok": true} on a no-op, or a generic "not available".

Suggestions (happy to send a PR)

  • Document that group create/ungroup, track freeze/flatten, track delay, annotations, clip follow actions, clip fades, Song-level MIDI send, and metronome volume are not exposed by the Live API (so they can't be supported), and drop the corresponding entries from the tool count / README table.
  • For the "false success" cases (ungroup_track, set_clip_follow_action, sub-routing setters), return {"ok": false, "error": "unsupported by Live API"} so callers/LLMs don't believe the op succeeded.
  • Fixable adjacencies if desired: groove is Clip.groove; RAM mode (Clip.ram_mode) and clip time signature (Clip.signature_numerator) do work and could be surfaced correctly.
  • Minor: the README links to docs/API_REFERENCE.md and docs/TROUBLESHOOTING.md, which are 404 in the repo.

Environment

  • Ableton Live version: 12.4
  • OS: macOS
  • Verified against the running LOM + Cycling '74 official LOM reference.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions