Files
HakoniwaandClaude Opus 5.5 90e1371b76 Fix palette preview labels stacking on patch 0; honor font_size on macOS/Linux
- textbbox was measured at the patch position and that position was then
  subtracted again, so every number was drawn inside patch 0. Measure at the
  origin and subtract only the glyph offset.
- Fall back to DejaVu Sans / Helvetica, then Pillow's scalable default font,
  so font_size works where Arial is not installed.
- Add regression tests for label placement and font size.
- Add the Linux/Windows CPU test workflow that the README already describes.
- Add .gitignore for __pycache__, bump version to 1.2.1, update README and
  VALIDATION.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K5PqyHqy9udCb9y3WWmeTx
2026-09-26 00:30:02 +00:00

4.6 KiB
Raw Permalink Blame History

改善・検証記録

対象: 852wa/ComfyUI-ColorshiftColor

基準コミット: faedbc433198cf31469862edf4d420067811aa42

作業ブランチ: fix/color-processing-reliability

修正前後の確認

以下の6件は修正前のコードで再現するテストを作成し、修正後にすべて成功しました。

  1. RGB指定で上流のパレットが書き換わり、指定を消しても元に戻らない。
  2. 同じseedでランダム色編集を実行しても結果が一致しない。
  3. 色編集がPythonのグローバル乱数状態を変更する。
  4. 通常の空間マスクを接続するとテンソルの真偽判定エラーになる。
  5. 1ピクセル画像を64色指定で処理すると、縮小後の寸法が0になり失敗する。
  6. 手動塗りつぶしで暗いA・明るいBを指定すると、A/Bが勝手に入れ替わる。

検証結果

python -m unittest discover -s tests -v: 27テスト成功、スキップなし。

追加の検証対象は、入力画像・パレットの非破壊性、HSV変換、RGB/HSV指定、ロックと反転、空欄・コメント付きoperations、不正な入力の検出、細長い画像・単色画像、色占有率順序、パレット固定、マスクの補間・バッチ展開、分割検索の結果一致、影のRGBA出力、プレビュー文字の視認性です。

CUDA上でも3ノードを実行し、CPU上のパレット・番号マップ・マスクとの混在とfloat32 / float16 / bfloat16画像を確認しました。

付属 sample0.png(896×1344)を使い、以下の3ワークフローに保存されたウィジェット設定で、対象カスタムノードの処理と出力形状・有限値・パレットの非破壊性を確認しました。

  • CsC_image_workflow.json
  • CsC_video_workflow.json
  • CsC_videofill_workflow.json

パッケージの __init__.py 経由で3ノードの登録も確認しました。

実行環境: Windows / Python 3.12.9 / PyTorch 2.8.0+cu128 / NumPy 2.2.6 / scikit-learn 1.8.0 / Pillow 11.3.0 / NVIDIA GeForce RTX 5090。

確認範囲と導入

ComfyUI本体の画面操作、動画デコード・エンコードを含むワークフロー全体の実行、GitHub Actions上での実行は未確認です。動画用ワークフローの確認には静止画1フレームを使用しました。

ノード名・既存端子・既存ウィジェット順は維持していますが、減色の抽出方法と乱数処理を修正したため、旧版とはパレット番号や出力が変わる可能性があります。保護色・塗りつぶしペアは導入後にプレビューで確認してください。不正なoperationsは以前の黙った無視から理由付きエラーに変更しています。

導入用ZIPには ComfyUI-ColorshiftColor フォルダーが入っています。既存版をバックアップしたうえでComfyUIの custom_nodes 配下へ配置し、READMEの依存パッケージ導入手順に従って再起動してください。

この変更はローカルで実装・検証したものです。GitHubへのpush、PR作成、Comfy Registryへの公開は実施していません。


2026-09-26 追加修正(v1.2.1)

基準コミット: 62bcdc9(上記の改善を取り込んだ master)

作業ブランチ: fix/palette-preview-labels

  1. パレットプレビューの番号が全て0番のマスに重なって描画される不具合を修正しました。textbbox を各マスの座標で測った値から、さらにその座標を引いていたため、全番号が左上へ寄っていました。原点で測った字形のオフセットだけを差し引くように変更しています。
  2. Arialがない環境(macOS / Linux)では font_size が無視され、10px固定の既定フォントになっていました。DejaVu Sans などの代替フォント、Pillow 10.1以降のサイズ指定付き既定フォントの順に使うようにしました。
  3. READMEに記載していたLinux / WindowsのCPUテスト用GitHub Actions(.github/workflows/tests.yml)を追加しました。
  4. nodes.py のCRLF/LF混在をLFに統一しました(内容変更なし、別コミット)。

上記1・2の回帰テストを追加し、修正前のコードで失敗・修正後に成功することを確認しました。

python -m unittest discover -s tests -v: 29テスト成功、CUDAテスト1件スキップ(Linux / Python 3.11 / PyTorch 2.14 CPU / Pillow 12.2 / scikit-learn 1.8)。

48フレーム×512×768のバッチで、減色約2.0秒・パレット編集約1.7秒・塗りつぶし約2.2秒(CPU)でした。