/generate_from_json

Primary LanguagePythonApache License 2.0Apache-2.0

generate_from_json

Install

Require Python 3.9 or 3.10

  • for Cloud miniconda
  • for Windows

これは何か What is this?

  • 複数の絵をバッチ的に出せる(Prompts from fileの強化版)

  • 1枚の絵に対して色んなParameterを指定した複数の画像を生成できる

    • SamplerやStepsやPromptの強調を変えたりして変化を確認できる
  • Generate multiple pictures in batch (enhanced version of prompts from file)

  • Generate multiple images with various parameters for a single picture.

    • You can change the Sampler, Steps, emphasis of Prompts and more to see the changes.

活用イメージ Image of use

  • 1枚の絵に対して設定を詰めて追求する

  • generate foreverしてガチャ放置する

  • 新しいモデルに対して貯蔵してたプロンプトを一括で試す

  • Pursuing a single picture with a lot of settings.

  • Generate forever like lootbox

  • Try out all stored prompts for a new model at once, etc.

制限事項 Limitations

  • Reported AUTOMATIC1111/stable-diffusion-webui#4824

  • hypernetの内部名称を取得するために、処理開始時に一度すべてのhypernetをロードする

    • models/hypernetworks 内にファイルが沢山あると時間がかかるかも
  • Load all hypernetworks once at the start of processing to get the internal name of hypernetworks.

    • It may take a long time if there are many files in models/hypernetworks

操作方法 How to operate

  • extensions/generate_from_json/json ディレクトリに拡張子をjsonにしたファイルを入れる

    • 書式とキーはexample.jsonを参考にする。
    • 値はPNG Infoから取ってくる。
  • txt2imgのScriptで「Generate from json」を選択し、generateボタンを押す

  • フォルダに入れたすべてのjsonファイルを対象に処理を行う

    • glob() のデフォルト順なのでたぶん昇順ソート
  • Put files with json extension in extensions/generate_from_json/json directory

    • Refer to example.json for format and keys.
    • Get the value from PNG Info.
  • Select "Generate from json" in Script of txt2img and press generate button.

    • All json files in the folder will be processed.
      • Sort in ascending order, probably because that is the default order of glob()

jsonファイルについて About json files

  • sd_model_hashとhypernetは先頭に書きましょう

    • 切り替わるたびにロードし直すので時間がかかります。
  • keyは省略可能

    • 省略時はweb UIで指定した値が適用される
  • valueはPNG Infoで取得できるParametersの値に準じている

  • 各項目の意味

    "sd_model_hash": ckpt の sd_model_hash (8文字)
    "hypernet": pt の内部名称(ファイル名ではないので注意) もしくは "None"
    "steps": Sampling Steps
    "sampler": Sampling method
    "cfg_scale": CFG Scale
    "width": Width
    "height": Height
    "seed": Seed
    "clip_skip": Settings - Stop At last layers of CLIP model
    "prompt": 
    "negative_prompt": 
    "prompt_count": (オリジナル機能。後述)
    "hypernet_strength": Settings - Hypernetwork strength
    "eta": Settings - eta (noise multiplier) for (DDIM/PLMS or ancestral samplers)
    "ensd": Settings - Eta noise seed delta
    "subseed": Extra - Variation seed
    "subseed_strength": Extra - Variation strength
    "seed_resize_from_w": Extra - Resize seed from width
    "seed_resize_from_h": Extra - Resize seed from height
    "denoising_strength": Highres. fix - Denoising strength
  • txt2imgの画面に存在しない項目は、処理時にSettingsの値自体を書き換えるので注意

    • sd_model_hash
    • hypernet
    • hypernet_strength
    • eta
    • ensd
  • sd_model_hash and hypernet should be written at the top

    • It takes time to reload each time it switches.
  • key can be omitted.

    • If omitted, the value specified in the web UI is applied.
  • value is the same as the Parameters value that can be obtained from PNG Info

    • Model specification is an 8-character hash using sd_model_hash.
    • Sampler is the display name of the part to be selected by radio buttons.
    • hypernet is the internal name (note that it is not a file name)
      • "None" is used to specify None
    • The reason it's all so disjointed is due to the original spec.
  • Note that if an item does not exist in the txt2img screen, the Settings value itself will be rewritten during processing.

    • sd_model_hash
    • hypernet
    • hypernet_strength
    • eta
    • ensd

複数生成の指定 Specify multiple generation

  • value を配列にすると、それぞれの要素に対して画像を生成する
    • 型は厳密に記載してください(数値型なら""をつけない)
    • たとえば {"cfg_scale": [3,4,5], "steps": [20,28]} なら、3x2=6枚出す
    • 順番は以下のようになる。
{"cfg_scale": 3, "steps": 20}
{"cfg_scale": 3, "steps": 28}
{"cfg_scale": 4, "steps": 20}
{"cfg_scale": 4, "steps": 28}
{"cfg_scale": 5, "steps": 20}
{"cfg_scale": 5, "steps": 28}
  • If value is an array, an image is generated for each element.
    • Type must be strictly specified (no "" if it is a numeric type)
    • For example, if {"cfg_scale": [3,4,5], "steps": [20,28]}, 3x2=6 images are generated
      • The order would be as follows.

prompt_countによる強調変化機能 Emphasis change function by prompt_count

  • "prompt_count" が 2 以上の時、(hoge:1.0~1.5)のような書式で複数枚出力できる

    • "prompt_count" が 6 なら、1.0, 1.1, 1.2, 1.3, 1.4, 1.5が出る
    • 複数個所で強調を指定しても同時に増減する
  • When "prompt_count" is 2 or more, multiple images can be output in a format such as (hoge:1.0~1.5)

    • If "prompt_count" is 6, then 1.0, 1.1, 1.2, 1.3, 1.4, 1.5 are output.
    • Emphasis can be specified in multiple places, but they increase or decrease at the same time.

FAQ

1つのjsonでいろんな絵を出したい

  • いちおう prompt を配列にすることが出来る

    • 二人の女の子のどっちが映えるか比較するみたいな使い方を想定
    • ex. "prompt": ["red hair", "blue hair"],
    • このときは prompt_count は不要だし併用はできない
  • でもあくまで1ファイルで1枚の絵が完成するイメージ

    • 複数のparametersを1ファイルにまとめる機能とかは考えてない
    • 配列を一次元増やすような改造はそんなに難しくないような
  • I want to produce various pictures in one json.

    • I can make an array of prompts.
    • Assuming a use like comparing which of two girls looks better
    • ex. "prompt": ["red hair", "blue hair"],
    • In this case, prompt_count is not necessary and cannot be used together.
  • But it is just an image that one picture is completed in one file.

    • I'm not thinking of a function to combine multiple parameters into one file.
    • I don't think it's so difficult to modify it to add one dimension to the array.

Highres. fixは出来ないの?

Scriptsからは出来ないうんち。 uiの値を見てるので、uiで設定すれば反映される。