ghmk's picture
Initial deployment of Character Forge
5b6e956
"""
Base plugin interface for all backend plugins.
All backends (ComfyUI, OmniGen2, Gemini, etc.) implement this interface.
"""
from abc import ABC, abstractmethod
from typing import Any, Dict, Optional, List
from PIL import Image
from pathlib import Path
import yaml
class BaseBackendPlugin(ABC):
"""Abstract base class for all backend plugins."""
def __init__(self, config_path: Path):
"""Initialize plugin with configuration."""
self.config = self.load_config(config_path)
self.name = self.config.get('name', 'Unknown')
self.version = self.config.get('version', '1.0.0')
self.enabled = self.config.get('enabled', True)
@abstractmethod
def health_check(self) -> bool:
"""Check if backend is available and healthy."""
pass
@abstractmethod
def generate_image(
self,
prompt: str,
input_images: Optional[List[Image.Image]] = None,
**kwargs
) -> Image.Image:
"""Generate image using this backend."""
pass
@abstractmethod
def get_capabilities(self) -> Dict[str, Any]:
"""Report backend capabilities."""
pass
def load_config(self, config_path: Path) -> Dict[str, Any]:
"""Load plugin configuration from YAML."""
if not config_path.exists():
return {}
with open(config_path) as f:
return yaml.safe_load(f) or {}
def __repr__(self):
return f"{self.__class__.__name__}(name={self.name}, version={self.version})"