diff --git a/cmdline.py b/cmdline.py index 1945df7..d5aa6b4 100644 --- a/cmdline.py +++ b/cmdline.py @@ -60,22 +60,22 @@ def local_command(cmd: str) -> str: import effects_plugins from engine.effects.registry import get_registry from engine.effects.chain import EffectChain + from engine.effects.controller import set_effect_chain_ref effects_plugins.discover_plugins() registry = get_registry() chain = EffectChain(registry) chain.set_order(["noise", "fade", "glitch", "firehose"]) - from engine.layers import _effect_chain - - global _effect_chain_ref - _effect_chain_ref = chain + set_effect_chain_ref(chain) from engine.effects.controller import handle_effects_command return handle_effects_command(cmd) + except ImportError as e: + return f"Error: {e}\n(Try: pip install Pillow)" except Exception as e: - return f"Error: {type(e).__name__}: {e}\n(Effects require PIL - run with --send or run mainline first)" + return f"Error: {type(e).__name__}: {e}" if cmd == "/help": return AVAILABLE_COMMANDS if cmd == "/quit" or cmd == "/exit": diff --git a/engine/effects/controller.py b/engine/effects/controller.py index 2c79bd2..eb547d5 100644 --- a/engine/effects/controller.py +++ b/engine/effects/controller.py @@ -1,11 +1,24 @@ from engine.effects.performance import get_monitor from engine.effects.registry import get_registry +_effect_chain_ref = None + def _get_effect_chain(): - from engine.layers import get_effect_chain as _chain + global _effect_chain_ref + if _effect_chain_ref is not None: + return _effect_chain_ref + try: + from engine.layers import get_effect_chain as _chain - return _chain() + return _chain() + except Exception: + return None + + +def set_effect_chain_ref(chain) -> None: + global _effect_chain_ref + _effect_chain_ref = chain def handle_effects_command(cmd: str) -> str: