Community影像github.com

daniil-kzn/image-edit-fidelity

與模型無關的規則,用於使用任何影像模型生成和編輯人物與場景影像。涵蓋完整人體解剖學(每人一頭、兩眼、兩臂、兩腿、每手五指,無從背部或胸部生長的肢體,無融合身體)、對附帶參考影像的嚴格忠實度、精確轉移以及缺陷檢查。

image-edit-fidelity 是什麼?

這個技能提供了一組與模型無關的規則,確保在使用任何影像生成或編輯模型(如 Qwen-Image、GPT Image、Midjourney、Stable Diffusion 等)處理人物或場景影像時,輸出結果的解剖學正確性與參考影像的忠實度。它詳細描述了如何透過提示詞、負面提示詞或正面陳述來維持完整的人體解剖結構,避免常見的肢體缺失、融合或錯位問題。對於參考影像編輯,它要求建立詳細的庫存列表,明確區分「變更」與「保留」項目,並使用提示詞工程、模型設定(例如關閉提示詞重寫、固定輸出尺寸)以及遮罩或修補模式來最小化漂移。技能還包含一個名為 `ref_diff.py` 的腳本,用於執行像素級差異比對,並自動將正確修改的區域貼回原始參考影像,從而實現精確修復。此外,它也涵蓋了從一個參考影像精確轉移單一元素(如衣物、物品或人臉)到另一個參考影像的場景,包括人臉交換的嚴格要求。此技能可與特定模型技能(如 `qwen-image-2`)搭配使用,以補充模型專用的參數和限制。

相容平台✓Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/daniil-kzn/qwen-image-2-skill/tree/HEAD/image-edit-fidelity

Installed? Explore more 影像 skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

影像編輯忠實度與解剖學(任何模型)

這些規則適用於所有影像模型。它們描述了結果必須符合的條件以及如何檢查;模型特定技能(qwen-image-2、storyboard-keyframes、fal-runner 用於執行)則提供端點、參數、限制和提示風格。當存在模型特定技能時,兩者皆須遵循:其參數和這些忠實度規則。準備好的編輯說明位於 references/edit-patterns.md。

如何為特定模型表達規則:

  • 負面提示詞欄位(Qwen、Seedream、Stable Diffusion、Kling):將 §1 和 §2 中的解剖學和忠實度清單放在此處。
  • 無負面提示詞欄位(GPT Image、Nano Banana / Gemini、Flux Kontext 及大多數指令編輯模型):將其作為正面陳述寫入提示詞(「每個人有一頭、兩臂、兩腿」、「房間、家具和物體保持完全一樣」),並在結尾加上一句簡短的排除句(「不要新增或移除任何人或物體」)。不要將冗長的「不要X,不要Y」清單貼入提示詞:許多模型會繪製出這些被提及的物體。
  • 提示詞重寫(Qwen enable_prompt_expansion、Model Studio prompt_extend、「魔法提示詞」選項):編輯時請將其關閉;重寫器會添加參考影像中不存在的道具和風格。
  • 哪個輸入決定輸出尺寸 因模型而異(Qwen:最後一張影像;其他:第一張,或明確的尺寸欄位)。請檢查 schema,並使輸出採用基礎參考影像的長寬比和尺寸。
  • 長度限制 各不相同(Qwen fal 編輯為 800 字元)。當 KEEP 子句無法容納時,請保留最可能發生漂移的項目(§2 步驟 2)。

1. 人體解剖學:始終保持完整

每個輸出中的每個人都具有正常的人體解剖結構:恰好一顆頭、兩隻眼睛、一個鼻子、一張嘴、兩隻耳朵、一個脖子、兩條從肩膀連接的手臂、兩隻各有五根手指的手、兩條從髖部連接的腿、兩隻腳。不能有多餘或缺失的頭部、肢體、手或手指;不能有從背部、胸部、腹部或他人身上長出的肢體;不能有融合的身體;不能有彎曲方向錯誤的關節。此規則適用於文字生成影像和編輯、背景人物以及風格化影像(卡通、漫畫、繪畫),除非使用者明確要求非人類的生物。身體結構破損的影像即為缺陷,無論其他部分多麼完美。

