# Mainline Pipeline ## Content to Display Rendering Pipeline ```mermaid flowchart TD subgraph Sources["Data Sources"] RSS[("RSS Feeds")] Poetry[("Poetry Feed")] Ntfy[("Ntfy Messages")] Mic[("Microphone")] end subgraph Fetch["Fetch Layer"] FC[fetch_all] FP[fetch_poetry] Cache[(Cache)] end subgraph Prepare["Prepare Layer"] MB[make_block] Strip[strip_tags] Trans[translate] end subgraph Scroll["Scroll Engine"] CAM[Camera] NH[next_headline] RTZ[render_ticker_zone] Grad[lr_gradient] VT[vis_trunc / vis_offset] end subgraph Effects["Effect Pipeline"] subgraph EffectsPlugins["Effect Plugins"] Noise[NoiseEffect] Fade[FadeEffect] Glitch[GlitchEffect] Firehose[FirehoseEffect] Hud[HudEffect] end EC[EffectChain] ER[EffectRegistry] end subgraph Render["Render Layer"] RL[render_line] TL[apply_ticker_layout] end subgraph Display["Display Backends"] TD[TerminalDisplay] PD[PygameDisplay] SD[SixelDisplay] KD[KittyDisplay] WSD[WebSocketDisplay] ND[NullDisplay] end Sources --> Fetch RSS --> FC Poetry --> FP FC --> Cache FP --> Cache Cache --> MB Strip --> MB Trans --> MB MB --> NH NH --> RTZ CAM --> RTZ Grad --> RTZ VT --> RTZ RTZ --> EC EC --> ER ER --> EffectsPlugins EffectsPlugins --> RL RL --> Display Ntfy --> RL Mic --> RL style Sources fill:#f9f,stroke:#333 style Fetch fill:#bbf,stroke:#333 style Scroll fill:#bfb,stroke:#333 style Effects fill:#fbf,stroke:#333 style Render fill:#ffb,stroke:#333 style Display fill:#bff,stroke:#333 ``` ## Camera Modes ```mermaid stateDiagram-v2 [*] --> Vertical Vertical --> Horizontal: mode change Horizontal --> Omni: mode change Omni --> Floating: mode change Floating --> Vertical: mode change state Vertical { [*] --> ScrollUp ScrollUp --> ScrollUp: +y each frame } state Horizontal { [*] --> ScrollLeft ScrollLeft --> ScrollLeft: +x each frame } state Omni { [*] --> Diagonal Diagonal --> Diagonal: +x, +y each frame } state Floating { [*] --> Bobbing Bobbing --> Bobbing: sin(time) for x,y } ```