subsequence 0.6.4__tar.gz → 0.6.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. {subsequence-0.6.4 → subsequence-0.6.5}/PKG-INFO +5 -5
  2. {subsequence-0.6.4 → subsequence-0.6.5}/README.md +4 -4
  3. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence.egg-info/PKG-INFO +5 -5
  4. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence.egg-info/scm_version.json +2 -2
  5. {subsequence-0.6.4 → subsequence-0.6.5}/.github/workflows/docs.yml +0 -0
  6. {subsequence-0.6.4 → subsequence-0.6.5}/.github/workflows/publish.yml +0 -0
  7. {subsequence-0.6.4 → subsequence-0.6.5}/.github/workflows/tests.yml +0 -0
  8. {subsequence-0.6.4 → subsequence-0.6.5}/.github/workflows/type-check.yml +0 -0
  9. {subsequence-0.6.4 → subsequence-0.6.5}/.gitignore +0 -0
  10. {subsequence-0.6.4 → subsequence-0.6.5}/LICENSE +0 -0
  11. {subsequence-0.6.4 → subsequence-0.6.5}/api-cheatsheet.md +0 -0
  12. {subsequence-0.6.4 → subsequence-0.6.5}/benchmarks/clock_jitter.py +0 -0
  13. {subsequence-0.6.4 → subsequence-0.6.5}/docs/README.md +0 -0
  14. {subsequence-0.6.4 → subsequence-0.6.5}/docs/build.sh +0 -0
  15. {subsequence-0.6.4 → subsequence-0.6.5}/examples/arpeggiator.py +0 -0
  16. {subsequence-0.6.4 → subsequence-0.6.5}/examples/assets/Swing 16ths 57.agr +0 -0
  17. {subsequence-0.6.4 → subsequence-0.6.5}/examples/bresenham_poly.py +0 -0
  18. {subsequence-0.6.4 → subsequence-0.6.5}/examples/demo.py +0 -0
  19. {subsequence-0.6.4 → subsequence-0.6.5}/examples/demo_advanced.py +0 -0
  20. {subsequence-0.6.4 → subsequence-0.6.5}/examples/emergence.py +0 -0
  21. {subsequence-0.6.4 → subsequence-0.6.5}/examples/frozen.py +0 -0
  22. {subsequence-0.6.4 → subsequence-0.6.5}/examples/iss.py +0 -0
  23. {subsequence-0.6.4 → subsequence-0.6.5}/examples/labyrinth.py +0 -0
  24. {subsequence-0.6.4 → subsequence-0.6.5}/examples/link_sync.py +0 -0
  25. {subsequence-0.6.4 → subsequence-0.6.5}/examples/live_init.py +0 -0
  26. {subsequence-0.6.4 → subsequence-0.6.5}/examples/live_patterns.py +0 -0
  27. {subsequence-0.6.4 → subsequence-0.6.5}/examples/live_single_file.py +0 -0
  28. {subsequence-0.6.4 → subsequence-0.6.5}/examples/load_patterns.py +0 -0
  29. {subsequence-0.6.4 → subsequence-0.6.5}/examples/subharmonicon.py +0 -0
  30. {subsequence-0.6.4 → subsequence-0.6.5}/pyproject.toml +0 -0
  31. {subsequence-0.6.4 → subsequence-0.6.5}/pytest.ini +0 -0
  32. {subsequence-0.6.4 → subsequence-0.6.5}/sandbox/.gitignore +0 -0
  33. {subsequence-0.6.4 → subsequence-0.6.5}/sandbox/README.md +0 -0
  34. {subsequence-0.6.4 → subsequence-0.6.5}/scripts/check_docstring_markup.py +0 -0
  35. {subsequence-0.6.4 → subsequence-0.6.5}/scripts/generate_cheatsheet.py +0 -0
  36. {subsequence-0.6.4 → subsequence-0.6.5}/scripts/midi_in_observer.py +0 -0
  37. {subsequence-0.6.4 → subsequence-0.6.5}/scripts/simulation_gravity.py +0 -0
  38. {subsequence-0.6.4 → subsequence-0.6.5}/scripts/tuner_tone.py +0 -0
  39. {subsequence-0.6.4 → subsequence-0.6.5}/setup.cfg +0 -0
  40. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/__init__.py +0 -0
  41. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/__main__.py +0 -0
  42. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/assets/web/index.html +0 -0
  43. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/cadences.py +0 -0
  44. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chord_graphs/__init__.py +0 -0
  45. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chord_graphs/aeolian_minor.py +0 -0
  46. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chord_graphs/chromatic_mediant.py +0 -0
  47. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chord_graphs/diminished.py +0 -0
  48. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chord_graphs/dorian_minor.py +0 -0
  49. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chord_graphs/functional_major.py +0 -0
  50. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chord_graphs/hooktheory_major.py +0 -0
  51. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chord_graphs/lydian_major.py +0 -0
  52. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chord_graphs/mixolydian.py +0 -0
  53. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chord_graphs/phrygian_minor.py +0 -0
  54. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chord_graphs/suspended.py +0 -0
  55. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chord_graphs/turnaround_global.py +0 -0
  56. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chord_graphs/whole_tone.py +0 -0
  57. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/chords.py +0 -0
  58. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/composition.py +0 -0
  59. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/conductor.py +0 -0
  60. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/constants/__init__.py +0 -0
  61. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/constants/durations.py +0 -0
  62. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/constants/instruments/__init__.py +0 -0
  63. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/constants/instruments/gm_cc.py +0 -0
  64. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/constants/instruments/gm_drums.py +0 -0
  65. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/constants/instruments/gm_instruments.py +0 -0
  66. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/constants/instruments/roland_tr8s.py +0 -0
  67. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/constants/instruments/vermona_drm1_drums.py +0 -0
  68. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/constants/midi_notes.py +0 -0
  69. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/constants/pulses.py +0 -0
  70. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/constants/velocity.py +0 -0
  71. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/definitions.py +0 -0
  72. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/display.py +0 -0
  73. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/easing.py +0 -0
  74. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/event_emitter.py +0 -0
  75. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/form_state.py +0 -0
  76. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/forms.py +0 -0
  77. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/groove.py +0 -0
  78. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/harmonic_rhythm.py +0 -0
  79. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/harmonic_state.py +0 -0
  80. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/harmony.py +0 -0
  81. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/held_notes.py +0 -0
  82. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/helpers/__init__.py +0 -0
  83. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/helpers/network.py +0 -0
  84. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/helpers/wing.py +0 -0
  85. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/intervals.py +0 -0
  86. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/keystroke.py +0 -0
  87. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/link_clock.py +0 -0
  88. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/live_client.py +0 -0
  89. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/live_reloader.py +0 -0
  90. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/live_server.py +0 -0
  91. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/melodic_state.py +0 -0
  92. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/midi.py +0 -0
  93. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/midi_utils.py +0 -0
  94. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/mini_notation.py +0 -0
  95. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/motifs.py +0 -0
  96. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/osc.py +0 -0
  97. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/pattern.py +0 -0
  98. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/pattern_algorithmic.py +0 -0
  99. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/pattern_builder.py +0 -0
  100. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/pattern_midi.py +0 -0
  101. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/progressions.py +0 -0
  102. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/py.typed +0 -0
  103. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/roles.py +0 -0
  104. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/sequence_utils.py +0 -0
  105. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/sequencer.py +0 -0
  106. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/tuning.py +0 -0
  107. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/voicings.py +0 -0
  108. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/web_ui.py +0 -0
  109. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence/weighted_graph.py +0 -0
  110. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence.egg-info/SOURCES.txt +0 -0
  111. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence.egg-info/dependency_links.txt +0 -0
  112. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence.egg-info/entry_points.txt +0 -0
  113. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence.egg-info/requires.txt +0 -0
  114. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence.egg-info/scm_file_list.json +0 -0
  115. {subsequence-0.6.4 → subsequence-0.6.5}/subsequence.egg-info/top_level.txt +0 -0
  116. {subsequence-0.6.4 → subsequence-0.6.5}/tests/conftest.py +0 -0
  117. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_api_consistency.py +0 -0
  118. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_cadences.py +0 -0
  119. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_callback_sequence.py +0 -0
  120. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_cc_forward.py +0 -0
  121. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_cc_name_map.py +0 -0
  122. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_chord_graphs.py +0 -0
  123. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_chord_quality_registry.py +0 -0
  124. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_clock_output.py +0 -0
  125. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_composition.py +0 -0
  126. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_conductor.py +0 -0
  127. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_custom_scales.py +0 -0
  128. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_definitions.py +0 -0
  129. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_detached.py +0 -0
  130. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_determinism.py +0 -0
  131. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_display.py +0 -0
  132. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_duration.py +0 -0
  133. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_eased_value.py +0 -0
  134. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_easing.py +0 -0
  135. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_event_emitter.py +0 -0
  136. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_form.py +0 -0
  137. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_forms.py +0 -0
  138. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_groove.py +0 -0
  139. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_harmonic_gravity.py +0 -0
  140. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_harmony.py +0 -0
  141. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_harmony_window.py +0 -0
  142. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_held_notes.py +0 -0
  143. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_hotkeys.py +0 -0
  144. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_instrument_drum_maps.py +0 -0
  145. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_intervals.py +0 -0
  146. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_key_resolution.py +0 -0
  147. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_keystroke.py +0 -0
  148. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_latency_compensation.py +0 -0
  149. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_legato.py +0 -0
  150. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_link.py +0 -0
  151. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_live_reloader.py +0 -0
  152. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_live_server.py +0 -0
  153. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_load_patterns.py +0 -0
  154. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_low_fixes_2026_07.py +0 -0
  155. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_melodic_state.py +0 -0
  156. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_melody_v2.py +0 -0
  157. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_midi_helpers.py +0 -0
  158. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_midi_input.py +0 -0
  159. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_midi_recording.py +0 -0
  160. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_mini_notation.py +0 -0
  161. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_mini_notation_integration.py +0 -0
  162. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_mirror.py +0 -0
  163. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_motif_placement.py +0 -0
  164. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_motifs.py +0 -0
  165. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_multi_device.py +0 -0
  166. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_new_chord_graphs.py +0 -0
  167. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_osc.py +0 -0
  168. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_pattern_algorithmic.py +0 -0
  169. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_pattern_builder.py +0 -0
  170. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_phrases.py +0 -0
  171. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_presets.py +0 -0
  172. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_progressions.py +0 -0
  173. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_render.py +0 -0
  174. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_rescheduling.py +0 -0
  175. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_review_fixes.py +0 -0
  176. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_review_fixes_2026_07.py +0 -0
  177. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_schedule_context.py +0 -0
  178. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_scheduled_tasks.py +0 -0
  179. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_sequence_utils.py +0 -0
  180. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_sequence_utils_density_combine.py +0 -0
  181. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_sequence_utils_density_spread.py +0 -0
  182. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_sequence_utils_density_to_steps.py +0 -0
  183. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_sequence_utils_density_warp.py +0 -0
  184. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_sequence_utils_morse_code.py +0 -0
  185. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_sequence_utils_scale.py +0 -0
  186. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_sequence_utils_transforms_list.py +0 -0
  187. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_sequence_utils_transforms_value.py +0 -0
  188. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_sequencer_dispatch_safety.py +0 -0
  189. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_sequencer_events.py +0 -0
  190. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_tier1_fixes_2026_07.py +0 -0
  191. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_trigger.py +0 -0
  192. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_tuning.py +0 -0
  193. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_turnaround_graph.py +0 -0
  194. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_unregister.py +0 -0
  195. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_velocity_tuple.py +0 -0
  196. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_voicings.py +0 -0
  197. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_web_ui.py +0 -0
  198. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_weighted_graph.py +0 -0
  199. {subsequence-0.6.4 → subsequence-0.6.5}/tests/test_wing_helper.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: subsequence
