Metadata-Version: 2.4
Name: openwig
Version: 0.1.0
Summary: Algorithmic composition for Bitwig Studio. Write Python, get songs.
Author: Axyom
License: GPL-3.0-or-later
Project-URL: Homepage, https://github.com/Axyom/openwig
Project-URL: Source, https://github.com/Axyom/openwig
Keywords: bitwig,music,composition,sdk,daw,algorithmic,midi
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Multimedia :: Sound/Audio :: MIDI
Classifier: Operating System :: Microsoft :: Windows
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.26
Requires-Dist: PyAudioWPatch>=0.2.12.6; sys_platform == "win32"
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Requires-Dist: mkdocs-material>=9.5; extra == "dev"
Dynamic: license-file

# openwig

**Algorithmic composition for Bitwig Studio. Write Python, get songs.**

[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](LICENSE)
[![Bitwig 6.0.6](https://img.shields.io/badge/Bitwig-6.0.6-orange.svg)](#compatibility)
[![Python 3.11+](https://img.shields.io/badge/Python-3.11%2B-3776AB.svg)](#install)

Goes where Bitwig's official Controller API can't: build arrangements, devices,
modulators, sidechains, automation curves, and full multi-track songs from a
Python program. Render to `.wav`, export to MIDI/JSON.

Free and open source (GPL-3.0). Windows only. Early beta.

```python
from openwig import Song

s = Song(tempo=128, bars=16, clean=True)

kick = s.track("KICK", device="v9 Kick")
kick.fx("Saturator", Drive=0.20)
kick.clip(s.pulse(36, step=1.0))

bass = s.track("BASS", device="FM-4")
bass.fx("Filter")
bass.clip(s.pulse(33, step=1.0, off=0.5, dur=0.4, vel=0.85))
bass.pump(hi=0.82)

s.master(["EQ+", "Compressor+", "Peak Limiter"])
s.play()
print(s.render("song.wav"))
```

## Compatibility

| openwig | Bitwig Studio | Python | OS |
|------------|---------------|--------|----|
| 0.1.x      | **6.0.6**     | 3.11+  | Windows |

The SDK reaches into Bitwig internals that move across releases, so it targets
a specific Bitwig version. A mismatch refuses to connect with a clear error-
bump the SDK when you bump Bitwig. Rendering uses WASAPI loopback (Windows).

## Install

```bash
pip install git+https://github.com/Axyom/openwig.git
python -m openwig install   # copies the controller into Bitwig's user dir
python -m openwig doctor    # verify deps + controller + bridge
```

Then in Bitwig: **Settings → Controllers → Add → OpenwigBridge** (one time).

## Contributing

Issues and PRs welcome. Currently Windows + Bitwig 6.0.6 only.

## License

GPL-3.0-or-later. See [`LICENSE`](LICENSE).
