No description
- Python 67.7%
- Jinja 32.3%
|
|
||
|---|---|---|
| templates | ||
| tests | ||
| .gitignore | ||
| engine.py | ||
| metadata.py | ||
| mixerconf.py | ||
| models.py | ||
| presets.py | ||
| profiles.py | ||
| README.md | ||
Digital Mixer Scene Configuration Generator
A Python-based utility to generate scene configuration files (.scn) for digital mixers (specifically Behringer X18/XR18 and X32). It maps human-readable stage layouts (JSON/YAML) to optimized mixer channel assignments and processing presets.
Features
- Logical Grouping: Automatically assigns channels based on professional mixing standards:
- Voices (Soprano, Mezzosoprano, Tenor, Baritone)
- Plugged Instruments (Guitar, Piano, Bass)
- Strings (Violin, Viola, Cello)
- Percussion (Cajon, Bongos, Chimes)
- Multi-Mixer Support: Profiles for Behringer X18 and X32.
- EQ Presets: Automatic frequency adjustments based on instrument type and microphone model (e.g., SM58 optimization for voices).
- Validation: Strict input validation using Pydantic.
- Dual-Use: Use it as a standalone CLI tool or integrate it as a Python library.
Installation
pip install pydantic typer jinja2 pyyaml
Usage
Simplified Nested Format (Auto-mapped)
You can also use a simplified, grouped layout which automatically maps keys to their respective types:
- sopranos:
- Alejandra
- Saidee
- tenors:
- Abraham
- instruments:
- Guitar (Panano)
- Piano (Leonor)
In this format, voices are mapped based on the key (sopranos, tenors, etc.), and instruments are inferred from the string prefix (e.g., "Guitar", "Piano").
- source_type: soprano
player_name: Patsy
microphone: SM58
- source_type: guitar (plug)
player_name: Daniel
- source_type: cajon (whole)
player_name: Chuy
Generate a scene:
python mixerconf.py create --input layout.yaml --mixer x18 --output sunday_service.scn
Validate a layout without rendering:
python mixerconf.py validate layout.yaml
Python Library
from models import ChannelInput, VoiceType, SceneMapping
from engine import assign_channels
from profiles import BehringerX18Profile
inputs = [
ChannelInput(source_type=VoiceType.SOPRANO, player_name="Patsy")
]
assigned = assign_channels(inputs)
scene = SceneMapping(name="My Scene", inputs=assigned)
profile = BehringerX18Profile()
output_text = profile.render(scene)
print(output_text)
Development
Running Tests
The project maintains high test coverage (~99%) across core logic and CLI commands.
python3 -m pytest --cov=. tests/
Adding New Profiles
- Create a new Jinja2 template in
templates/. - Define a new
MixerProfilesubclass inprofiles.py. - Add icon/color mappings in
metadata.py.