為何會出錯:擴散模型在身體重疊時(擁抱、牽手、人群、背小孩的人)、手部較小或隱藏時,以及姿勢複雜時,會失去對肢體歸屬的追蹤。請在提示詞中預防,並在檢查中發現問題。

  1. 提示詞。 對於每個人,說明每隻手臂和手的位置及動作(「她的右手在胸前拿著一個杯子,她的左臂放鬆垂在身側」),以及腿的位置(「站著,重心在左腳」、「坐著,翹腳」)。當有多人時,說明身體數量(「正好三個人,每個人有一頭、兩臂、兩腿」)。將正常的解剖學描述寫入風格句子中:「解剖學正確的人體,自然比例」。精確描述接觸點:誰的手放在誰的肩膀上。
  2. 保持身體可辨識的構圖。 偏好雙手都可見或明確隱藏(插在口袋裡、背後、畫框外)的姿勢;避免手臂交錯纏繞、人們直接前後站立,以及肢體被畫框模糊切割的情況。人數越多,身體越小,錯誤也越多:在請求允許的範圍內保持人數最少;在人群中,保持背景人物小、簡單,並部分被清晰的物體遮擋。
  3. 解剖學排除清單(負面提示詞,或無負面提示詞欄位時的一句正面句子):「多餘的肢體、多餘的手臂、多餘的腿、多餘的手、多餘的手指、缺失的手指、兩個頭、多餘的頭、多餘的眼睛、融合的身體、從軀幹生長的肢體、變形的手、畸形解剖結構」。
  4. 編輯。 更改姿勢、服裝或添加人物不得增加或損失身體部位:在 KEEP 子句(§2)中加入「相同解剖結構:每人一頭、兩臂、兩腿」。姿勢編輯是風險最高的編輯;檢查畫面中的每個人,而不僅僅是被編輯的那個。
  5. 在顯示前檢查每個人(裁切並放大每個身體到完整尺寸;包括小的背景人物):計算頭部、眼睛、手臂、手、腿、腳的數量;計算每隻可見手上的手指數量;追蹤每條肢體到其肩膀或髖部,確認它屬於正確的身體;檢查是否有從背部、胸部或脖子長出的肢體、合併的手、兩人之間的第三條腿、扭曲的關節。將每個人的計數寫入檢查筆記中(「P1:1頭、2臂、2手 5+5、2腿:OK」)。
  6. 修復。 小的手部或手指錯誤:對該手周圍的裁切區域進行一次編輯傳遞(「修正左手:五根手指,自然姿勢,拿著杯子」),然後將裁切區域貼回(ref_diff.py --paste-back)。多餘或缺失的肢體或頭部:使用更簡單的姿勢、更少的重疊,以及步驟 1 中的肢體描述重新生成。切勿將身體結構破損的影像作為最終結果顯示;如果使用者無論如何都想看到草稿,請指出缺陷。

2. 參考影像忠實度:僅更改要求的項目

每當使用者附帶參考影像時,該參考影像即為事實基準,請求是基於它的最小差異。使用者未要求更改的所有內容都保持不變:人數及其身份、他們的姿勢和位置、服裝、房間或街道、周圍的家具和物體及其數量和位置、構圖和攝影機角度、光線方向和顏色、風格和紋理、任何文字。一張「看起來不錯」但添加了一個人、移動了椅子或更改了窗戶的編輯就是失敗的編輯。大多數模型會重新渲染整個畫面,並可以自由地「改進」它,因此必須明確要求忠實度,然後進行檢查。

  1. 在編寫任何內容之前,先盤點參考影像。 以完整尺寸查看它(針對小區域裁切),並在專案資料夾中寫下 reference_inventory.md:
    • 構圖:鏡頭大小、攝影機高度和角度、接觸每個畫框邊緣的內容、長寬比、像素;
    • 人物:確切人數;對於每個人,其在畫面中的位置(左/中/右、前景或背景)、姿勢、視線、手、從頭到腳的服裝、頭髮、年齡、手中物品;
    • 場景:房間或地點、牆壁、窗戶、門、地板、帶有位置的家具;
    • 物體:每個可見物品及其數量和顏色、所在位置(桌上的3個杯子,而不是「杯子」);
    • 光線:方向、強度、色溫、陰影、一天中的時間;
    • 風格:照片或插圖、顆粒感、色彩分級、景深;
    • 文字和標誌,逐字記錄。 然後將其分為兩個清單:CHANGE(僅限使用者要求的內容)和 KEEP(所有其餘內容)。如果請求範圍不明確(「讓它更舒適」:家具?光線?兩者?),請在生成前詢問,而不是讓模型決定。
  2. 將編輯提示詞寫成變更 + 保留。 第一句:要求的更改,具體且局部(什麼、在哪裡、多大、在畫面的哪一側)。然後是基於 KEEP 構建的保留子句,列出具體項目而非「其他所有內容」:「確切保留兩個人:左邊穿灰色毛衣的男人和右邊穿藍色裙子的女人,相同的面孔、姿勢和位置。保留木桌及三個白色杯子、左邊的窗戶、右邊的書架、來自窗戶的暖光、構圖和攝影機角度不變。不要新增或移除任何人或物體。」在長度限制下,保留最可能漂移的項目:人數和身份、編輯區域附近的物體、背景建築、構圖。僅詳細描述變更;不要用新的詞語重新描述整個場景,這會引誘模型重繪。
  3. 保護參考影像的設定:
    • 提示詞重寫關閉;
    • 輸出尺寸 = 參考影像的長寬比和尺寸;不同的長寬比會迫使模型發明或裁剪內容;
    • 將基礎參考影像放在設定輸出尺寸的位置,並在提示詞中用其編號呼叫;僅附加變更所需的參考影像,每張額外的影像都是另一個漂移來源;
    • 遮罩或修補模式(如果模型提供):僅遮罩要更改的區域;
    • 忠實度排除清單:「多餘的人、缺失的人、不同的人、背景改變、添加物體、移除物體、不同的構圖、不同的光線」,加上 §1 中的解剖學清單;
    • 草稿使用低階等級;在指令穩定前每呼叫一次生成一個輸出,之後為 2-3 個。
  4. 對照參考影像進行檢查,而非單獨檢查。 執行 python3 ~/.claude/skills/image-edit-fidelity/scripts/ref_diff.py <參考影像> <輸出> --allow x0,y0,x1,y1(預期發生變更的方框,以參考影像像素為單位)。它會報告該方框外部每個網格單元格變更了多少,並生成並排對比圖和熱力圖。然後根據 reference_inventory.md 逐項檢查輸出:人數和身份、每個物體及其位置、背景、光線、構圖、文字。任何發生變更的 KEEP 項目都是缺陷,即使只變了一點點。
  5. 修復而不是重新生成整個畫面。 當變更是正確的,但其餘部分發生漂移時,僅將變更區域貼回原始影像: ref_diff.py <參考影像> <輸出> --allow <方框> --paste-back final.png(邊緣羽化,畫面的其餘部分來自參考影像的逐個像素)。如果變更本身是錯誤的,請收緊 CHANGE 句子,並將漂移的項目按名稱加入 KEEP;每次重試只改一個東西。
  6. 報告 給使用者哪些內容變更了,並確認哪些內容經驗證保持不變;說明任何可接受的偏差。

