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
337 lines
7.1 KiB
TOML
337 lines
7.1 KiB
TOML
# Mainline Presets Configuration
|
|
# Human- and machine-readable preset definitions
|
|
#
|
|
# Format: TOML
|
|
# Usage: mainline --preset <name>
|
|
#
|
|
# Built-in presets can be overridden by user presets in:
|
|
# - ~/.config/mainline/presets.toml
|
|
# - ./presets.toml (local override)
|
|
|
|
# ============================================
|
|
# TEST PRESETS
|
|
# ============================================
|
|
|
|
[presets.test-single-item]
|
|
description = "Test: Single item to isolate rendering stage issues"
|
|
source = "empty"
|
|
display = "terminal"
|
|
camera = "feed"
|
|
effects = []
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.test-single-item-border]
|
|
description = "Test: Single item with border effect only"
|
|
source = "empty"
|
|
display = "terminal"
|
|
camera = "feed"
|
|
effects = ["border"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.test-headlines]
|
|
description = "Test: Headlines from cache with border effect"
|
|
source = "headlines"
|
|
display = "terminal"
|
|
camera = "feed"
|
|
effects = ["border"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.test-headlines-noise]
|
|
description = "Test: Headlines from cache with noise effect"
|
|
source = "headlines"
|
|
display = "terminal"
|
|
camera = "feed"
|
|
effects = ["noise"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.test-demo-effects]
|
|
description = "Test: All demo effects with terminal display"
|
|
source = "headlines"
|
|
display = "terminal"
|
|
camera = "feed"
|
|
effects = ["noise", "fade", "firehose"]
|
|
camera_speed = 0.3
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
# ============================================
|
|
# DATA SOURCE GALLERY
|
|
# ============================================
|
|
|
|
[presets.gallery-sources]
|
|
description = "Gallery: Headlines data source"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "feed"
|
|
effects = []
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-sources-poetry]
|
|
description = "Gallery: Poetry data source"
|
|
source = "poetry"
|
|
display = "pygame"
|
|
camera = "feed"
|
|
effects = ["fade"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-sources-pipeline]
|
|
description = "Gallery: Pipeline introspection"
|
|
source = "pipeline-inspect"
|
|
display = "pygame"
|
|
camera = "scroll"
|
|
effects = []
|
|
camera_speed = 0.3
|
|
viewport_width = 100
|
|
viewport_height = 35
|
|
|
|
[presets.gallery-sources-empty]
|
|
description = "Gallery: Empty source (for border tests)"
|
|
source = "empty"
|
|
display = "terminal"
|
|
camera = "feed"
|
|
effects = ["border"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
# ============================================
|
|
# EFFECT GALLERY
|
|
# ============================================
|
|
|
|
[presets.gallery-effect-noise]
|
|
description = "Gallery: Noise effect"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "feed"
|
|
effects = ["noise"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-effect-fade]
|
|
description = "Gallery: Fade effect"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "feed"
|
|
effects = ["fade"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-effect-glitch]
|
|
description = "Gallery: Glitch effect"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "feed"
|
|
effects = ["glitch"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-effect-firehose]
|
|
description = "Gallery: Firehose effect"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "feed"
|
|
effects = ["firehose"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-effect-hud]
|
|
description = "Gallery: HUD effect"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "feed"
|
|
effects = ["hud"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-effect-tint]
|
|
description = "Gallery: Tint effect"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "feed"
|
|
effects = ["tint"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-effect-border]
|
|
description = "Gallery: Border effect"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "feed"
|
|
effects = ["border"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-effect-crop]
|
|
description = "Gallery: Crop effect"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "feed"
|
|
effects = ["crop"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
# ============================================
|
|
# CAMERA GALLERY
|
|
# ============================================
|
|
|
|
[presets.gallery-camera-feed]
|
|
description = "Gallery: Feed camera (rapid single-item)"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "feed"
|
|
effects = ["noise"]
|
|
camera_speed = 1.0
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-camera-scroll]
|
|
description = "Gallery: Scroll camera (smooth)"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "scroll"
|
|
effects = ["noise"]
|
|
camera_speed = 0.3
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-camera-horizontal]
|
|
description = "Gallery: Horizontal camera"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "horizontal"
|
|
effects = ["noise"]
|
|
camera_speed = 0.5
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-camera-omni]
|
|
description = "Gallery: Omni camera"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "omni"
|
|
effects = ["noise"]
|
|
camera_speed = 0.5
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-camera-floating]
|
|
description = "Gallery: Floating camera"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "floating"
|
|
effects = ["noise"]
|
|
camera_speed = 1.0
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-camera-bounce]
|
|
description = "Gallery: Bounce camera"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "bounce"
|
|
effects = ["noise"]
|
|
camera_speed = 1.0
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
# ============================================
|
|
# DISPLAY GALLERY
|
|
# ============================================
|
|
|
|
[presets.gallery-display-terminal]
|
|
description = "Gallery: Terminal display"
|
|
source = "headlines"
|
|
display = "terminal"
|
|
camera = "feed"
|
|
effects = ["noise"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-display-pygame]
|
|
description = "Gallery: Pygame display"
|
|
source = "headlines"
|
|
display = "pygame"
|
|
camera = "feed"
|
|
effects = ["noise"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-display-websocket]
|
|
description = "Gallery: WebSocket display"
|
|
source = "headlines"
|
|
display = "websocket"
|
|
camera = "feed"
|
|
effects = ["noise"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
[presets.gallery-display-multi]
|
|
description = "Gallery: MultiDisplay (terminal + pygame)"
|
|
source = "headlines"
|
|
display = "multi:terminal,pygame"
|
|
camera = "feed"
|
|
effects = ["noise"]
|
|
camera_speed = 0.1
|
|
viewport_width = 80
|
|
viewport_height = 24
|
|
|
|
# ============================================
|
|
# SENSOR CONFIGURATION
|
|
# ============================================
|
|
|
|
[sensors.mic]
|
|
enabled = false
|
|
threshold_db = 50.0
|
|
|
|
[sensors.oscillator]
|
|
enabled = false
|
|
waveform = "sine"
|
|
frequency = 1.0
|
|
|
|
# ============================================
|
|
# EFFECT CONFIGURATIONS
|
|
# ============================================
|
|
|
|
[effect_configs.noise]
|
|
enabled = true
|
|
intensity = 1.0
|
|
|
|
[effect_configs.fade]
|
|
enabled = true
|
|
intensity = 1.0
|
|
|
|
[effect_configs.glitch]
|
|
enabled = true
|
|
intensity = 0.5
|
|
|
|
[effect_configs.firehose]
|
|
enabled = true
|
|
intensity = 1.0
|
|
|
|
[effect_configs.hud]
|
|
enabled = true
|
|
intensity = 1.0
|