Files
Nakano Kenji 7917b066f2 Initial release v1.0.0
- MCP Server: Native image display in Cursor/Claude
- ComfyUI HTTP API: /anima/health, /anima/schema, /anima/knowledge, /anima/generate
- Standalone FastAPI server and CLI tool
- Structured prompt system with 14 aspect ratio presets
- Expert knowledge base for Anima prompting
2026-02-03 16:18:57 +08:00

67 lines
2.1 KiB
Python

"""
命令行工具。
用法(在 ComfyUI-AnimaTool 目录下):
python -m servers.cli --json-file example.json
python -m servers.cli --json '{"aspect_ratio":"9:16", ...}'
"""
from __future__ import annotations
import argparse
import json
import sys
from pathlib import Path
from typing import Any, Dict
# 确保能 import 上层 executor
_PARENT = Path(__file__).resolve().parent.parent
if str(_PARENT) not in sys.path:
sys.path.insert(0, str(_PARENT))
from executor import AnimaExecutor, AnimaToolConfig
def _load_json_arg(s: str) -> Dict[str, Any]:
try:
obj = json.loads(s)
except Exception as e:
raise SystemExit(f"--json 解析失败:{e}") from e
if not isinstance(obj, dict):
raise SystemExit("--json 必须是一个 JSON object")
return obj
def _load_json_file(path: str) -> Dict[str, Any]:
p = Path(path)
if not p.exists():
raise SystemExit(f"找不到文件:{p}")
obj = json.loads(p.read_text(encoding="utf-8"))
if not isinstance(obj, dict):
raise SystemExit("--json-file 内容必须是一个 JSON object")
return obj
def main() -> int:
parser = argparse.ArgumentParser(description="Anima Tool CLI (ComfyUI)")
parser.add_argument("--comfyui-url", default="http://127.0.0.1:8188", help="ComfyUI 地址")
parser.add_argument("--json", default=None, help="直接传入 JSON object 字符串")
parser.add_argument("--json-file", default=None, help="从文件读取 JSON object")
args = parser.parse_args()
if not args.json and not args.json_file:
raise SystemExit("必须提供 --json 或 --json-file")
if args.json and args.json_file:
raise SystemExit("只能二选一:--json 或 --json-file")
payload = _load_json_arg(args.json) if args.json else _load_json_file(args.json_file)
cfg = AnimaToolConfig(comfyui_url=str(args.comfyui_url))
ex = AnimaExecutor(config=cfg)
result = ex.generate(payload)
print(json.dumps(result, ensure_ascii=False, indent=2))
return 0
if __name__ == "__main__":
raise SystemExit(main())