3. 將一部分從一個參考影像轉移到另一個

當使用者要求從來源參考影像中取出一個元素(夾克、燈、臉、標誌、天空)並放入目標參考影像時,恰好會發生兩件事:命名元素從來源複製,目標中的命名位置被其替換。兩者之間沒有其他任何移動:

  • 從來源,僅取用命名的元素:不取用其背景、其他人或物體、顏色、光線、風格或構圖;
  • 在目標中,僅更改命名位置:人物、數量、面孔、姿勢、服裝、物體、場景、光線、構圖和文字保持與目標中相同(從目標庫存列表構建的 §2 KEEP 清單);
  • 不要添加任何東西「以使其配合」(額外的道具、不存在物體的陰影、新人物)。唯一允許的調整是元素本身採納目標的透視、比例和光線,使其自然地處於被替換的位置中。

方法:

  1. 盤點目標(§2)並精確描述來源中的元素(什麼、顏色、材質、形狀、必須保留的細節:紐扣、印花、標誌)。
  2. 在上傳前,將來源影像緊密裁切在元素周圍(尊重模型的最小邊長,Qwen 為 384 像素),這樣模型就沒有其他東西可以借用。將目標放在設定輸出尺寸的位置。
  3. 提示詞結構: 「僅從影像 1 中取出 [具有關鍵特徵的元素]。在影像 2 中,用其替換 [精確位置:誰的、哪一側、哪個物體],並匹配影像 2 的透視、比例和光線。不要從影像 1 中取出其他任何東西:不要其背景、人物、顏色或光線。影像 2 中的所有其他內容保持完全一樣:[來自目標庫存列表的 KEEP 項目,包含人數、面孔、姿勢、物體、場景、構圖]。不要新增或移除任何人或物體。」 如果模型希望基礎影像在前,則交換影像編號。
  4. 使用 ref_diff.py <目標> <輸出> --allow <被替換位置的方框> 進行檢查:方框外部的變更即為缺陷;使用 --paste-back 修復。同時將轉移的元素與來源裁切進行比較:形狀、顏色、印花和細節必須匹配。

頭部交換

將影像 1 中某人的頭部換到影像 2 中某人身上是此規則最嚴格的情況。在目標人物身上,僅更換頭部:面孔、五官、臉部皮膚、頭髮和耳朵來自影像 1;頭部角度、傾斜、視線方向、比例和場景光線遵循目標,以使頭部位於現有的脖子上。目標人物的所有其他部分保持與影像 2 相同:身體、體型、脖子和肩膀、服裝、姿勢、手、頭部下方的飾品;其他人保持自己的頭部和所有其他部分;場景、物體和構圖不變。除了頭部之外,影像 1 中的任何內容(其服裝、身體、背景、其他人)都不會出現在輸出中。

  • 在請求之前,僅當存在模糊部分時才與使用者解決:頭飾、

相關技能