Live coding environment for Python - A modern fork of FoxDot for algorithmic music composition and live performance.
Renardo is currently going through a wide and deep refactoring toward version 1.0.
- Live Coding: Write and execute Python code in real-time to create music
- Pattern-based Composition: Powerful pattern system for rhythmic and melodic structures
- Multiple Backends:
- SuperCollider integration for synthesis and audio processing
- REAPER backend for advanced DAW integration
- MIDI output support
- Web-based Interface: Modern, responsive web client built with Svelte
- Desktop Application: Optional Electron-based desktop app
- Interactive Tutorials: Built-in tutorials in multiple languages (English, Spanish)
- Extensible: Plugin system for custom instruments and effects
- Resource Management: Library system for managing samples, FX chains, and instruments
- Python 3.9 or higher
- SuperCollider (for audio synthesis)
- uv (Python package manager) - recommended
- REAPER (optional, for DAW integration)
# Clone the repository
git clone https://github.com/yourusername/renardo.git
cd renardo
# Install with uv
uv pip install -e .
# Or run directly with uv
uv run renardopip install renardo# Launch Renardo with default settings
renardo
# Or use the CLI interface
uv run cli
# Interactive pipe mode
uv run cli --pipeThe web interface will automatically open at http://localhost:5000
# Create a simple drum pattern
d1 >> play("x-o-")
# Add a bassline
b1 >> bass([0, 3, 5, 7], dur=1/2)
# Modify in real-time
d1 >> play("x-o-", amp=1.2)
# Stop everything
Clock.clear()# Show all available commands
renardo --help
cli --help
# Start in pipe mode (for integration with other tools)
cli --pipe
# Launch with specific backend
renardo --backend supercollider
renardo --backend reaper
# Configure REAPER integration
renardo --configure-reaperRenardo is organized into several key modules:
renardo/
├── lib/ # Core library (patterns, players, effects)
├── sc_backend/ # SuperCollider integration
├── reaper_backend/ # REAPER DAW integration
├── midi_backend/ # MIDI output support
├── webserver/ # Flask-based web server
├── runtime/ # Runtime environment and state management
├── settings_manager/ # Configuration management
├── gatherer/ # Resource library system
├── tutorial/ # Interactive tutorials (en, es)
└── cli_entrypoint/ # Command-line interface
webclient/
├── src/ # Svelte web interface
├── electron/ # Electron desktop app wrapper
└── dist/ # Built web assets
Renardo includes interactive tutorials accessible from the web interface:
- English:
/tutorial/en/ - Spanish:
/tutorial/es/
Topics covered:
- Introduction to live coding
- Playing notes and samples
- Algorithmic manipulation
- Using patterns
- Player attributes
- Clock management
- Advanced features (scales, groups, vars)
- SuperCollider instruments
- REAPER backend integration
Contributions are welcome! Please follow these guidelines:
- Fork the repository
- Create a feature branch (
git checkout -b feat/amazing-feature) - Commit your changes using Conventional Commits
feat: add new pattern generator fix: resolve timing issue in Clock docs: update tutorial content - Push to your branch (
git push origin feat/amazing-feature) - Open a Pull Request
We use Conventional Commits format
Key components:
- Players: Objects that play patterns (
p1,d1,b1, etc.) - Patterns: Sequence generators (
P,PSum,PRand, etc.) - Clock: Global timing system
- SynthDefs: SuperCollider instrument definitions
- TimeVars: Variables that change over time
Renardo uses TOML files for configuration:
# Default config location
~/.renardo/settings.toml
# REAPER backend settings
~/.renardo/reaper_backend.toml[general]
backend = "supercollider"
auto_start = true
[supercollider]
port = 57120
audio_device = "default"
[reaper]
enabled = true
project_path = "~/Music/renardo_sessions"The default audio backend using SuperCollider for synthesis:
# Start SuperCollider
from renardo.sc_backend import SuperColliderInstance
sc = SuperColliderInstance()
sc.start()
# Use SuperCollider instruments
p1 >> pluck([0, 2, 4, 7])Advanced DAW integration for professional production:
# Initialize REAPER backend
from renardo.reaper_backend import ReaperBackend
reaper = ReaperBackend()
reaper.configure()
# Create REAPER instruments
r1 >> ReaperInstrument("my_synth.RfxChain", notes=[0, 4, 7])Output to external MIDI devices:
# Configure MIDI output
from renardo.midi_backend import MIDIOut
midi = MIDIOut("My MIDI Device")
m1 >> midi([60, 64, 67]) # C major chordThe web interface provides:
- Code Editor: Syntax highlighting, auto-completion
- Console Output: Real-time feedback
- Session Management: Save and load sessions
- Settings Panel: Configure backends and preferences
- Tutorial Browser: Access interactive tutorials
- Resource Explorer: Browse samples and instruments
cd webclient
# Install dependencies
npm install
# Run development server
npm run dev
# Build for production
npm run build
# Build Electron app
npm run build:electronThis project is licensed under the GNU General Public License v3.0 (GPL-3.0).
See the LICENSE file for details.
- FoxDot: Original live coding environment by Ryan Kirkbride
- SuperCollider: Synthesis engine
- REAPER: Digital Audio Workstation
- All contributors to the Renardo project
- Website: renardo.org
- Issues: GitHub Issues
- Discussions: FoxDot / Renardo telegram channel
Happy live coding! 🎵