3
- Version: 0.6.4
3
+ Version: 0.6.5
4
4
  Summary: A generative MIDI sequencer
5
5
  Author-email: Simon Holliday <simon.holliday@protonmail.com>
6
6
  License-Expression: AGPL-3.0-or-later
@@ -75,16 +75,16 @@ composition.play()
75
75
 
76
76
  Subsequence needs **Python 3.10+** and a MIDI destination — a hardware synth or drum machine, or a virtual MIDI port into your DAW or software instrument. It generates MIDI only; it makes no sound itself.
77
77
 
78
- Install it into your project's virtual environment (no clone needed):
78
+ Install it into your project's virtual environment:
79
79
 
80
80
  ```bash
81
- pip install git+https://github.com/simonholliday/subsequence.git
81
+ pip install subsequence
82
82
 
83
83
  # optional: Ableton Link tempo sync
84
- pip install "subsequence[link] @ git+https://github.com/simonholliday/subsequence.git"
84
+ pip install "subsequence[link]"
85
85
  ```
86
86
 
87
- Pin a piece to an exact release by appending a tag — `...subsequence.git@v0.6.2` — so it renders identically forever, whatever the library does next.
87
+ Pin a piece to an exact release `pip install subsequence==0.6.5` — so it renders identically forever, whatever the library does next.
88
88
 
