phantom-wan

113 downloads 0 likes on ModelScope updated

Model card

{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": "# Phantom 模型环境准备 - ModelScope Notebook (ModelScope 仓库版)\n\n本 Notebook 直接从 ModelScope 仓库 vftfnn/phantom-wan 下载全部模型文件(主模型 / VAE / 文本编码器),国内速度快、无需 HF 镜像。\n\n推荐配置: AMD MI GPU 环境(192GB 显存)或其他 GPU 环境(至少 16GB 显存)" }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 第 1 步:检查环境" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "============================================================\n", "环境信息\n", "============================================================\n", "Python 版本: 3.11.11 (main, Mar 11 2025, 18:25:39) [GCC 11.4.0]\n", "PyTorch 版本: 2.3.1+cpu\n", "CUDA 可用: False\n", "⚠️ 警告: 未检测到 GPU,建议切换到 GPU 环境\n", "\n", "当前工作目录: /mnt/workspace\n" ] } ], "source": [ "import sys\n", "import os\n", "import torch\n", "\n", "print("=" * 60)\n", "print("环境信息")\n", "print("=" * 60)\n", "print(f"Python 版本: {sys.version}")\n", "print(f"PyTorch 版本: {torch.version}")\n", "print(f"CUDA 可用: {torch.cuda.is_available()}")\n", "\n", "if torch.cuda.is_available():\n", " print(f"CUDA 版本: {torch.version.cuda}")\n", " print(f"GPU 数量: {torch.cuda.device_count()}")\n", " for i in range(torch.cuda.device_count()):\n", " print(f"GPU {i}: {torch.cuda.get_device_name(i)}")\n", " total_memory = torch.cuda.get_device_properties(i).total_memory / 10243\n", " print(f" 显存: {total_memory:.2f} GB")\n", "else:\n", " print("⚠️ 警告: 未检测到 GPU,建议切换到 GPU 环境")\n", "\n", "print("\n当前工作目录:", os.getcwd())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": "## 第 2 步:安装 ModelScope SDK\n\n⚠️ 模型全部托管在 ModelScope 仓库 vftfnn/phantom-wan,无需配置 HF 镜像" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# 安装 ModelScope SDK(用于从 ModelScope 仓库下载模型)\nimport subprocess\n\nprint("📦 安装 modelscope ...")\nsubprocess.run(["pip", "install", "-q", "-U", "modelscope"], check=True)\n\nimport modelscope\nprint(f"✅ ModelScope 版本: {modelscope.version}")\nprint("模型仓库: vftfnn/phantom-wan")" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 第 3 步:安装依赖" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%%bash\n# 安装其他必要依赖(modelscope 已在上一步安装)\npip install -q accelerate transformers safetensors\n\necho "✅ 依赖安装完成"" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 第 4 步:克隆 ComfyUI" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "⚠️ ComfyUI 已存在,跳过克隆\n" ] } ], "source": [ "%%bash\n", "# 创建工作目录\n", "mkdir -p ~/phantom-workspace\n", "cd ~/phantom-workspace\n", "\n", "# 克隆 ComfyUI(如果不存在)\n", "if [ ! -d "ComfyUI" ]; then\n", " echo "📦 克隆 ComfyUI..."\n", " git clone https://github.com/comfyanonymous/ComfyUI.git\n", " cd ComfyUI\n", " pip install -q -r requirements.txt\n", " echo "✅ ComfyUI 安装完成"\n", "else\n", " echo "⚠️ ComfyUI 已存在,跳过克隆"\n", "fi" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 第 5 步:安装 ComfyUI-GGUF 插件" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%%bash\n# 确保 custom_nodes 目录存在(防止 ComfyUI clone 不完整导致 cd 失败)\nmkdir -p ~/phantom-workspace/ComfyUI/custom_nodes\ncd ~/phantom-workspace/ComfyUI/custom_nodes\n\n# 克隆 GGUF 插件(如果不存在)\nif [ ! -d "ComfyUI-GGUF" ]; then\n echo "🔌 克隆 ComfyUI-GGUF 插件..."\n git clone https://github.com/city96/ComfyUI-GGUF.git\n cd ComfyUI-GGUF\n pip install -q -r requirements.txt\n echo "✅ ComfyUI-GGUF 插件安装完成"\nelse\n echo "⚠️ ComfyUI-GGUF 已存在,跳过克隆"\nfi" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 第 6 步:创建模型目录" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "✅ 模型目录创建完成:\n", " - unet/ (主模型)\n", " - text_encoders/ (文本编码器)\n", " - vae/ (视频解码器)\n" ] } ], "source": [ "%%bash\n", "cd ~/phantom-workspace/ComfyUI/models\n", "\n", "# 创建模型目录\n", "mkdir -p unet\n", "mkdir -p text_encoders\n", "mkdir -p vae\n", "\n", "echo "✅ 模型目录创建完成:"\n", "echo " - unet/ (主模型)"\n", "echo " - text_encoders/ (文本编码器)"\n", "echo " - vae/ (视频解码器)"" ] }, { "cell_type": "markdown", "metadata": {}, "source": "## 第 7 步:从 ModelScope 仓库下载模型文件\n\n⚠️ 注意: \n- 全部从 ModelScope 仓库 vftfnn/phantom-wan 下载,国内速度快\n- 下载大约需要 10-20 分钟,总共约 15GB\n- 假设仓库内文件名为:Phantom_Wan_14B-Q4_K_M.gguf / wan_2.1_vae.safetensors / umt5-xxl-encoder-bf16.safetensors\n- 若你上传时用了其它文件名或子目录,请修改下方 FILES 里的 filename" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "from modelscope import snapshot_download\nfrom modelscope.hub.file_download import model_file_download\nimport os\nimport shutil\n\nbase_path = os.path.expanduser("~/phantom-workspace/ComfyUI/models")\nREPO_ID = "vftfnn/phantom-wan"\n\n# 仓库内文件名 -> ComfyUI 目标子目录\n# 若你上传时改了文件名 / 放到了子目录,修改这里的 filename 即可(可带子路径,如 "gguf/xxx.gguf")\nFILES = [\n {"desc": "主模型 (GGUF Q4_K_M, ~10GB)", "filename": "Phantom_Wan_14B-Q4_K_M.gguf", "subdir": "unet"},\n {"desc": "VAE 解码器 (~250MB)", "filename": "wan_2.1_vae.safetensors", "subdir": "vae"},\n {"desc": "文本编码器 (~11GB)", "filename": "umt5-xxl-encoder-bf16.safetensors", "subdir": "text_encoders"},\n]\n\nprint("=" * 60)\nprint(f"从 ModelScope 仓库下载: {REPO_ID}")\nprint("=" * 60)\nprint()\n\nok_count = 0\nfor i, item in enumerate(FILES, 1):\n dst_dir = os.path.join(base_path, item["subdir"])\n os.makedirs(dst_dir, exist_ok=True)\n print(f"📥 {i}/{len(FILES)}: 下载{item['desc']} ...")\n print(f" 文件: {item['filename']} -> models/{item['subdir']}/")\n try:\n # 下载到 ModelScope 缓存\n cached = model_file_download(model_id=REPO_ID, file_path=item["filename"])\n # 复制/移动到 ComfyUI 目标目录(用文件名的 basename,避免带上子路径)\n dst = os.path.join(dst_dir, os.path.basename(item["filename"]))\n if os.path.abspath(cached) != os.path.abspath(dst):\n shutil.copy2(cached, dst)\n size_gb = os.path.getsize(dst) / 10243\n print(f"✅ 完成: {dst} ({size_gb:.2f} GB)")\n ok_count += 1\n except Exception as e:\n print(f"❌ 下载失败: {e}")\n print(" 请确认该文件已上传到仓库、且 filename 与仓库内实际名称一致")\n print()\n\nprint("=" * 60)\nprint(f"✅ 下载结束:成功 {ok_count}/{len(FILES)}")\nprint("=" * 60)" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 第 8 步:下载示例工作流" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "%%bash\ncd ~/phantom-workspace\n\necho "📥 下载示例工作流..."\n# 优先从 ModelScope 仓库下载(若你把 json 也传了上去)\npython - <<'PY'\nimport os, shutil\ntry:\n from modelscope.hub.file_download import model_file_download\n p = model_file_download(model_id="vftfnn/phantom-wan", file_path="Phantom_example_workflow.json")\n shutil.copy2(p, os.path.expanduser("~/phantom-workspace/Phantom_example_workflow.json"))\n print("✅ 已从 ModelScope 下载工作流")\nexcept Exception as e:\n print(f"⚠️ ModelScope 无此文件({e}),改用 HF 镜像下载")\n os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"\n os.system("wget -q https://hf-mirror.com/QuantStack/Phantom_Wan_14B-GGUF/resolve/main/Phantom_example_workflow.json -O ~/phantom-workspace/Phantom_example_workflow.json")\nPY\n\nif [ -s "Phantom_example_workflow.json" ]; then\n echo "✅ 示例工作流就绪"\nelse\n echo "⚠️ 工作流下载失败,可手动从 HF 页面下载后拖入 ComfyUI"\nfi" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 第 9 步:验证安装" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "import os\n\nbase_path = os.path.expanduser("~/phantom-workspace/ComfyUI/models")\n\nprint("=" * 60)\nprint("验证模型文件")\nprint("=" * 60)\nprint()\n\n# 文件现在直接放在各目标目录下(无嵌套子目录)\nfiles_to_check = {\n "主模型 (GGUF)": "unet/Phantom_Wan_14B-Q4_K_M.gguf",\n "VAE 解码器": "vae/wan_2.1_vae.safetensors",\n "文本编码器": "text_encoders/umt5-xxl-encoder-bf16.safetensors",\n}\n\nall_ok = True\n\nfor name, rel in files_to_check.items():\n file_path = os.path.join(base_path, rel)\n if os.path.exists(file_path):\n size_gb = os.path.getsize(file_path) / 10243\n print(f"✅ {name}")\n print(f" 路径: {file_path}")\n print(f" 大小: {size_gb:.2f} GB")\n else:\n print(f"❌ {name}: 未找到 ({file_path})")\n all_ok = False\n print()\n\n# 检查工作流文件\nworkflow_path = os.path.expanduser("~/phantom-workspace/Phantom_example_workflow.json")\nif os.path.exists(workflow_path):\n print(f"✅ 示例工作流")\n print(f" 路径: {workflow_path}")\nelse:\n print(f"⚠️ 示例工作流: 未找到(可以手动下载)")\n\nprint()\n\nif all_ok:\n print("=" * 60)\n print("✅ 所有文件验证通过!可以启动 ComfyUI 了")\n print("=" * 60)\nelse:\n print("=" * 60)\n print("❌ 部分文件缺失,请检查下载步骤")\n print("=" * 60)" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 第 10 步:启动 ComfyUI\n", "\n", "有两种启动方式:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 方式 1:在 Terminal 中启动(推荐)\n", "\n", "在 ModelScope 的 Terminal 窗口中运行:\n", "\n", "bash\n", "cd ~/phantom-workspace/ComfyUI\n", "python main.py --listen 0.0.0.0 --port 8188\n", "\n", "\n", "启动后,ModelScope 会自动提供端口转发链接。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 方式 2:在 Notebook 后台启动\n", "\n", "⚠️ 注意: 这会占用 Notebook 的执行,建议使用方式 1" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# 显示启动信息\n", "print("=" * 60)\n", "print("ComfyUI 启动说明")\n", "print("=" * 60)\n", "print()\n", "print("请在 ModelScope 的 Terminal 中运行以下命令:")\n", "print()\n", "print(" cd ~/phantom-workspace/ComfyUI")\n", "print(" python main.py --listen 0.0.0.0 --port 8188")\n", "print()\n", "print("启动后,在浏览器中访问 ModelScope 提供的端口转发链接")\n", "print()\n", "print("💡 提示: ")\n", "print(" - ModelScope Notebook 通常会自动识别 8188 端口")\n", "print(" - 查看页面上方是否有 '端口转发' 或类似的按钮")\n", "print()" ] }, { "cell_type": "markdown", "metadata": {}, "source": "## 使用说明\n\n### 多图参考功能\n\nPhantom 模型支持最多 4 张参考图**进行视频生成:\n\n1. 在 ComfyUI 中加载 Phantom_example_workflow.json\n2. 使用 "Load Image" 节点加载 1-4 张参考图\n3. 在 Prompt 中详细描述参考图的内容\n - 例如: "a toy camera in yellow and red with blue buttons"\n - 描述越准确,生成效果越好\n4. 设置其他参数:\n - seed: 随机种子,控制生成结果\n - 分辨率: 默认 832×480\n - 步数: 50-100 steps(步数越多,质量越好,但速度越慢)\n5. 点击 "Queue Prompt" 生成视频\n\n### 推荐配置\n\n- 显存: 16GB+ (推荐 24GB+)\n- 量化版本: Q4_K_M (平衡质量和速度)\n- 分辨率: 832×480 (默认)\n- 步数: 50-100 steps\n\n### 生成时间估算\n\n在 AMD MI 192GB 显存的环境中:\n- 单张参考图: 约 5-10 分钟\n- 多张参考图: 约 10-15 分钟\n\n### 故障排查\n\n如果遇到问题:\n\n1. 显存不足:\n - 使用更小的量化版本 (Q3_K_S)\n - 降低输出分辨率\n - 减少参考图数量\n\n2. 生成失败:\n - 检查 Prompt 是否过短或过长\n - 尝试更改 seed 值\n - 查看 ComfyUI 控制台的错误信息\n\n3. 模型下载失败:\n - 确认文件已上传到 ModelScope 仓库 vftfnn/phantom-wan\n - 确认第 7 步 FILES 里的 filename 与仓库内实际文件名完全一致\n - 命令行手动验证:modelscope download --model vftfnn/phantom-wan <文件名> --local_dir ./dir\n\n### 参考资源\n\n- ModelScope 模型仓库 vftfnn/phantom-wan(本 Notebook 下载源)\n- Phantom 原始模型\n- Phantom GGUF 版本\n- ComfyUI 文档\n- ComfyUI-GGUF 插件\n\n### 技术细节\n\n- 模型架构: Wan 2.1 (图生视频 / 多图参考)\n- 参数量: 14B(140亿参数)\n- 量化方法: GGUF Q4_K_M\n- 支持功能: 单图/多图参考、文生视频、图生视频\n- 许可证: Apache 2.0\n- 注意: 仅支持 CausVid LoRA 14B 版本,1.3B 版本不兼容" } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.11" } }, "nbformat": 4, "nbformat_minor": 4 }