見出し画像

Deforumのサンプラーとスケジューラーを増やす話@reForge

新版forgeのDeforumだと、自動的にwebui内のサンプラーとスケジューラーを使用出来るようなスクリプトになっていますので、それほど違和感がありませんが、reForge様の旧来版Deforumだと、以前のwebuiのようにサンプラーとスケジューラーのセットで登録が必要なため、長い間アップデートされていません。。。。
以下のような感じですね。。。

ということで、ここは個人で追加する必要があります。

Deforumの中で、サンプラーを規定しているスクリプトは「defaults.py」というものです。

deforum-art/sd-forge-deforum: Deforum extension for stable-diffusion-webui-forge
がreForgeで使用出来るDeforumのバージョンになっています。5月以降更新されていません。

このスクリプトは以下のディレクトリを探すと見つかります。
scripts/deforum_helpers

開いたところ

このスクリプトの最初の「def get_sampler_list」の部分に、サンプラーとスケジューラーのリストが記載されており、そこを編集する形になります。

左側が指定するサンプラーとスケジューラー名で、小文字で入力、右側がDeforumで表示される名前で、こちらの好きな名前に設定可能です。

入力するサンプラーとスケジューラーについては、reForgeで使用出来るものであれば可能となっています。

この部分を編集後に再起動すると、追加したものが出現します。

以下の様に編集してみると。。。

2番目が書き換わりました。

作成したサンプラーとスケジューラーの組み合わせで、生成も問題なく行えています。

すでに好みの組み合わせのサンプラーとスケジューラーがあれば、それを作成しておくことでDeforumで問題なく楽しめることが分かりました。

また、同じスクリプトの下に、デフォルトのプロンプトがあります。
こちらを編集すると立ち上げた際のプロンプトをこちらの好みに指定することが可能になります。

<reForgeについて>
dev2で見てますが、知らないうちにスケジューラーの数が増えていました。
サンプラーも当然ながら知らないものがたくさんあるので、そのあたりで遊びたい方にはreForgeはおすすめかも。。。

Deforumは、サンプラーとスケジューラーで出来上がる画像が異なる事があるので色々試してみたい気もしますが選択に悩みますね。

<サンプラーとスケジューラーの反映のさせ方>
reForgeのスクリプト内にある、サンプラーとスケジューラーの表記方法を使用しないと期待した結果が得られない可能性があります。
以下、サンプラーが64個、スケジューラーが24個ありましたので、それを分けて一覧にしています。

<サンプラーのリスト>