89
89
  **Linux:** the ALSA backend needs your user in the `audio` group. If you hit `open /dev/snd/seq failed: Permission denied`:
90
90
 
@@ -46,16 +46,16 @@ composition.play()
46
46
 
47
47
  Subsequence needs **Python 3.10+** and a MIDI destination — a hardware synth or drum machine, or a virtual MIDI port into your DAW or software instrument. It generates MIDI only; it makes no sound itself.
48
48
 
49
- Install it into your project's virtual environment (no clone needed):
49
+ Install it into your project's virtual environment:
50
50
 
51
51
  ```bash
52
- pip install git+https://github.com/simonholliday/subsequence.git
52
+ pip install subsequence
53
53
 
54
54
  # optional: Ableton Link tempo sync
55
- pip install "subsequence[link] @ git+https://github.com/simonholliday/subsequence.git"
55
+ pip install "subsequence[link]"
56
56
  ```
57
57
 
58
- Pin a piece to an exact release by appending a tag — `...subsequence.git@v0.6.2` — so it renders identically forever, whatever the library does next.
58
+ Pin a piece to an exact release `pip install subsequence==0.6.5` — so it renders identically forever, whatever the library does next.
59
59
 
60
60
  **Linux:** the ALSA backend needs your user in the `audio` group. If you hit `open /dev/snd/seq failed: Permission denied`:
