"""Command-line entry point.""" from __future__ import annotations import argparse import logging from collections.abc import Sequence from pathlib import Path from . import __version__ from .config import load_config from .errors import SD15Error from .model_manager import ModelManager from .server import create_server from .service import ImageGenerationService def parser() -> argparse.ArgumentParser: result = argparse.ArgumentParser(prog="generate-image-sd15-mcp") result.add_argument("--config", type=Path, default=Path("config.toml")) result.add_argument("--version", action="version", version=f"%(prog)s {__version__}") return result def main(argv: Sequence[str] | None = None) -> int: args = parser().parse_args(argv) logging.basicConfig( level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s: %(message)s", ) try: config = load_config(args.config) logging.getLogger(__name__).info( "loading checkpoint=%s loras=%d", config.model.checkpoint_path(), len(config.model.loras), ) backend = ModelManager(config) service = ImageGenerationService(config, backend) server = create_server(service) if config.server.transport == "streamable-http": server.run( transport="streamable-http", host=config.server.host, port=config.server.port, ) else: server.run() except SD15Error as exc: logging.getLogger(__name__).error("startup failed: %s", exc) return 2 return 0 if __name__ == "__main__": raise SystemExit(main())