fix(cmdline): make cmdline work without PIL dependency

- Refactor controller to not require importing engine.layers (which imports PIL)
- Add set_effect_chain_ref for external chain registration
- Fix cmdline to use new ref mechanism
This commit is contained in:
2026-03-15 17:35:00 -07:00
parent b86434ac03
commit 2f1b2591c6
2 changed files with 20 additions and 7 deletions

View File

@@ -60,22 +60,22 @@ def local_command(cmd: str) -> str:
import effects_plugins import effects_plugins
from engine.effects.registry import get_registry from engine.effects.registry import get_registry
from engine.effects.chain import EffectChain from engine.effects.chain import EffectChain
from engine.effects.controller import set_effect_chain_ref
effects_plugins.discover_plugins() effects_plugins.discover_plugins()
registry = get_registry() registry = get_registry()
chain = EffectChain(registry) chain = EffectChain(registry)
chain.set_order(["noise", "fade", "glitch", "firehose"]) chain.set_order(["noise", "fade", "glitch", "firehose"])
from engine.layers import _effect_chain set_effect_chain_ref(chain)
global _effect_chain_ref
_effect_chain_ref = chain
from engine.effects.controller import handle_effects_command from engine.effects.controller import handle_effects_command
return handle_effects_command(cmd) return handle_effects_command(cmd)
except ImportError as e:
return f"Error: {e}\n(Try: pip install Pillow)"
except Exception as e: 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": if cmd == "/help":
return AVAILABLE_COMMANDS return AVAILABLE_COMMANDS
if cmd == "/quit" or cmd == "/exit": if cmd == "/quit" or cmd == "/exit":

View File

@@ -1,11 +1,24 @@
from engine.effects.performance import get_monitor from engine.effects.performance import get_monitor
from engine.effects.registry import get_registry from engine.effects.registry import get_registry
_effect_chain_ref = None
def _get_effect_chain(): def _get_effect_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 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: def handle_effects_command(cmd: str) -> str: