forked from genewildish/Mainline
- Fix TerminalDisplay: add screen clear each frame (cursor home + erase down) - Fix CameraStage: use set_canvas_size instead of read-only viewport properties - Fix Glitch effect: preserve visible line lengths, remove cursor positioning - Fix Fade effect: return original line when fade=0 instead of empty string - Fix Noise effect: use input line length instead of terminal_width - Remove HUD effect from all presets (redundant with border FPS display) - Add regression tests for effect dimension stability - Add docs/ARCHITECTURE.md with Mermaid diagrams - Add mise tasks: diagram-ascii, diagram-validate, diagram-check - Move markdown docs to docs/ (ARCHITECTURE, Refactor, hardware specs) - Remove redundant requirements files (use pyproject.toml) - Add *.dot and *.png to .gitignore Closes #25
104 lines
2.2 KiB
Markdown
104 lines
2.2 KiB
Markdown
---
|
|
name: mainline-presets
|
|
description: Creating pipeline presets in TOML format for Mainline
|
|
compatibility: opencode
|
|
metadata:
|
|
audience: developers
|
|
source_type: codebase
|
|
---
|
|
|
|
## What This Skill Covers
|
|
|
|
This skill covers how to create pipeline presets in TOML format for Mainline's rendering pipeline.
|
|
|
|
## Key Concepts
|
|
|
|
### Preset Loading Order
|
|
|
|
Presets are loaded from multiple locations (later overrides earlier):
|
|
1. Built-in: `engine/presets.toml`
|
|
2. User config: `~/.config/mainline/presets.toml`
|
|
3. Local override: `./presets.toml`
|
|
|
|
### PipelinePreset Dataclass
|
|
|
|
```python
|
|
@dataclass
|
|
class PipelinePreset:
|
|
name: str
|
|
description: str = ""
|
|
source: str = "headlines" # Data source
|
|
display: str = "terminal" # Display backend
|
|
camera: str = "scroll" # Camera mode
|
|
effects: list[str] = field(default_factory=list)
|
|
border: bool = False
|
|
```
|
|
|
|
### TOML Format
|
|
|
|
```toml
|
|
[presets.my-preset]
|
|
description = "My custom pipeline"
|
|
source = "headlines"
|
|
display = "terminal"
|
|
camera = "scroll"
|
|
effects = ["noise", "fade"]
|
|
border = true
|
|
```
|
|
|
|
## Creating a Preset
|
|
|
|
### Option 1: User Config
|
|
|
|
Create/edit `~/.config/mainline/presets.toml`:
|
|
|
|
```toml
|
|
[presets.my-cool-preset]
|
|
description = "Noise and glitch effects"
|
|
source = "headlines"
|
|
display = "terminal"
|
|
effects = ["noise", "glitch"]
|
|
```
|
|
|
|
### Option 2: Local Override
|
|
|
|
Create `./presets.toml` in project root:
|
|
|
|
```toml
|
|
[presets.dev-inspect]
|
|
description = "Pipeline introspection for development"
|
|
source = "headlines"
|
|
display = "terminal"
|
|
effects = ["hud"]
|
|
```
|
|
|
|
### Option 3: Built-in
|
|
|
|
Edit `engine/presets.toml` (requires PR to repository).
|
|
|
|
## Available Sources
|
|
|
|
- `headlines` - RSS news feeds
|
|
- `poetry` - Literature mode
|
|
- `pipeline-inspect` - Live DAG visualization
|
|
|
|
## Available Displays
|
|
|
|
- `terminal` - ANSI terminal
|
|
- `websocket` - Web browser
|
|
- `sixel` - Sixel graphics
|
|
- `null` - Headless
|
|
|
|
## Available Effects
|
|
|
|
See `effects_plugins/`:
|
|
- noise, fade, glitch, firehose
|
|
- border, crop, tint, hud
|
|
|
|
## Validation Functions
|
|
|
|
Use these from `engine/pipeline/presets.py`:
|
|
- `validate_preset()` - Validate preset structure
|
|
- `validate_signal_path()` - Detect circular dependencies
|
|
- `generate_preset_toml()` - Generate skeleton preset
|