見出し画像

Deforumのプロンプト入力を楽にする方法を考えてみた:ComfyUI編

ComfyUIのDeforumのデフォルトプロンプト欄は以下のものです。
これはA1111と同じ形式ですね。

0:" tiny cute swamp bunny, highly detailed, intricate, ultra hd, sharp photo, crepuscular rays, in focus, 4k, landscape --neg nsfw, nude"

さて、話は戻りますが、このプロンプトの記載方法はフレーム数に対応したプロンプトを記載することで、プロンプトトラベルを行うための記述になりますが、プロンプトトラベルをしたくない人にも強要する仕様になっています。Deforumでは、ここの入力形式が合っていないとエラーで生成できなくなり、とてもストレスフルです(A1111でも)。
これを一々記載するのも面倒ですね。
A1111の場合は、Paraseqを使用することで、この問題を回避していました。しかし、ComfyUIだとParaseqをそのまま使用出来ません。。。

ComfyUIのdeforumでプロンプト問題を何とかしたい!!

ということで、色々調べてみて、2つ方法があると思われましたので、それぞれを記載しておきます。
おそらく前者の方法が一番楽でおすすめです。後者はプロンプト以降の調整にこだわりたい方などが良いかと思いました。

方法① 「Unformatted prompt」「append」ノードを使用する

上のリンクに簡単な説明があります。

「Unformatted prompt」の説明

ノードは以下のようになっています。

このノードで重要なのは、「改行」することで、プロンプトの塊として認識されるということです。
「keyframe_interval」は、改行されたプロンプトの塊がどれだけのフレーム数続けるかということになります。
以下に例を出します。見にくいですが、下のような感じの入力だと、2回改行されていますので、それぞれのプロンプト部分が50フレームずつ実行されます。緑枠のみが50フレーム、青枠のみが50フレーム、赤枠のみが50フレームという形です。

基本的に、この部分には「ポジティブプロンプト」を入れます。
改行せずに入力すればすべてのフレームにポジティブプロンプトが影響するということになります。

「append」ノードの説明

ここは、「ネガティブプロンプト」を入れるところにするのが良いと思います。下の2つを「Yes」にする必要があります。サイトの解説には「1プロンプト」とあるのですが、改行しないプロンプトの塊をさしていると思いますので、改行しないで入力が必要です。

この方法のメリットは、フレーム数を気にすることがないネガティブプロンプトを一緒に記載する必要がないという点が楽です。あと、Embeddingの入力が楽な点もあります。

ということで、デフォルトのプロンプトノードを削除してこれに切り替えることをお勧めします。

方法②Paraseqを使用する方法

こちらは、Paraseqに慣れた方とかだと試してみるのもありかと思った方法です。Paraseqのサイトに、以下のノードでもいい感じになると記載があったのですが、やり方が分からず自己流になってしまいましたので参考まで

<重要>プロンプトのエラーで、どこかが全角入力しているとエラーになります。全角・半角については注意しておく必要があります。私はこのエラーで作業が止まることがありました。

以下のプロンプトトラベル例を提示したいと思います。
以下の2つのプロンプト
P1
1girl, aqua_\(konosuba\), face shot, studying .She is focused on solving problems, her posture radiating seriousness. Her expression shows a bit of fatigue, but there's a sense of determination to keep going. in a bright room. Textbooks and notebooks are spread out on the desk. The walls of the room are decorated with colorful posters, and soft sunlight streams in through the window. score_9, score_8_up, score_7_up, best quality, masterpiece, 4k, uncensored, prefect lighting, rating_explicit, very aesthetic, anime
P2
1girl, aqua_(konosuba), face shot, smiling happily. She is radiating joy and satisfaction after completing her studies. Her posture is relaxed, and her expression shows a sense of accomplishment. In a bright room, textbooks and notebooks are spread out on the desk, now closed and neatly stacked. The walls of the room are decorated with colorful posters, and soft sunlight streams in through the window, adding to the cheerful atmosphere. score_9, score_8_up, score_7_up, best quality, masterpiece, 4k, uncensored, prefect lighting, rating_explicit, very aesthetic, anime

ネガティブプロント
worst score_5, score_4, quality, low quality, (bad anatomy), bad hands, (deformed arms), (deformed legs), (extra arms), (extra legs), error, missing fingers, extra digit, fewer digits, blurry

手順① Paraseqのサイトでの作業:設定とプロンプト入力

Paraseqの、Newボタンを押して新しいシートを作成して、フレーム数を指定します。ここでは60。「Add prompt」でプロンプト欄を2つにします。
プロンプト1とプロンプト2に上記を入れます。「Evenly space prompt」で移行を調整します。

こんな感じになる

手順② Paraseqのサイトでの作業:プロンプト情報のコピー

「RE-Render」を押してから、下の方にある「RAW Schedules」を開き、「Full prompt」を選択

下の欄に出てくる内容をコピペする

いっぱい書いてあるプロンプトが完成する。

このままだとエラーとなります。
最初の「"0"」というところが「0」でないといけないので、pythonのコードを作成して修正してもらうことにしました。
手順③ 自環境での作業:Pythonコードでプロンプトを修正
Pythonコードで、プロンプトの入力内容を修正します。テキストファイルに保存したものを修正してもらう形にしてみました。
GPTさんに作成してもらったものです。参考まで。これはテキストファイルにコピペしたプロンプトを修正する感じのコマンドです。

import re

def correct_prompts(file_path):
    # ファイルからテキストを読み込む
    with open(file_path, 'r', encoding='utf-8') as file:
        content = file.read()

    # 正規表現で数字部分のダブルクォートを削除
    corrected_content = re.sub(r'"(\d+)"', r'\1', content)

    # 修正後のテキストを新しいファイルに保存
    with open('output.txt', 'w', encoding='utf-8') as output_file:
        output_file.write(corrected_content)

# 指定されたパスを使って修正
file_path = r"変更用のテキストファイルのパス.txt"
correct_prompts(file_path)

print("修正が完了しました。結果は output.txt ファイルに保存されました。")

修正後に貼り付けたもの

これで動きました。
P1とP2を重ねるパターンも試しましたが、とりあえず動くことを確認しました。

この方法だと、プロンプトをテキストファイルに落とし込んで修正する作業があるため若干手間がかかります。ただ、P1とP2のプロンプトのウェイトを任意に変えることが出来ますので、それがしたい方はこちらになるかと思います。

この記事が気に入ったらサポートをしてみませんか?