#!/usr/bin/env python3 """ Hunyuan3D Web CLI """ import argparse import json import sys from .api import Hunyuan3DAPI, load_cookies_from_file from .config import get_cookie_path _DEFAULT_COOKIE = str(get_cookie_path()) def main(): parser = argparse.ArgumentParser(description="Hunyuan3D Web CLI") subparsers = parser.add_subparsers(dest="command") quota_parser = subparsers.add_parser("quota", help="查询配额") quota_parser.add_argument("--cookies", "-c", default=_DEFAULT_COOKIE, help="Cookie文件路径") list_parser = subparsers.add_parser("list", help="查询作品列表") list_parser.add_argument("--cookies", "-c", default=_DEFAULT_COOKIE, help="Cookie文件路径") text_parser = subparsers.add_parser("text", help="文生3D") text_parser.add_argument("prompt", help="文本描述") text_parser.add_argument("--cookies", "-c", default=_DEFAULT_COOKIE, help="Cookie文件路径") text_parser.add_argument("--title", "-t", default="", help="作品标题") status_parser = subparsers.add_parser("status", help="查询生成状态") status_parser.add_argument("creation_id", help="创作ID") status_parser.add_argument("--cookies", "-c", default=_DEFAULT_COOKIE, help="Cookie文件路径") formats_parser = subparsers.add_parser("formats", help="列出创作可用下载格式") formats_parser.add_argument("creation_id", help="创作ID") formats_parser.add_argument("--converted", action="store_true", help="包含转换格式 (fbx/stl/usdz/mp4/gif)") formats_parser.add_argument("--cookies", "-c", default=_DEFAULT_COOKIE, help="Cookie文件路径") download_parser = subparsers.add_parser("download", help="下载指定格式模型") download_parser.add_argument("creation_id", help="创作ID") download_parser.add_argument("--format", "-f", default="glb", help="格式键名 (默认: glb)") download_parser.add_argument("--output", "-o", default=None, help="本地保存路径 (默认自动推断)") download_parser.add_argument("--converted", action="store_true", help="若格式为转换格式,自动调用转换接口") download_parser.add_argument("--cookies", "-c", default=_DEFAULT_COOKIE, help="Cookie文件路径") args = parser.parse_args() if not args.command: parser.print_help() sys.exit(1) cookies = load_cookies_from_file(args.cookies) api = Hunyuan3DAPI(cookies) if args.command == "quota": print(json.dumps(api.get_quota_info(), indent=2, ensure_ascii=False)) elif args.command == "list": print(json.dumps(api.get_creation_list(), indent=2, ensure_ascii=False)) elif args.command == "text": result = api.generate_text(args.prompt, title=args.title) print(json.dumps(result, indent=2, ensure_ascii=False)) elif args.command == "status": print(json.dumps(api.get_generation_status(args.creation_id), indent=2, ensure_ascii=False)) elif args.command == "formats": urls = api.get_model_urls(args.creation_id, include_converted=args.converted) if not urls: print("暂无可用格式,可能生成未完成或失败。", file=sys.stderr) sys.exit(1) for key, url in urls.items(): print(f"{key}: {url}") elif args.command == "download": path = api.download_model(args.creation_id, args.format, args.output, include_converted=args.converted) print(f"已下载: {path}") if __name__ == "__main__": main()