π§ͺ LoRa x Sampler x Scheduler Grid (Forge)
νμΌ λ€μ΄λ‘λ
μ΄ λ²μ μ λν΄
βοΈ ν΅μ¬ λ‘μ§
π ν΅ν©λ state.interrupt()
μ μ§ λ²νΌμ΄ μ΄μ XY 그리λ λ° λ°°μΉ κ·Έλ¦¬λ λͺ¨λ λͺ¨λμμ μμ±μ μμΈ‘ κ°λ₯νκ² μ€λ¨ν©λλ€.
safe_processed()λ₯Ό μ¬μ©νμ¬ μ°μν μ‘°κΈ° μ’ λ£λ₯Ό μνif state.interrupted:체ν¬λ₯Ό μΆκ°νμ΅λλ€.μ€λ¨ μ€ Forgeκ° μ μ§λλ κ²μ λ°©μ§νκΈ° μν΄ λͺ¨λ μ€μ²© 루νλ₯Ό μ²λ¦¬ν©λλ€.
𧩠그리λ λ μ΄μμ λ‘κΉ
μμ± μ μ½μμ μ 보 μΆκ°:
π§© XY 그리λ λ μ΄μμ β rows=..., cols=..., samplers=..., schedulers=..., weights=...그리λ μ€μ λ° μ΄ λ°λ³΅ νμλ₯Ό μκ°ννλ λ° λμμ μ€λλ€.
βοΈ LoRA κ°μ€μΉ λ°©ν₯ μμ
LoRA λ μ΄λΈ μμΉκ°
β¬ οΈ μΌμͺ½λλβ‘οΈ μ€λ₯Έμͺ½μΌ λ,
β LoRA κ°μ€μΉκ° μ΄μ μλ(μ΅μ) β μ(μ΅λ) λ‘ μ λ ¬λλ©°,
μ§κ΄μ μΈ YμΆ λμκ³Ό μΌμΉν©λλ€.XY 그리λ μμ± μ μ
current_weights리μ€νΈλ₯Ό μμμΌλ‘ μ λ ¬νμ¬ κ΅¬ννμ΅λλ€.
π¨ ν둬ννΈ / LoRA μ²λ¦¬
π§ μ¬μμ±λ apply_params()
weight == 0.0μΌ λ LoRAλ μμ ν 건λλλλ€.
β ν둬ννΈμ LoRA νκ·Έλ νΈλ¦¬κ±° λ¨μ΄κ° μΆκ°λμ§ μμ΅λλ€.μ€λ³΅ νΈλ¦¬κ±° λ¨μ΄ λλ
<lora:...>νκ·Έλ₯Ό λ°©μ§ν©λλ€.λΆνμν μ½€λ§/곡백μ μ 리νμ¬ ν둬ννΈ νμμ μΌκ΄λκ² μ μ§ν©λλ€.
μ ν둬ννΈ μ‘°λ¦½ μμ:
[λ©μΈ ν둬ννΈ], <lora:name:weight>, νΈλ¦¬κ±°λ©νλ°μ΄ν°μ λΆνμν β, , , , ,βκ° λ μ΄μ ν¬ν¨λμ§ μμ΅λλ€.
π§© XY 그리λ
β κ°μ λ μμ± λ£¨ν
μμ§ λ° μν λ°©ν₯μ λν μ¬λ°λ₯Έ ν/μ΄ μΈλ±μ±.
save_cells=TrueμΌ λ μμ±λ λͺ¨λ μ μ΄ μ μ₯λλλ‘ λ³΄μ₯ν©λλ€.λͺ¨λ λ μ΄λΈ μμΉ(
Top,Bottom,Left,Right)μ νΈνλ©λλ€.
π§Ύ ν₯μλ λ‘κΉ
κ° λ°λ³΅λ§λ€ μμΈν μ§ν μν©μ μΆλ ₯ν©λλ€:
π[7/36] Sampler='Euler a', Scheduler='Automatic', LoRA='Apone3d', Weight=0.50, Seed=...XY 그리λμ λ°°μΉ κ·Έλ¦¬λ κ° μΌκ΄λ λ‘κΉ μ€νμΌ.
π§© λ°°μΉ κ·Έλ¦¬λ
βοΈ κ°μ λ μ μ΄ νλ¦
λͺ¨λ μ€μ²© 루νμ
state.interrupt()μμ 체ν¬λ₯Ό μΆκ°νμ΅λλ€.λͺ νν λ‘κ·Έμ ν¨κ» κΉλν μ’ λ£:
π μ¬μ©μμ μν΄ μμ±μ΄ μλμΌλ‘ μ€λ¨λμμ΅λλ€.LoRA κ°μ€μΉ = 0.0μ μ΄μ XY 그리λμ λμΌνκ² λμν©λλ€β
LoRA λ° νΈλ¦¬κ±°λ₯Ό μ μ©νμ§ μμ΅λλ€.
𧩠그리λ κ²μ¦ λ° μ μ₯
validate_cells_for_grid()μΆλ ₯ κ°μ :π« 그리λ κ²μ¦ λ¬Έμ : β μ [1,2]κ° Noneμ λλ€ ...λΉ μ λλ μ ν¨νμ§ μμ 그리λμ μ μ₯μ λ°©μ§ν©λλ€.
μ μ₯λ μ νμΌλͺ μ λͺ¨λ κ΄λ ¨ λ§€κ°λ³μκ° ν¬ν¨λ©λλ€:
LoRA_W0.50_S-Euler_SchAutomatic_1_2.webp
π¬ λ‘κΉ λ° UX
μΌκ΄λ μ΄λͺ¨μ§ μ½λ λ©μμ§:
π μμ β’ π μ§ν β’ πΎ μ μ₯ β’ π μ€λ¨ β’ β μλ£ β’ β μ€λ₯λͺ¨λ
print()νΈμΆμflush=Trueμ¬μ© β μ¦μ ν°λ―Έλ μΆλ ₯.그리λ μμ± ν
gc.collect()μΆκ°λ‘ λ©λͺ¨λ¦¬ μ 리 ν₯μ.
π§° λ΄λΆ κ°μ
λΆνμν
build_grid_labels()νΈμΆ μ κ±°.μ€μ²© 루ν λ‘μ§ λ¨μν λ° λͺ μΉ ν΅μΌ(
sampler_label,scheduler_label).get_cell_indices()λ§€κ°λ³μ λ°orientationμ²λ¦¬ νμ€ν.κ°λ μ± λ° Forge UI λμκ³Όμ μΌκ΄μ±μ μν μ¬μν 리ν©ν λ§.
π§Ύ μμ½
π μ μ§ μ²λ¦¬: state.interrupt() ν΅ν© β μμΈ‘ κ°λ₯ν μ€λ¨
βοΈ μμ§ LoRA: κ°μ€μΉ μμ β μλ=μ΅μ, μ=μ΅λ
π§ ν둬ννΈ λ‘μ§: apply_params() μ¬κ΅¬μ± β κΉλνκ³ μ€λ³΅ μ κ±°λ ν둬ννΈ
π§© XY 그리λ: λ μ΄μμ λ‘κΉ μΆκ° β λͺ νν 그리λ κ°μ
π§± λ°°μΉ κ·Έλ¦¬λ: LoRA λ° νΈλ¦¬κ±° λ‘μ§ ν΅μΌ β μΌκ΄λ μΆλ ₯
π¬ λ‘κΉ : μ΄λͺ¨μ§ + flush β κ°λ μ± λκ³ μ€μκ° νΌλλ°±
π§Ή λ©λͺ¨λ¦¬: gc.collect() μΆκ° β μμ¬ λ©λͺ¨λ¦¬ λμ λ°©μ§






