From 1fbbf3cf914968185bbf1271c8a7eadf13f97e0d Mon Sep 17 00:00:00 2001 From: Lucas Draney Date: Thu, 15 Jan 2026 11:23:20 -0700 Subject: [PATCH] fix: duplicate_clip_to_arrangement passes clip instead of clip_slot The Ableton API expects a Clip object, not a ClipSlot object. Changed from clip_slot to clip_slot.clip with null check. Co-Authored-By: Claude Opus 4.5 --- abletonosc/track.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/abletonosc/track.py b/abletonosc/track.py index 5e21353..9222f84 100644 --- a/abletonosc/track.py +++ b/abletonosc/track.py @@ -136,6 +136,19 @@ def track_get_arrangement_clip_start_times(track, _): self.osc_server.add_handler("/live/track/get/arrangement_clips/length", create_track_callback(track_get_arrangement_clip_lengths)) self.osc_server.add_handler("/live/track/get/arrangement_clips/start_time", create_track_callback(track_get_arrangement_clip_start_times)) + def track_duplicate_clip_to_arrangement(track, params): + """ + Duplicate a session clip to arrangement view at a specific time. + params: (clip_slot_index, time_in_beats) + """ + clip_slot_index = int(params[0]) + time = float(params[1]) + clip_slot = track.clip_slots[clip_slot_index] + if clip_slot.clip: + track.duplicate_clip_to_arrangement(clip_slot.clip, time) + + self.osc_server.add_handler("/live/track/duplicate_clip_to_arrangement", create_track_callback(track_duplicate_clip_to_arrangement)) + def track_get_num_devices(track, _): return len(track.devices),