Clip Module: Dictionary Registry + Notes/Warp Markers/Views/All Properties#185
Open
PhotonicVelocity wants to merge 17 commits intoideoforms:masterfrom
Open
Clip Module: Dictionary Registry + Notes/Warp Markers/Views/All Properties#185PhotonicVelocity wants to merge 17 commits intoideoforms:masterfrom
PhotonicVelocity wants to merge 17 commits intoideoforms:masterfrom
Conversation
This was referenced Feb 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR depends on PR‑182 and uses the same dictionary‑based registry refactor described there. Suggest closing that first to reduce the diff of this PR. It applies that structure to
clip.py, expanding clip coverage across notes, warp markers, time conversion, and view APIs, and adds a comprehensive test suite intests/test_clip.py. It also adds support for arrangement clips. The README table has been split into logical groups so it's not such a large single table.Endpoint Updates
All methods and properties are located at both
/live/clip/and/live/arrangement_clipMethods
set/fire_button,scrub,stop/scrub,move/playing_pos,crop,duplicate/loop,quantize,quantize/pitchadd/warp_marker,move/warp_marker,remove/warp_marker,convert/timeadd/notes,get/notes,get/selected_notes,replace/notes,replace/selected_notes,remove/notes,remove/selected_notes,duplicate/all_notes,duplicate/selected_notes,duplicate/region,select/notes,deselect/notes,convert/note_number_to_nameview/hide/envelope,view/show/envelope,view/show/loopremove_notes_by_id- This was not exposed in the README, and was not valid considering that AbletonOSC does not return thenote_idfield fromMidiNoteobjects.duplicate_loop- Onlyduplicate/loopkept in README going forwardProperties
notesandwarp_markersloop_jumpandplaying_statushandled vialisten: "bang"available_warp_modes,is_arrangement_clip,is_session_clip,is_take_lane_clip,sample_rateis_playing,view/grid_quantization,view/grid_is_tripletnotes,has_envelopes,warp_markerssignature_denominator,signature_numeratorloop_jump,playing_statusgain_display_string,has_groove,is_audio_clip,is_midi_clip,is_playing,is_triggered,length,sample_length,will_record_on_startNotes API strategy
MidiNoteobject withnote_id,probability,velocity_deviation,release_velocity. With that they also released new API methods (often with_extendedsuffixes), but the naming is all over the place. Use of the old methods causes an “older process” popup in Live warning about the use of old functions that may lose this data.add/notes,get/notes,remove/notes. It internally uses the newMidiNote-based methods (which avoids the popup), but still uses 5-field input/output foradd/get. The pitch/time filters are based on the input order of the newget_notes_extendedandremove_notes_extended.add,get,replace,remove,duplicate,select,deselectnotes,selected_notesverb/notesgenerally accepts no input to mean "all".get/notes ()== "get all notes"duplicatebreaks this pattern slightly due to differing input shapes:regionhas inputs:from_time,time_span,[destination_time],[pitch],[transposition]all_noteshas inputs:[destination_time],[transposition]destination_timedefaults to -1 (place at end oftime_span)pitchdefaults to -1 (no pitch filter)transpositiondefaults to 0pitch, start, duration, velocity, mute)deselect/notes(from_pitch, pitch_span, from_time, time_span), Live API only has adeselect_all_notesendpoint.selected_ids = get_selected_notes_extended()[note_id]deselect_ids = get_notes_extended(from_pitch, pitch_span, from_time, time_span)[note_id]select_ids = selected_ids - deselect_idsdeselect_all_notesselect_notes_by_id(select_ids)note_idto the user.ClipViewHandler
A dedicated
ClipViewHandlerwas added to isolateClip.Viewendpoints. This keeps the endpoint verb structure clean (/live/clip/view/get/propvs/live/clip/get/view/prop).manager.pyand__init__.pyare updated to support this.Tests
tests/test_clip.pyto cover:convert/time) and note naming (convert/note_number_to_name)silent_audio_filefixture (from PR‑182) for audio clip teststry/finallyto avoid leaving clips/listeners aroundKnown limitations / deferred items
canonical_parent,automation_envelopes,groove) remain disabled for now as these return objects./extendedaddition to the endpoints?duplicate_notes_by_idwill be particularly tricky as the list of note ids is variable length, and thedestination_time/transpositioninputs are optional.Checklist