Files
holo-q-comfy-api-liberation/mappings/__init__.py
T
nuck 1b3e288e2c Initial release v1.0.0
ComfyUI API Liberation - Use your own API keys directly with vendors.

Features:
- Direct API routing for 20+ providers (Google, OpenAI, Stability, etc.)
- No ComfyUI account required
- Local asset vault - images/videos stored locally
- API key management UI in ComfyUI settings
- Environment variable and config file support
- Auto-detection of unmapped proxy endpoints
- Graceful fallback when keys not configured
2026-01-22 00:32:10 -05:00

78 lines
2.1 KiB
Python

"""
Endpoint mapping registry.
Maps ComfyUI proxy paths to direct vendor APIs.
"""
import logging
from typing import Callable, TypedDict
log = logging.getLogger("comfy-api-liberation")
class ProviderMapping(TypedDict, total=False):
provider: str # Key name in config (e.g., "google")
url_template: str # Vendor URL with {0}, {1} placeholders
auth_fn: Callable[[str], dict[str, str]] # Returns auth headers given API key
request_transform: Callable | None # Optional request body transform
response_transform: Callable | None # Optional response body transform
# Global registry: regex pattern → mapping
ENDPOINT_MAP: dict[str, ProviderMapping] = {}
def register(pattern: str, mapping: ProviderMapping):
"""Register a new endpoint mapping."""
ENDPOINT_MAP[pattern] = mapping
log.debug(f"Registered mapping: {pattern} → {mapping['provider']}")
def register_provider_module(module):
"""Auto-register all mappings from a provider module that has MAPPINGS dict."""
if hasattr(module, 'MAPPINGS'):
for pattern, mapping in module.MAPPINGS.items():
register(pattern, mapping)
def _load_all_providers():
"""Load all provider mapping modules."""
from . import (
google,
openai,
stability,
bfl,
ideogram,
recraft,
luma,
runway,
kling,
minimax,
pika,
tripo,
rodin,
topaz,
byteplus,
pixverse,
vidu,
moonvalley,
ltx,
wan,
)
providers = [
google, openai, stability, bfl, ideogram, recraft,
luma, runway, kling, minimax, pika, tripo, rodin,
topaz, byteplus, pixverse, vidu, moonvalley, ltx, wan,
]
for provider in providers:
try:
register_provider_module(provider)
except Exception as e:
log.warning(f"Failed to load provider {provider.__name__}: {e}")
log.info(f"Loaded {len(ENDPOINT_MAP)} endpoint mappings")
# Load on import
_load_all_providers()