def get_samplers_list():
    return {
        # サンプラーリスト (64個)
        'dpm++ 2m': 'DPM++ 2M',
        'dpm++ sde': 'DPM++ SDE',
        'dpm++ 2m sde': 'DPM++ 2M SDE',
        'dpm++ 2m sde heun': 'DPM++ 2M SDE Heun',
        'dpm++ 2s a': 'DPM++ 2S a',
        'dpm++ 3m sde': 'DPM++ 3M SDE',
        'euler a': 'Euler a',
        'euler': 'Euler',
        'lms': 'LMS',
        'heun': 'Heun',
        'dpm2': 'DPM2',
        'dpm2 a': 'DPM2 a',
        'dpm fast': 'DPM fast',
        'dpm adaptive': 'DPM adaptive',
        'restart': 'Restart',
        'euler dy': 'Euler Dy',
        'euler smea dy': 'Euler SMEA Dy',
        'euler negative': 'Euler Negative',
        'euler negative dy': 'Euler Negative Dy',
        'kohaku_lonyu_yog': 'Kohaku LoNyu Yog',
        'ddim': 'DDIM',
        'plms': 'PLMS',
        'unipc': 'UniPC',
        'euler_comfy': 'Euler Comfy',
        'euler_ancestral_comfy': 'Euler Ancestral Comfy',
        'heun_comfy': 'Heun Comfy',
        'dpmpp_2s_ancestral_comfy': 'DPM++ 2S Ancestral Comfy',
        'dpmpp_sde_comfy': 'DPM++ SDE Comfy',
        'dpmpp_2m_comfy': 'DPM++ 2M Comfy',
        'dpmpp_2m_sde_comfy': 'DPM++ 2M SDE Comfy',
        'dpmpp_3m_sde_comfy': 'DPM++ 3M SDE Comfy',
        'euler_ancestral_turbo': 'Euler Ancestral Turbo',
        'dpmpp_2m_turbo': 'DPM++ 2M Turbo',
        'dpmpp_2m_sde_turbo': 'DPM++ 2M SDE Turbo',
        'ddpm': 'DDPM',
        'heunpp2': 'Heun++2',
        'ipndm': 'IPNDM',
        'ipndm_v': 'IPNDM_V',
        'deis': 'DEIS',
        'euler_cfg_pp': 'Euler CFG++',
        'euler_ancestral_cfg_pp': 'Euler Ancestral CFG++',
        'sample_euler_ancestral_RF': 'Euler Ancestral RF',
        'dpmpp_2s_ancestral_cfg_pp': 'DPM++ 2S Ancestral CFG++',
        'sample_dpmpp_2s_ancestral_RF': 'DPM++ 2S Ancestral RF',
        'dpmpp_2s_ancestral_cfg_pp_dyn': 'DPM++ 2S Ancestral CFG++ Dyn',
        'dpmpp_2s_ancestral_cfg_pp_intern': 'DPM++ 2S Ancestral CFG++ Intern',
        'dpmpp_sde_cfg_pp': 'DPM++ SDE CFG++',
        'dpmpp_2m_cfg_pp': 'DPM++ 2M CFG++',
        'ode_bosh3': 'ODE Bosh3',
        'ode_fehlberg2': 'ODE Fehlberg2',
        'ode_adaptive_heun': 'ODE Adaptive Heun',
        'ode_dopri5': 'ODE Dopri5',
        'ode_custom': 'ODE Custom',
        'dpmpp_3m_sde_cfg_pp': 'DPM++ 3M SDE CFG++',
        'dpmpp_2m_dy': 'DPM++ 2M Dy',
        'dpmpp_3m_dy': 'DPM++ 3M Dy',
        'dpmpp_3m_sde_dy': 'DPM++ 3M SDE Dy',
        'euler_dy_cfg_pp': 'Euler Dy CFG++',
        'euler_smea_dy_cfg_pp': 'Euler SMEA Dy CFG++',
        'euler_ancestral_dy_cfg_pp': 'Euler Ancestral Dy CFG++',
        'dpmpp_2m_dy_cfg_pp': 'DPM++ 2M Dy CFG++',
        'clyb_4m_sde_momentumized': 'CLYB 4M SDE Momentumized',
        'res_solver': 'RES Solver',
        'kohaku_lonyu_yog_cfg_pp': 'Kohaku LoNyu Yog CFG++',
    }

<スケジューラーのリスト>

def get_schedulers_list():
    return {
        'normal': 'Normal',
        'karras': 'Karras',
        'exponential': 'Exponential',
        'sgm_uniform': 'SGM Uniform',
        'simple': 'Simple',
        'ddim_uniform': 'DDIM Uniform',
        'ays': 'Align Your Steps',
        'ays_gits': 'Align Your Steps GITS',
        'ays_11steps': 'Align Your Steps 11 Steps',
        'ays_32steps': 'Align Your Steps 32 Steps',
        'kl_optimal': 'KL Optimal',
        'beta': 'Beta',
        'sinusoidal_sf': 'Sinusoidal SF',
        'invcosinusoidal_sf': 'Inverse Cosinusoidal SF',
        'react_cosinusoidal_dynsf': 'React Cosinusoidal Dynamic SF',
        'uniform': 'Uniform',
        'polyexponential': 'Polyexponential',
        'turbo': 'Turbo',
        'cosine': 'Cosine',
        'cosexpblend': 'Cosine-Exponential Blend',
        'phi': 'Phi',
        'laplace': 'Laplace',
        'karras_dynamic': 'Karras Dynamic',
        'ays_custom': 'Align Your Steps Custom'
    }

いいなと思ったら応援しよう!