試行錯誤中だけどメモ。
画像生成AIでいきなり高解像度で画像を作ろうとすると、
複数コマに分かれて漫画になったり、
キャラクターのアス比がおかしなことになったりして大変なことになる。
なので、低解像度で大まかな構図を出して、
Hires.fixで仕上げる、みたいなことを実験中。
元絵をKohaku LoNyu Yogでサンプリングして荒削りな構図を出す。
Hires.fix をEuler aでサンプリングして仕上げをする。
って具合にやってたんだけど、
それぞれ噛み合わせの良いプロンプトと悪いプロンプトがあるようなので、
元絵とHiresで別々のプロンプトを入力していたのです。
が、連続したシーンをスクリプトで作成していると、
この仕上げの際に謎の物体を勝手に追加されまくる問題が出てきましてね……
SDさんからすれば、レンダリングにあたってどういうシーンを狙って描いてるのかの
情報がまったく無いわけですから、こうなるのも当然っちゃ当然なのかもですが。
というわけで、Hires.fix側のプロンプトにもスクリプト行を入力して欲しくなりました。
これを実現するためのオプションスイッチは無いのですが、
prompts_from_file.py の165行目辺りにあるブロックに対して、
ちょっと書き足すことでHires側のプロンプトにも同様のプロンプトを注入できるようなので、
実際にやってみました。
なお、書き換えた後にForge-Neoを再起動しないと、この変更は反映されません。
最悪、この改造でぶっ壊す可能性もあるので、元のファイルはコピーして、
拡張子を.bakにでもして退避しておくのがよろしいかと。
if args.get("prompt") and p.prompt:
if prompt_position == "start":
copy_p.prompt = f'{args.get("prompt")} {p.prompt}'
else:
copy_p.prompt = f'{p.prompt} {args.get("prompt")}'
if args.get("negative_prompt") and p.negative_prompt:
if prompt_position == "start":
copy_p.negative_prompt = f'{args.get("negative_prompt")} {p.negative_prompt}'
else:
copy_p.negative_prompt = f'{p.negative_prompt} {args.get("negative_prompt")}'
これを
if args.get("prompt") and p.prompt:
if prompt_position == "start":
copy_p.prompt = f'{args.get("prompt")} {p.prompt}'
if getattr(p, "hr_prompt", ""):
copy_p.hr_prompt = f'{args.get("prompt")} {p.hr_prompt}'
else:
copy_p.prompt = f'{p.prompt} {args.get("prompt")}'
if getattr(p, "hr_prompt", ""):
copy_p.hr_prompt = f'{p.hr_prompt} {args.get("prompt")}'
if args.get("negative_prompt") and p.negative_prompt:
if prompt_position == "start":
copy_p.negative_prompt = f'{args.get("negative_prompt")} {p.negative_prompt}'
if getattr(p, "hr_negative_prompt", ""):
copy_p.hr_negative_prompt = f'{args.get("negative_prompt")} {p.hr_negative_prompt}'
else:
copy_p.negative_prompt = f'{p.negative_prompt} {args.get("negative_prompt")}'
if getattr(p, "hr_negative_prompt", ""):
copy_p.hr_negative_prompt = f'{p.hr_negative_prompt} {args.get("negative_prompt")}'
このように変更。
そうそう、End側にプロンプトを足すと上手く動かないという現象に遭遇してたけど、
プロンプトをコメント行で終わらせてるとそもそもEnd側に追加したプロンプトは上手く動かない。