{
"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
}
phantom-wan
113 downloads
0 likes
on ModelScope
updated