Original node of "Florence2_Color_Filter"
ComfyUIの既存のノードをカスタムする.…事は従来色々やってきましたが、オリジナルのノードを作成したのは初めてです。
と言っても特に高度なものではなく、Manus先生に依頼したテーマとしては以下です。
ComfyUIでFlorence2というノードを使用すると、ollana-visionのように画像を解析してプロンプトを作れるが、白黒画像を分析した時、当然white and blackとかモノクロームとかグレースケールという単語が入ってくる
この白黒を意味する概念だけ表示させないノードを別に作れないか
実際の使用例としては、下図のようにFlorence2…だけでなくWD14-taggerとかOllama-Visionとか画像解析系ノードの後ろにくっつけてやる事で、生成されたプロンプトから、white and blackとか monochrome、grayscale…と言った「白黒」を意味する類の単語を力ずくで排除する…というノードです。

何で、そんな機能のノードを作ったかと言えば、以下記事で紹介しているComfyUI用の自動着色プログラムの機能向上の為です。
上記事内でも触れていますが、自動着色プログラム…という割に、実際に動作させてみると結構な確率で着色できずに白黒のまま完走してしまう事が多々あったのですが、先日やっとその原因に気づきました。
気づいてみれば馬鹿馬鹿しい話ですが、要するに元画像の解析にFlorence-2とWD14-taggerを使用している訳ですが、当然元画像が白黒なんだから、解析したプロンプトにも「白黒」を意味するワードは入ってくる訳ですよ。
であれば当然、そのプロンプトをそのまま使用したら、仕上がりも白黒のままになる確率が高いですよ、anytestをかましても。当たり前っちゃー当たり前です。それに気づかずにいた訳ですね、半年間。
A1111系でこの問題が出ないのは、当然、その除外作業を人力でやっているからです。そういう説明をしています、以下でも。
ただ、これ気づいたは良いが、じゃあどうすんだよって話で、当初Florence-2を諦めて、Ollama-Visionでそういうプロンプトを指示すればいいかと思ったのですが、
Describe the content of the image in natural language, focusing only on objects, actions, composition, and context. Do not mention color, lighting, style, or whether the image is black and white or grayscale.これまた当たり前っちゃー当たり前ですが、動作が激重になりました。ollamaは性能は良いんですが、重いんですよ、どーしたって。
で、やっぱFlorence-2を活かしたまま何とかならねえか...と考えていきついたのがこのノード作成です。結果、下図のようにカラー化失敗はほぼ完ぺきになくなりました。尚、上記事内で公開しているjsonも修正版に置き換えています。

ノードは以下、公開します。以下を展開して、custom_nodesフォルダに置くだけです。新規必要なPythonライブラリーもありません。
構成ファイルのコードも以下公開します。見たまんま、結構力ずく…な処理をしていますが、ワードの追加次第で、色々殺せます。
init.py
from .color_filter_node import Florence2ColorFilter
NODE_CLASS_MAPPINGS = {
"Florence2ColorFilter": Florence2ColorFilter
}
NODE_DISPLAY_NAME_MAPPINGS = {
"Florence2ColorFilter": "Florence2 Color Filter"
}
color_filter_node.py
import re
class Florence2ColorFilter:
def __init__(self):
pass
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"text": ("STRING", {"multiline": True}),
}
}
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("filtered_text",)
FUNCTION = "filter_text"
CATEGORY = "Florence2/Utils"
def filter_text(self, text):
keywords_to_remove = [
r"\\bwhite and black\\b", r"\\bblack and white\\b", r"\\bmonochrome\\b", r"\\bgrayscale\\b", r"\\bgrey scale\\b", r"\\bgreyscale\\b", r"\\bB&W\\b", r"\\bdesaturated\\b", r"\\bachromatic\\b",
r"白黒", r"モノクロ", r"グレースケール", r"無彩色", r"セピア"
]
filtered_text = text
for keyword in keywords_to_remove:
filtered_text = re.sub(keyword, "", filtered_text, flags=re.IGNORECASE)
# Clean up extra spaces that might result from removal
filtered_text = re.sub(r"\\s+", " ", filtered_text).strip()
return (filtered_text,)
…
アニメ ちはやふる3 OP 99RadioService - COLORFUL[OFFICIAL MUSIC VIDEO]
Mrs. GREEN APPLE「Soranji」Official Music Video
