Metadata-Version: 2.3
Name: buildable
Version: 0.0.1
Summary: Combine and edit Ableton Live sets (.als files).
Project-URL: Documentation, https://github.com/kmontag/buildable#readme
Project-URL: Issues, https://github.com/kmontag/buildable/issues
Project-URL: Source, https://github.com/kmontag/buildable
Author-email: Kevin Montag <kmontag@cs.stanford.edu>
License-Expression: MIT
License-File: LICENSE.txt
Keywords: ableton,live
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Python: >=3.8
Requires-Dist: lxml~=5.2.2
Description-Content-Type: text/markdown

# buildable

[![PyPI - Version](https://img.shields.io/pypi/v/buildable.svg)](https://pypi.org/project/buildable)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/buildable.svg)](https://pypi.org/project/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, and set some high-level parameters like the
session/arrangment view state.

## Installation

```console
pip install buildable
```

## Usage

```python
from buildable import LiveSet

# Template bases containing e.g. 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):
    template_set.insert_return_tracks(shared_returns.return_tracks)
    template_set.main_track = shared_main.main_track

jam_session.write_to_file("/path/to/user-library/Templates/JamSession.als")
composition.write_to_file("/path/to/user-library/Templates/Composition.als")
```
