Files
sideline/docs/presets-usage.md
David Gwilliam 915598629a docs(graph): Add DSL documentation and examples
Add comprehensive documentation for the graph-based pipeline DSL:

- docs/graph-dsl.md: Complete DSL reference with TOML, Python, and CLI syntax
- docs/GRAPH_SYSTEM_SUMMARY.md: Implementation overview and architecture
- examples/graph_dsl_demo.py: Demonstrates imperative Python API usage
- examples/test_graph_integration.py: Integration test verifying pipeline execution

The documentation follows a wiki-like approach with navigable structure:
- Overview section explaining the concept
- Syntax examples for each format (TOML, Python, CLI)
- Node type reference table
- Advanced features section
- Comparison with old XYZStage approach

This provides users with multiple entry points to understand and use the
new graph-based pipeline system.
2026-03-21 19:26:59 -07:00

220 lines
5.4 KiB
Markdown

# Presets Usage Guide
## Overview
The sideline branch introduces a new preset system that allows you to easily configure different pipeline behaviors. This guide explains the available presets and how to use them.
## Available Presets
### 1. upstream-default
**Purpose:** Matches the default upstream Mainline operation for comparison.
**Configuration:**
- **Display:** Terminal (not pygame)
- **Camera:** Scroll mode
- **Effects:** noise, fade, glitch, firehose (classic four effects)
- **Positioning:** Mixed mode
- **Message Overlay:** Disabled (matches upstream)
**Usage:**
```bash
python -m mainline --preset upstream-default --display terminal
```
**Best for:**
- Comparing sideline vs upstream behavior
- Legacy terminal-based operation
- Baseline performance testing
### 2. demo
**Purpose:** Showcases sideline features including hotswappable effects and sensors.
**Configuration:**
- **Display:** Pygame (graphical display)
- **Camera:** Scroll mode
- **Effects:** noise, fade, glitch, firehose, hud (with visual feedback)
- **Positioning:** Mixed mode
- **Message Overlay:** Enabled (with ntfy integration)
**Features:**
- **Hotswappable Effects:** Effects can be toggled and modified at runtime
- **LFO Sensor Modulation:** Oscillator sensor provides smooth intensity modulation
- **Visual Feedback:** HUD effect shows current effect state and pipeline info
- **Mixed Positioning:** Optimal balance of performance and control
**Usage:**
```bash
python -m mainline --preset demo --display pygame
```
**Best for:**
- Exploring sideline capabilities
- Testing effect hotswapping
- Demonstrating sensor integration
### 3. demo-base / demo-pygame
**Purpose:** Base presets for custom effect hotswapping experiments.
**Configuration:**
- **Display:** Terminal (base) or Pygame (pygame variant)
- **Camera:** Feed mode
- **Effects:** Empty (add your own)
- **Positioning:** Mixed mode
**Usage:**
```bash
python -m mainline --preset demo-pygame --display pygame
```
### 4. Other Presets
- `poetry`: Poetry feed with subtle effects
- `firehose`: High-speed firehose mode
- `ui`: Interactive UI mode with control panel
- `fixture`: Uses cached headline fixtures
- `websocket`: WebSocket display mode
## Positioning Modes
The `--positioning` flag controls how text is positioned in the terminal:
```bash
# Relative positioning (newlines, good for scrolling)
python -m mainline --positioning relative --preset demo
# Absolute positioning (cursor codes, good for overlays)
python -m mainline --positioning absolute --preset demo
# Mixed positioning (default, optimal balance)
python -m mainline --positioning mixed --preset demo
```
## Pipeline Stages
### Upstream-Default Pipeline
1. **Source Stage:** Headlines data source
2. **Viewport Filter:** Filters items to viewport height
3. **Font Stage:** Renders headlines as block characters
4. **Camera Stages:** Scrolling animation
5. **Effect Stages:** noise, fade, glitch, firehose
6. **Display Stage:** Terminal output
### Demo Pipeline
1. **Source Stage:** Headlines data source
2. **Viewport Filter:** Filters items to viewport height
3. **Font Stage:** Renders headlines as block characters
4. **Camera Stages:** Scrolling animation
5. **Effect Stages:** noise, fade, glitch, firehose, hud
6. **Message Overlay:** Ntfy message integration
7. **Display Stage:** Pygame output
## Command-Line Examples
### Basic Usage
```bash
# Run upstream-default preset
python -m mainline --preset upstream-default --display terminal
# Run demo preset
python -m mainline --preset demo --display pygame
# Run with custom positioning
python -m mainline --preset demo --display pygame --positioning absolute
```
### Comparison Testing
```bash
# Capture upstream output
python -m mainline --preset upstream-default --display null --viewport 80x24
# Capture sideline output
python -m mainline --preset demo --display null --viewport 80x24
```
### Hotswapping Effects
The demo preset supports hotswapping effects at runtime:
- Use the WebSocket display to send commands
- Toggle effects on/off
- Adjust intensity values in real-time
## Configuration Files
### Built-in Presets
Location: `engine/pipeline/presets.py` (Python code)
### User Presets
Location: `~/.config/mainline/presets.toml` or `./presets.toml`
Example user preset:
```toml
[presets.my-custom-preset]
description = "My custom configuration"
source = "headlines"
display = "terminal"
camera = "scroll"
effects = ["noise", "fade"]
positioning = "mixed"
viewport_width = 100
viewport_height = 30
```
## Sensor Configuration
### Oscillator Sensor (LFO)
The oscillator sensor provides Low Frequency Oscillator modulation:
```toml
[sensors.oscillator]
enabled = true
waveform = "sine" # sine, square, triangle, sawtooth
frequency = 0.05 # 20 second cycle (gentle)
amplitude = 0.5 # 50% modulation
```
### Effect Configuration
Effect intensities can be configured with initial values:
```toml
[effect_configs.noise]
enabled = true
intensity = 1.0
[effect_configs.fade]
enabled = true
intensity = 1.0
[effect_configs.glitch]
enabled = true
intensity = 0.5
```
## Troubleshooting
### No Display Output
- Check if display backend is available (pygame, terminal, etc.)
- Use `--display null` for headless testing
### Effects Not Modulating
- Ensure sensor is enabled in presets.toml
- Check effect intensity values in configuration
### Performance Issues
- Use `--positioning relative` for large buffers
- Reduce viewport height for better performance
- Use null display for testing without rendering