---
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
- `null` - Headless
- `moderngl` - GPU-accelerated (optional)

## 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
