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.
5.4 KiB
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:
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:
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:
python -m mainline --preset demo-pygame --display pygame
4. Other Presets
poetry: Poetry feed with subtle effectsfirehose: High-speed firehose modeui: Interactive UI mode with control panelfixture: Uses cached headline fixtureswebsocket: WebSocket display mode
Positioning Modes
The --positioning flag controls how text is positioned in the terminal:
# 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
- Source Stage: Headlines data source
- Viewport Filter: Filters items to viewport height
- Font Stage: Renders headlines as block characters
- Camera Stages: Scrolling animation
- Effect Stages: noise, fade, glitch, firehose
- Display Stage: Terminal output
Demo Pipeline
- Source Stage: Headlines data source
- Viewport Filter: Filters items to viewport height
- Font Stage: Renders headlines as block characters
- Camera Stages: Scrolling animation
- Effect Stages: noise, fade, glitch, firehose, hud
- Message Overlay: Ntfy message integration
- Display Stage: Pygame output
Command-Line Examples
Basic Usage
# 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
# 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:
[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:
[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:
[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 nullfor headless testing
Effects Not Modulating
- Ensure sensor is enabled in presets.toml
- Check effect intensity values in configuration
Performance Issues
- Use
--positioning relativefor large buffers - Reduce viewport height for better performance
- Use null display for testing without rendering