summaryrefslogtreecommitdiff
path: root/src/mcp_sd15/cli.py
blob: 8bc1e2033f37b5ff26822b5b0586c955749a65de (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
"""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="mcp-sd15")
    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)
        create_server(service).run()
    except SD15Error as exc:
        logging.getLogger(__name__).error("startup failed: %s", exc)
        return 2
    return 0


if __name__ == "__main__":
    raise SystemExit(main())