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:
10
cmdline.py
10
cmdline.py
@@ -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":
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user