61
61
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: subsequence
3
- Version: 0.6.4
3
+ Version: 0.6.5
4
4
  Summary: A generative MIDI sequencer
5
5
  Author-email: Simon Holliday <simon.holliday@protonmail.com>
6
6
  License-Expression: AGPL-3.0-or-later
@@ -75,16 +75,16 @@ composition.play()
75
75
 
76
76
  Subsequence needs **Python 3.10+** and a MIDI destination — a hardware synth or drum machine, or a virtual MIDI port into your DAW or software instrument. It generates MIDI only; it makes no sound itself.
77
77
 
78
- Install it into your project's virtual environment (no clone needed):
78
+ Install it into your project's virtual environment:
79
79
 
80
80
  ```bash
81
- pip install git+https://github.com/simonholliday/subsequence.git
81
+ pip install subsequence
82
82
 
83
83
  # optional: Ableton Link tempo sync
84
- pip install "subsequence[link] @ git+https://github.com/simonholliday/subsequence.git"
84
+ pip install "subsequence[link]"
85
85
  ```
86
86
 
87
- Pin a piece to an exact release by appending a tag — `...subsequence.git@v0.6.2` — so it renders identically forever, whatever the library does next.
87
+ Pin a piece to an exact release `pip install subsequence==0.6.5` — so it renders identically forever, whatever the library does next.
88
88
 
89
89
  **Linux:** the ALSA backend needs your user in the `audio` group. If you hit `open /dev/snd/seq failed: Permission denied`:
90
90
 
@@ -1,7 +1,7 @@
1
1
  {
2
- "tag": "0.6.4",
2
+ "tag": "0.6.5",
3
3
  "distance": 0,
4
- "node": "gf411c6a7349c3b74737c9e9f1112dd4151f87906",
4
+ "node": "g95107556b40f45e06b0f72a0adcad0243096c0be",
5
5
  "dirty": false,
6
6
  "branch": "HEAD",
7
7
  "node_date": "2026-07-19"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes