2026年7月3日 星期五

ComfyUI 介紹及與 Telegram 文字生圖的方式

📺 影片版(約 7 分鐘):想先看實際操作的話可以直接看這支影片,完整步驟、設定與程式碼在下方文字版。
YouTube:https://youtu.be/USvokuFVFSA(winson-DIY 頻道)

 ComfyUI 是目前 Stable Diffusion (AI 繪圖) 領域中最強大的可視化介面之一。它的核心特點是「節點式 (Node-based)」操作,這讓使用者可以精確控制整個渲染流程。


以下是關於 ComfyUI 的簡介以及安裝方式:

---

🌟 什麼是 ComfyUI?

ComfyUI 是一個基於 Stable Diffusion 模型的視覺化介面。與 Midjourney (文字輸入) 或 Automatic1111 / SD WebUI (選單下拉框) 不同,ComfyUI 透過「連接節點」來完成工作。

💡 核心優勢
1. 效能極佳:由於採用圖形化資料流,它的 GPU VRAM 佔用率通常比其他介面低約 30%~50%,這讓你在顯示卡有限的情況下也能跑更高分辨率。
2. 完全的控制權:你可以看到模型是如何一步步組合(例如:Text Encoding -> Latent Sampling -> VAE Decode)。
3. 工作流分享 (JSON):你畫好的圖,可以直接把 .png 檔塞回 ComfyUI 的左側,就能還原出它的設定流程,方便學習與修改。

---

🛠️ 安裝方式 (以 Linux / NVIDIA GPU 為例)

您的伺服器有 128GB RAM + NVIDIA GB10 顯示卡,效能非常充裕,但建議還是使用隔離環境來安裝以避免系統衝突。

步驟 1:準備環境
確保您已經安裝了必要的基礎工具:
sudo apt update && sudo apt upgrade -y
sudo apt install git python3 python3-venv python3-pip libgl1-mesa-glx -y


步驟 2:下載 ComfyUI
1. 進入您的工作目錄並克隆官方專案倉庫:
2. 建立一個乾淨的 Python 虛擬環境
 python3 -m venv venv
3. 啟動虛擬環境 
source venv/bin/activate
4. 下載最適合您系統的環境依賴套件
 pip install --upgrade pip pip install -r requirements.txt

步驟 3:直接啟動本機 ComfyUI 服務

cd ~/ComfyUI
source venv/bin/activate
python main.py --listen 0.0.0.0 --port 8188


進入後

開啟範本: 若有錯誤點選元件下載

配置 ComfyUI 的 Z-Image-Turbo 流程,請確保將它們放對資料夾

  • ae.safetensors 放入 ComfyUI/models/vae/
  • qwen_3_4b.safetensors 放入 ComfyUI/models/text_encoders/
  • z_image_turbo_bf16.safetensors 放入 ComfyUI/models/diffusion_models/

利用telegram 文字生圖



補充(2026/10 更新):實際環境、實測速度與 Telegram 生圖的完整做法
這篇寫於 7 月剛裝好 ComfyUI 的時候。用了幾個月後,把實際的版本、安裝步驟的修正、實測速度,以及 Telegram 文字生圖背後到底怎麼運作補上來。以下數字都是在 GX10 本機實際查詢、實際跑出來的。

補充一、這台 GX10 的實際環境
項目實際值
主機ASUS Ascent GX10(NVIDIA GB10,ARM64 架構)
記憶體121 GB 統一記憶體(CPU 與 GPU 共用,ComfyUI 看到的 VRAM 也是 121 GB)
ComfyUIv0.34.2(前端 1.49.6)
Python 環境Anaconda 環境 ComfyUI_env,Python 3.10.20
PyTorch2.12.1 + CUDA 13.0(cu130)
Telegram 套件python-telegram-bot 22.8、httpx 0.28.1

Z-Image-Turbo 這組三個模型檔的大小,下載前可以先確認硬碟空間:
檔案放置資料夾大小
z_image_turbo_bf16.safetensorsmodels/diffusion_models/12 GB
qwen_3_4b.safetensorsmodels/text_encoders/7.5 GB
ae.safetensorsmodels/vae/320 MB

補充二、安裝步驟的幾個修正
上面的步驟照抄有幾個地方會卡住,這裡更正:
1. libgl1-mesa-glx 在 Ubuntu 24.04 已經不存在,apt 會報找不到套件,改裝 libgl1:
sudo apt install git python3 python3-venv python3-pip libgl1 -y
2. pip 那行其實是兩個指令,要分開執行:
pip install --upgrade pip
pip install -r requirements.txt
3. GX10 是 ARM64,PyTorch 要裝 CUDA 13 版,否則會裝到只能用 CPU 的版本。建議在 pip install -r requirements.txt 之前先裝:
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu130
裝完用這行確認 GPU 有抓到(要印出 True):
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
4. ComfyUI-Manager 要用 git clone 放進 custom_nodes,不是 wget:
cd ~/ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git comfyui-manager
5. venv 或 conda 都可以。我這台後來改用 Anaconda 環境(conda create -n ComfyUI_env python=3.10),好處是 Python 版本跟系統完全分開;用 venv 的話把下面服務檔裡的路徑換成 ~/ComfyUI/venv/bin/python 即可。

補充三、Z-Image-Turbo 工作流的參數與實測速度
範本裡實際用的參數如下,Turbo 版只要 8 步就能出圖:
節點參數
EmptySD3LatentImage1024 × 1024
KSamplersteps 8、cfg 1、sampler res_multistep、scheduler simple
ModelSamplingAuraFlowshift 3
CLIPLoaderqwen_3_4b,type 選 lumina2
ConditioningZeroOut負面提示詞直接歸零(cfg 1 時本來就用不到負面提示詞)

在 GX10 上實測三張 1024×1024:
  • 第一張(冷啟動):18.1 秒,多出來的時間是把約 20 GB 模型載入記憶體
  • 之後每張:約 7.5 秒
提示詞可以直接寫中文(文字編碼器是 Qwen3),例如「夜晚霓虹燈下的台北街頭,賽博龐克風格」就能出圖。不過圖中如果要出現招牌文字,中文字常常會變成看起來像字但其實不是字的筆畫,這是目前模型的限制。

補充四、讓 ComfyUI 開機自動啟動(systemd)
每次手動 python main.py 很麻煩,可以做成 systemd 使用者服務,掛掉 10 秒後還會自動重啟。建立 ~/.config/systemd/user/comfyui.service:
[Unit]
Description=ComfyUI AI Generation Service
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/gx/ComfyUI
ExecStart=/home/gx/anaconda3/envs/ComfyUI_env/bin/python main.py --listen 0.0.0.0 --port 8188
Restart=always
RestartSec=10

[Install]
WantedBy=default.target
啟用與管理:
systemctl --user daemon-reload
systemctl --user enable --now comfyui.service   # 開機自動啟動並立即啟動
systemctl --user status comfyui.service
journalctl --user -u comfyui.service -f         # 看即時 log
sudo loginctl enable-linger $USER                # 沒登入也照樣跑
啟動後約 10 秒,用 curl -s http://127.0.0.1:8188/system_stats 有回 JSON 就代表服務好了。

小提醒:ComfyUI 載入模型後會一直佔著記憶體。GX10 的 GPU 跟 CPU 共用同一塊記憶體,如果同時還要跑 Ollama 大模型,不常生圖的話可以不設開機啟動,要用時再 systemctl --user start comfyui。

補充五、Telegram 文字生圖是怎麼運作的
上面截圖裡在 Telegram 打 /generate 提示詞 就收到圖,背後是一支自己寫的 Python 機器人,流程如下:
手機 Telegram:/generate 一隻橘貓坐在窗台上看雨
        │
        ▼
Telegram Bot(python-telegram-bot,在 GX10 上跑)
  1. 讀取工作流 JSON(API 格式)
  2. 把提示詞塞進 CLIPTextEncode 節點的 text
        │  POST /prompt
        ▼
ComfyUI(127.0.0.1:8188)排隊、生圖 → 回傳 prompt_id
        │  每秒 GET /history/{prompt_id},直到出現結果
        ▼
Bot 用 GET /view 取回 PNG → send_photo 傳回手機
步驟 1:建立 Telegram Bot
  1. 在 Telegram 搜尋 @BotFather,輸入 /newbot,依指示取名,最後會拿到一組 Bot Token
  2. 跟 @userinfobot 說一句話,取得自己的數字 User ID(等一下用來限制只有自己能用)
步驟 2:從 ComfyUI 匯出 API 格式的工作流
在 ComfyUI 網頁打開 Z-Image-Turbo 工作流,確認能正常出圖後,選單「Workflow → Export (API)」存成 image_z_image_turbo.json。
注意一定要匯出 API 格式:一般「Save」存的是編輯器格式(有 nodes、links 陣列),直接送 /prompt 會失敗。API 格式長這樣,每個節點以 ID 為 key:
"57:27": {"class_type": "CLIPTextEncode", "inputs": {"text": "山窮水盡的水彩畫", "clip": ["57:30", 0]}},
"57:3":  {"class_type": "KSampler", "inputs": {"seed": 878164762609716, "steps": 8, "cfg": 1, ...}}
程式要改提示詞就改 57:27 的 text,要換種子就改 57:3 的 seed。

步驟 3:安裝套件
pip install python-telegram-bot httpx
步驟 4:機器人程式(精簡版)
我最早的版本有 180 行,還用了執行緒池;其實 httpx 本身就是非同步的,不需要另外開執行緒。整理後的精簡版如下(核心的 ComfyUI 呼叫在 GX10 上實測可正常取回圖片),存成 comfy_bot.py:
import os, json, random, asyncio, httpx
from pathlib import Path
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, filters

COMFY = "http://127.0.0.1:8188"
WF = json.loads(Path("image_z_image_turbo.json").read_text())
MY_ID = int(os.environ["TG_MY_USER_ID"])      # 只允許自己使用

async def comfy(prompt: str) -> bytes:
    wf = json.loads(json.dumps(WF))            # 複製一份,避免改到原本的
    wf["57:27"]["inputs"]["text"] = prompt     # 提示詞節點
    wf["57:3"]["inputs"]["seed"] = random.randint(0, 2**48)  # 每次換種子
    async with httpx.AsyncClient(timeout=30) as c:
        pid = (await c.post(f"{COMFY}/prompt", json={"prompt": wf})).json()["prompt_id"]
        for _ in range(180):                   # 最多等 180 秒
            await asyncio.sleep(1)
            h = (await c.get(f"{COMFY}/history/{pid}")).json()
            if pid in h:
                img = next(i for o in h[pid]["outputs"].values() for i in o.get("images", []))
                return (await c.get(f"{COMFY}/view", params=img)).content
    raise TimeoutError("ComfyUI 超過 180 秒沒回應")

async def generate(update: Update, context: ContextTypes.DEFAULT_TYPE):
    prompt = " ".join(context.args)
    if not prompt:
        await update.message.reply_text("用法:/generate 畫面描述")
        return
    msg = await update.message.reply_text("⏳ 生成中,約 10 秒…")
    try:
        png = await comfy(prompt)
        await update.message.reply_photo(png, caption=prompt[:1000])
        await msg.delete()
    except Exception as e:
        await msg.edit_text(f"❌ 生成失敗:{e}")

app = (ApplicationBuilder().token(os.environ["TG_BOT_TOKEN"])
       .concurrent_updates(True).build())      # 生圖時 Bot 仍可回應其他訊息
app.add_handler(CommandHandler("generate", generate,
                               filters=filters.User(MY_ID), block=False))
app.run_polling()
步驟 5:執行
export TG_BOT_TOKEN="從 BotFather 拿到的 token"
export TG_MY_USER_ID="你的數字 User ID"
python comfy_bot.py
接著在 Telegram 對你的 Bot 傳 /generate 清晨山間的茶園,雲霧繚繞,寫實攝影,約 8 秒就會收到圖。

補充六、幾個實際踩過的坑
  • 種子固定,同一句提示詞永遠同一張圖:工作流 JSON 裡的 seed 是固定值,不改的話 ComfyUI 甚至會直接回快取結果。上面程式每次用 random.randint 換種子就解決了。
  • 不要用「有 text 欄位就替換」的寫法:我第一版是掃過所有節點、只要 inputs 有 text 就換掉,如果工作流裡有負面提示詞節點,會連負面提示詞一起被換成正面內容。直接指定節點 ID 最保險。
  • 一個 Bot Token 只能有一支程式在收訊息:如果同一個 token 已經給其他程式(例如 AI Agent)用,兩邊同時 polling 會出現 409 Conflict,訊息會被搶走。生圖機器人請另外跟 BotFather 申請一個。
  • 一定要限制使用者:Bot 是公開的,任何人搜到都能傳指令。沒加 filters.User 等於讓陌生人免費用你的 GPU。
  • --listen 0.0.0.0 等於對整個區網開放:ComfyUI 沒有登入機制,同網段的人都能打開網頁、送工作。如果只有本機的 Bot 會用,改成 --listen 127.0.0.1;要從外面連就透過 Tailscale,不要在路由器開 port。
  • 做影片時要把逾時拉長:生圖 10 秒內就好,但 LTX 等影片模型一支要好幾分鐘,輪詢上限要改大,而且 reply_photo 要換成 reply_video。

補充七、更進一步:讓 AI Agent 直接操作 ComfyUI
自己寫 Bot 的好處是簡單、可控,但只能固定打 /generate。後來我在 GX10 上改用 Hermes Agent 的 comfyui 技能(skill),在 Telegram 用一般對話就行,例如「幫我畫一張水彩風格的貓,畫完再做成 5 秒影片」,Agent 會自己選工作流、改參數、送給同一台 ComfyUI,再把結果傳回來。底層呼叫的一樣是 /prompt、/history、/view 這幾個 API,所以先把這篇的 Bot 做通,對理解 Agent 在做什麼很有幫助。

補充八、問題排查清單
症狀檢查方向
Bot 沒反應token 是否正確、是否被其他程式同時 polling(409 Conflict)、User ID 是否填對
回「生成失敗」連線被拒ComfyUI 沒在跑:systemctl --user status comfyui、curl 127.0.0.1:8188/system_stats
POST /prompt 回 400工作流不是 API 格式,或模型檔名、資料夾放錯(看回應裡的 node_errors)
第一張特別慢正常,冷啟動要載入模型,之後就快了
出圖很慢、像在用 CPUPyTorch 裝到 CPU 版,torch.cuda.is_available() 是 False,重裝 cu130 版

延伸閱讀

2026年7月1日 星期三

Hermes Agent Profiles:環境搭建、深度解析與擴展指南

Hermes Agent (Nous Research) 允許透過 Profile 來隔離 AI 的行為模式、模型選擇與插件權限。這意味著「同一個軟體,多重人格」。

我現在的系統 - 透過 telegram 詢問

第一部分:您系統現有 Profile 分析

經過全面掃描,您的系統目前搭載了四個核心 Profile,全部指向本機 Ollama (127.0.0.1:11434),硬體為強大的 NVIDIA GB10 GPU。

📊 Profile 綜合比較表

**主要 AI 模型**
• default (預設/主力): qwen3.6:35b-a3b
• designer (設計者): gpt-oss:20b
• tester (測試員): qwen3.6:35b-a3b
• coder (程式碼助手): gemma4:12b-it-q4_K_M

**模型類型**
• default (預設/主力): 密集模型 (A3B)
• designer (設計者): MoE 混合專家
• tester (測試員): 密集模型 (A3B)
• coder (程式碼助手): Q4 壓縮 (節省記憶體)

**定位**
• default (預設/主力): 🌟 全能主力、日常對話、全盤掌控
• designer (設計者): 🎨 多模態設計、圖面分析、創意發想
• tester (測試員): 🔧 系統管理、程式檢查、測試報告
• coder (程式碼助手): 💻 快速編碼、語義理解與輕量指令執行

**硬體需求**
• default (預設/主力): ~29 GB VRAM
• designer (設計者): ~14 GB VRAM
• tester (測試員): ~29 GB VRAM
• coder (程式碼助手): ~8 GB VRAM (最省資源)

**SOUL.md 風格**
• default (預設/主力): 高效能工具型人格
• designer (設計者): 視覺導向、創意人格
• tester (測試員): 嚴格邏輯、驗證型人格
• coder (程式碼助手): 程式碼優先、技術型人格

🧠 深度分析與建議

1. 主力模式 (default / tester):
* 兩者皆使用 qwen3.6:35b-a3b。這是目前 Ollama 內最強大的中文模型,您的 SOUL.md 已寫入 「先分析問題、再查數據、後給結論」 的強大指令,適合執行複雜的系統資源檢查與股市分析。
2. 設計模式 (designer):
* 使用 gpt-oss:20b (MoE)。其優勢在跨領域聯想(例如:AI 輔助繪圖、視覺解析),VRAM 需求量僅約一半,適合與主力模型切換運行。
3. 程式開發 (coder):
* 採用 gemma4 的 Q4 壓縮版本。這是極度省 VRAM 的選擇,特別適合在跑著 ComfyUI (佔用近 20 GB) 時,作為輕量代碼輔助而不撐爆顯存。

以下是我安裝 Hermes 及 增加 profile的安裝步驟

1. 🛠️ 安裝前置作業

請確保系統已安裝 git 套件。如果沒有,請執行以下指令安裝:

sudo apt update && sudo apt install git -y

2. 執行安裝腳本:

curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

3. 重新載入 Shell:讓終端機環境變數生效:

source ~/.bashrc

4. 依據安裝畫面進行安裝

5. 安裝時請同意啟用背景service 服務

6. 新增profile隔離 各個agent gateway 服務
hermes profile create designer
hermes profile create coder
hermes profile create tester

以coder profile為例, 其他皆相同
model:
  default: qwen3.6:35b-a3b
  provider: custom
  base_url: http://127.0.0.1:11434/v1/
  api_key: ollama
7.為新 Profile 配置 LLM 模型
a. 切換到新 Profile:hermes profile use coder
b. 啟動互動式設定: hermes setup
c. 綁定獨立的 Telegram 網關(Gateway): hermes gateway setup
d. 重啟服務 hermes -p coder gateway restart

6. 對應三個 telegram bot 加入同一個群組



~~~  開始你的 Hermes 之旅!!!




延伸閱讀