Name | buildable JSON |
Version |
0.4.0
JSON |
| download |
home_page | None |
Summary | Combine and edit Ableton Live sets (.als files). |
upload_time | 2024-08-17 03:10:25 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.8 |
license | None |
keywords |
ableton
live
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# buildable
[](https://pypi.org/project/buildable)
[](https://pypi.org/project/buildable)

[](https://codecov.io/github/kmontag/buildable)
---
`buildable` allows you to edit and extend Ableton Live sets programmatically. For example, you could
have a single set that stores your common return tracks, and use `buildable` to add them to various
template sets.
Currently you can:
- copy tracks/returns from other sets.
- delete and re-order tracks/returns.
- edit key and MIDI mappings for many set elements.
- set some high-level view properties, like the session/arrangement state.
## Installation
```console
pip install buildable
```
## Usage
For example, you could create a project containing set components that you want to mix together, and
generate templates from them with something like:
```python
from buildable import LiveSet
# Template bases containing MIDI/audio tracks.
jam_session = LiveSet.from_file('jam-session-tracks.als')
composition = LiveSet.from_file('composition-tracks.als')
# Shared main track and return tracks to be copied to the templates.
shared_structure = LiveSet.from_file('shared-structure.als')
for template_set in (jam_session, composition):
# Copy returns and main track from the shared set.
template_set.insert_return_tracks(shared_returns.return_tracks)
template_set.main_track = shared_main.main_track
# Assign tap tempo to key "p".
template_set.transport.tap_tempo_key_midi.persistent_key_string = "p"
# Assign crossfader to the mod wheel on MIDI channel 1.
jam_session.main_track.key_midi_crossfade_equal.channel = 0
jam_session.main_track.key_midi.crossfade_equal.note_or_controller = 1
# Switch to arrangement view.
composition.chooser_bar = LiveSet.CHOOSER_BAR_ARRANGEMENT
jam_session.write_to_file("/path/to/user-library/Templates/JamSession.als")
composition.write_to_file("/path/to/user-library/Templates/Composition.als")
```
## Design
Live sets are represented natively as XML documents, and `buildable` objects mirror a subset of the
native document structure as closely as possible, with helpers for more complex operations like
copying tracks. XML elements are also exposed directly if you want to go off-piste. This helps with
flexibility and maintainability, but comes with some caveats:
- spelling mistakes and naming inconsistencies are carried over from the native format.
- some simple operations require using relatively complex accessors - for example, key/MIDI mappings
for sends are accessed using
e.g. `live_set.primary_tracks[0].device_chain.mixer.sends.track_send_holders[0].send.key_midi`.
- `buildable` won't stop you from setting values that are semantically valid, but invalid at
runtime.
The best way to familiarize yourself with the native document structure is to examine existing Live
sets (using e.g. `gunzip -c my-set.als`) and/or look through the `buildable` source code.
Raw data
{
"_id": null,
"home_page": null,
"name": "buildable",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "ableton, live",
"author": null,
"author_email": "Kevin Montag <kmontag@cs.stanford.edu>",
"download_url": "https://files.pythonhosted.org/packages/59/b2/a43c5d78f7e8a0150ef224288d1ac9759e366013fbce15d7890b0420f58c/buildable-0.4.0.tar.gz",
"platform": null,
"description": "# buildable\n\n[](https://pypi.org/project/buildable)\n[](https://pypi.org/project/buildable)\n\n[](https://codecov.io/github/kmontag/buildable)\n\n---\n\n`buildable` allows you to edit and extend Ableton Live sets programmatically. For example, you could\nhave a single set that stores your common return tracks, and use `buildable` to add them to various\ntemplate sets.\n\nCurrently you can:\n\n- copy tracks/returns from other sets.\n- delete and re-order tracks/returns.\n- edit key and MIDI mappings for many set elements.\n- set some high-level view properties, like the session/arrangement state.\n\n## Installation\n\n```console\npip install buildable\n```\n\n## Usage\n\nFor example, you could create a project containing set components that you want to mix together, and\ngenerate templates from them with something like:\n\n```python\nfrom buildable import LiveSet\n\n# Template bases containing MIDI/audio tracks.\njam_session = LiveSet.from_file('jam-session-tracks.als')\ncomposition = LiveSet.from_file('composition-tracks.als')\n\n# Shared main track and return tracks to be copied to the templates.\nshared_structure = LiveSet.from_file('shared-structure.als')\n\nfor template_set in (jam_session, composition):\n # Copy returns and main track from the shared set.\n template_set.insert_return_tracks(shared_returns.return_tracks)\n template_set.main_track = shared_main.main_track\n\n # Assign tap tempo to key \"p\".\n template_set.transport.tap_tempo_key_midi.persistent_key_string = \"p\"\n\n# Assign crossfader to the mod wheel on MIDI channel 1.\njam_session.main_track.key_midi_crossfade_equal.channel = 0\njam_session.main_track.key_midi.crossfade_equal.note_or_controller = 1\n\n# Switch to arrangement view.\ncomposition.chooser_bar = LiveSet.CHOOSER_BAR_ARRANGEMENT\n\njam_session.write_to_file(\"/path/to/user-library/Templates/JamSession.als\")\ncomposition.write_to_file(\"/path/to/user-library/Templates/Composition.als\")\n```\n\n## Design\n\nLive sets are represented natively as XML documents, and `buildable` objects mirror a subset of the\nnative document structure as closely as possible, with helpers for more complex operations like\ncopying tracks. XML elements are also exposed directly if you want to go off-piste. This helps with\nflexibility and maintainability, but comes with some caveats:\n\n- spelling mistakes and naming inconsistencies are carried over from the native format.\n- some simple operations require using relatively complex accessors - for example, key/MIDI mappings\n for sends are accessed using\n e.g. `live_set.primary_tracks[0].device_chain.mixer.sends.track_send_holders[0].send.key_midi`.\n- `buildable` won't stop you from setting values that are semantically valid, but invalid at\n runtime.\n\nThe best way to familiarize yourself with the native document structure is to examine existing Live\nsets (using e.g. `gunzip -c my-set.als`) and/or look through the `buildable` source code.\n",
"bugtrack_url": null,
"license": null,
"summary": "Combine and edit Ableton Live sets (.als files).",
"version": "0.4.0",
"project_urls": {
"Documentation": "https://github.com/kmontag/buildable#readme",
"Issues": "https://github.com/kmontag/buildable/issues",
"Source": "https://github.com/kmontag/buildable"
},
"split_keywords": [
"ableton",
" live"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "a8ad1c32c6c96268006bc44dc4b2f647e9f199b0c0ffc4cbba1af32c5cb184bb",
"md5": "3827b235f3161c07796e94ae9533dc3b",
"sha256": "44fc323a8c67d0eee35a3ba78d340862ee820dbdfce3f1b620e335ddc6b6b77a"
},
"downloads": -1,
"filename": "buildable-0.4.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3827b235f3161c07796e94ae9533dc3b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 15975,
"upload_time": "2024-08-17T03:10:23",
"upload_time_iso_8601": "2024-08-17T03:10:23.792152Z",
"url": "https://files.pythonhosted.org/packages/a8/ad/1c32c6c96268006bc44dc4b2f647e9f199b0c0ffc4cbba1af32c5cb184bb/buildable-0.4.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "59b2a43c5d78f7e8a0150ef224288d1ac9759e366013fbce15d7890b0420f58c",
"md5": "cbc3f7e21d28ccfca8ff0b3dc9474674",
"sha256": "e64d2afd562ba23de596a48eca7743902fafcaa8330b006c940ec7d86bad9b44"
},
"downloads": -1,
"filename": "buildable-0.4.0.tar.gz",
"has_sig": false,
"md5_digest": "cbc3f7e21d28ccfca8ff0b3dc9474674",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 95619,
"upload_time": "2024-08-17T03:10:25",
"upload_time_iso_8601": "2024-08-17T03:10:25.407617Z",
"url": "https://files.pythonhosted.org/packages/59/b2/a43c5d78f7e8a0150ef224288d1ac9759e366013fbce15d7890b0420f58c/buildable-0.4.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-17 03:10:25",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "kmontag",
"github_project": "buildable#readme",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "buildable"
}