feat(figment): integrate figment overlay into scroll loop

Wire render_figment_overlay() into stream() between the effects chain
and the ntfy message overlay, with optional cairosvg import guard.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-19 10:49:59 -07:00
parent 79d271c42b
commit 4cf316c280

View File

@@ -19,6 +19,7 @@ from engine.layers import (
apply_glitch, apply_glitch,
process_effects, process_effects,
render_firehose, render_firehose,
render_figment_overlay,
render_message_overlay, render_message_overlay,
render_ticker_zone, render_ticker_zone,
) )
@@ -53,6 +54,16 @@ def stream(items, ntfy_poller, mic_monitor, display: Display | None = None):
msg_cache = (None, None) msg_cache = (None, None)
frame_number = 0 frame_number = 0
# Figment overlay (optional — requires cairosvg)
try:
from effects_plugins.figment import FigmentEffect
from engine.effects.registry import get_registry
_fg_plugin = get_registry().get("figment")
figment = _fg_plugin if isinstance(_fg_plugin, FigmentEffect) else None
except ImportError:
figment = None
while True: while True:
if queued >= config.HEADLINE_LIMIT and not active: if queued >= config.HEADLINE_LIMIT and not active:
break break
@@ -123,6 +134,13 @@ def stream(items, ntfy_poller, mic_monitor, display: Display | None = None):
firehose_buf = render_firehose(items, w, fh, h) firehose_buf = render_firehose(items, w, fh, h)
buf.extend(firehose_buf) buf.extend(firehose_buf)
# Figment overlay (between effects and ntfy message)
if figment and figment.config.enabled:
figment_state = figment.get_figment_state(frame_number, w, h)
if figment_state is not None:
figment_buf = render_figment_overlay(figment_state, w, h)
buf.extend(figment_buf)
if msg_overlay: if msg_overlay:
buf.extend(msg_overlay) buf.extend(msg_overlay)