Extensions/Nour_Comfy
ComfyUI Extension

Nour_Comfy

Pack custom node SDXL untuk ComfyUI dengan arsitektur modular (bukan single script), supaya lebih mudah di-maintain, di-scale, dan aman untuk workflow production.

By Nourivex·Created 6 months ago·Updated 6 months ago· 0
Nourivex/Nour_Comfy
Nodes
On cloudLocal install
Stars0
Updated6 months ago
Readme

Nour_Comfy Pack (Modular)

Pack custom node SDXL untuk ComfyUI dengan arsitektur modular (bukan single script), supaya lebih mudah di-maintain, di-scale, dan aman untuk workflow production.

Struktur Folder

Nour_Comfy/
├─ __init__.py
├─ nour_comfy.py                # compatibility shim (legacy import tetap jalan)
├─ nodes/
│  ├─ __init__.py               # registrasi NODE_CLASS_MAPPINGS
│  ├─ prompt_forge_xl.py
│  ├─ lora_stack_xl.py
│  ├─ detailer_prompt_xl.py
│  ├─ image_scale_total_pixels.py
│  ├─ checkpoint_hub_xl.py
│  ├─ image_route_toggle.py
│  ├─ latent_route_toggle.py
│  └─ io_bridge_nodes.py
├─ workflows/
│  ├─ Flux_Klein_Workflow.json
│  ├─ Workflow_V1.json
│  └─ Workflow_V2_Anime_FaceRef.json
└─ shared/
   ├─ __init__.py
   ├─ comfy_compat.py           # fallback safe untuk environment non-Comfy
   └─ text_utils.py             # helper clean prompt + encode conditioning

Node yang Tersedia

1) Nourivex Prompt Forge XL

Type name (harus sama di workflow): Nourivex Prompt Forge XL

Input utama

  • clip (CLIP)
  • character_prompt (STRING)
  • positive_base (STRING)
  • negative_base (STRING)
  • style_preset (COMBO)
  • example_prompt (COMBO)
  • size_preset (COMBO)
  • use_custom_size (BOOLEAN)
  • custom_width (INT)
  • custom_height (INT)
  • batch_size (INT)

Output

  • positive (CONDITIONING)
  • negative (CONDITIONING)
  • latent (LATENT)
  • width (INT)
  • height (INT)
  • positive_text (STRING)
  • negative_text (STRING)

Tips

  • Size auto dibulatkan ke kelipatan 64 agar stabil untuk SDXL latent.
  • Gunakan example_prompt kalau character_prompt belum diisi detail.

1b) Nourivex Checkpoint Hub XL

Type name (harus sama di workflow): Nourivex Checkpoint Hub XL

Node checkpoint modern untuk loader model SDXL agar pemilihan checkpoint lebih aman saat node default terhapus atau tidak sengaja terganti.

Input utama

  • checkpoint_name (COMBO)
  • auto_pick_sdxl (BOOLEAN)

Output

  • MODEL
  • CLIP
  • VAE
  • checkpoint_used (STRING)
  • available_checkpoints (INT)

Tips

  • Saat auto_pick_sdxl = true, node akan memprioritaskan checkpoint SDXL otomatis.
  • Gunakan output checkpoint_used untuk debug checkpoint aktif di workflow.

2) Nourivex LoRA Stack XL

Type name (harus sama di workflow): Nourivex LoRA Stack XL

Input utama

  • model (MODEL)
  • clip (CLIP)
  • sdxl_profile (Balanced SDXL / Character Focus / Detail Boost)
  • engine_profile (Auto / SDXL / FLUX)
  • flux_clip_strength_multiplier (FLOAT, default 0.0)
  • flux_name_hint (STRING token deteksi LoRA Flux)
  • Slot 1–6:
    • slotX_enabled (BOOLEAN)
    • slotX_lora (COMBO)
    • slotX_strength_model (FLOAT)
    • slotX_strength_clip (FLOAT)

Output

  • MODEL
  • CLIP
  • applied_loras (STRING)

Tips

  • Mulai dari 2–3 LoRA dulu agar lebih mudah tuning.
  • Range aman awal biasanya 0.2–0.8.
  • applied_loras dipakai untuk audit stack aktif saat generate.
  • Untuk LoRA Flux terbaru, set engine_profile = FLUX agar perilaku strength lebih aman (default clip multiplier 0.0).

3) Nourivex Detailer Prompt XL

Type name (harus sama di workflow): Nourivex Detailer Prompt XL

Input utama

  • clip (CLIP)
  • base_positive (STRING)
  • base_negative (STRING)
  • face_style (COMBO)
  • body_style (COMBO)
  • extra_face (STRING)
  • extra_body (STRING)

Output

  • face_positive (CONDITIONING)
  • face_negative (CONDITIONING)
  • body_positive (CONDITIONING)
  • body_negative (CONDITIONING)
  • face_prompt_text (STRING)
  • body_prompt_text (STRING)

Tips

  • Jalur face_* untuk detailer utama (wajah).
  • Jalur body_* opsional untuk pass tambahan area torso/body.

4) Image Scale To Total Pixels (SDXL Safe)

Type name (harus sama di workflow): Image Scale To Total Pixels (SDXL Safe)

Node ini sudah built-in di pack Nour_Comfy, jadi tidak perlu install pack pihak ketiga hanya untuk scaling berdasarkan total megapixels.

Input utama

  • image (IMAGE)
  • upscale_method (COMBO: nearest-exact / bilinear / bicubic / area / lanczos)
  • total_megapixels (FLOAT)

Output

  • IMAGE

Tips

  • Untuk tahap polishing SDXL, nilai awal aman di sekitar 1.0 - 1.5 MP.
  • Method lanczos jadi default untuk menjaga detail tetap tajam.

5) Nourivex Image Route Toggle

Type name (harus sama di workflow): Nourivex Image Route Toggle

Node utility untuk memilih output image final secara opsional:

  • langsung dari decode (tanpa upscale), atau
  • dari jalur upscale.

Input utama

  • image_base (IMAGE)
  • image_upscaled (IMAGE)
  • use_upscale (BOOLEAN)

Output

  • IMAGE

Tips

  • use_upscale = false untuk preview cepat.
  • use_upscale = true untuk output final lebih tajam.

6) Nourivex Load Image

Type name: Nourivex Load Image

Wrapper custom untuk node loader gambar agar workflow konsisten full memakai node pack Nour_Comfy.

Input utama

  • image (COMBO + upload)

Output

  • IMAGE
  • MASK

7) Nourivex Preview Image

Type name: Nourivex Preview Image

Wrapper custom untuk preview image. Node ini tetap menampilkan preview dan sekaligus passthrough IMAGE untuk chain workflow.

Input utama

  • images (IMAGE)

Output

  • IMAGE

8) Nourivex Upscale Model Loader

Type name: Nourivex Upscale Model Loader

Wrapper custom untuk memilih model upscale.

Input utama

  • model_name (COMBO)

Output

  • UPSCALE_MODEL

9) Nourivex Image Upscale With Model

Type name: Nourivex Image Upscale With Model

Wrapper custom untuk proses upscale image menggunakan model upscale.

Input utama

  • upscale_model (UPSCALE_MODEL)
  • image (IMAGE)

Output

  • IMAGE

10) Nourivex Latent Route Toggle

Type name: Nourivex Latent Route Toggle

Node utility untuk memilih latent final dari dua jalur input (T2I vs I2I/Inpaint) sebelum masuk sampler.

Input utama

  • latent_a (LATENT)
  • latent_b (LATENT)
  • use_latent_b (BOOLEAN)

Output

  • LATENT

Kompatibilitas & Migrasi

  • Node type names tidak diubah, jadi workflow lama tetap kompatibel.
  • nour_comfy.py tetap ada sebagai compatibility shim untuk import lama.
  • Registrasi utama sekarang ada di nodes/__init__.py.

Workflow yang Disarankan

Gunakan workflow: user/default/workflows/Workflow_V1.json (sudah disinkronkan untuk versi modular pack).

Catatan: default workflow sudah diset tanpa LoRA Nuwa-BaseMesh karena ada bug pada beberapa skenario detailer. Catatan tambahan: jalur body detailer Tahap 3 di workflow default sekarang dinonaktifkan agar pipeline lebih stabil. Catatan tambahan 2: FaceDetailer dilepas dari workflow default; alur default sekarang decode → 4x-UltraSharpV2 → preview. Catatan tambahan 3: upscale sekarang opsional lewat Nourivex Image Route Toggle (default: OFF untuk preview cepat).

Workflow V2 (Anime + Face Reference)

Workflow: user/default/workflows/Workflow_V2_Anime_FaceRef.json

Fokus V2:

  • Gaya anime Japan dengan checkpoint animagineXLV31_v31.safetensors.
  • Konsistensi wajah karakter via jalur IPAdapter FaceID.
  • Tetap memakai toggle upscale agar iterasi cepat/final render bisa dipilih.

Cara pakai V2:

  1. Upload gambar referensi wajah di node LoadImage (Face Reference).
  2. Jalankan workflow dengan weight FaceID awal di 1.0.
  3. Naikkan bertahap ke 1.1 - 1.3 bila kemiripan wajah belum cukup.
  4. Jika hasil terlalu kaku/overfit, turunkan weight atau lora_strength pada loader FaceID.

Troubleshooting V2:

  • Jika muncul error No link found in parent graph for id [7] slot [0] model, berarti input model di KSampler mengarah ke link lama.
  • Perbaikan default pada pack ini: KSampler.model wajib terhubung ke output model dari IPAdapterFaceID (link id 43 di workflow V2 saat ini).

Workflow Flux Klein (Text/Image Hybrid + Route Toggle)

Workflow: user/default/workflows/Flux_Klein_Workflow.json

Fokus Flux Klein:

  • Hybrid input Text-to-Image + Image-to-Image/Edit dalam satu graph.
  • Loader model via Nourivex Checkpoint Hub XL untuk checkpoint Flux Klein (auto_pick_sdxl = false).
  • Prompt text dari Nourivex Prompt Forge XL diproses dengan CLIPTextEncodeFlux + FluxGuidance (3.5).
  • Jalur I/O + preview + upscale menggunakan node custom: Nourivex Load Image, Nourivex Preview Image, Nourivex Upscale Model Loader, Nourivex Image Upscale With Model, dan route akhir Nourivex Image Route Toggle.

Arsitektur zona:

  1. Zona Input (The Switch)

    • Jalur A (T2I): Nourivex Prompt Forge XL → latent ke Nourivex Latent Route Toggle.
    • Jalur B (I2I): Nourivex Load ImageVAEEncode → latent ke Nourivex Latent Route Toggle.
    • Bridge inpaint disiapkan via InpaintModelConditioning (aktifkan dengan rewire latent ke switch sesuai kebutuhan edit area).
  2. Zona Mesin (Flux Engine)

    • Loader: Nourivex Checkpoint Hub XL → (opsional) Nourivex LoRA Stack XL.
    • Pada Nourivex LoRA Stack XL, gunakan engine_profile = FLUX untuk stack LoRA Flux terbaru.
    • Conditioning: CLIPTextEncodeFlux (positive + negative), lalu positive lewat FluxGuidance.
    • Sampler: KSampler dengan set wajib:
      • steps: 4 - 8
      • cfg: 1.0
      • sampler_name: euler
      • scheduler: simple
  3. Zona Perjalanan (Preview & Upscale)

    • VAEDecodeTiledNourivex Preview Image (hasil mentah).
    • Image Scale To Total Pixels (SDXL Safe) di 1.5 MP.
    • Route upscale:
      • base: langsung dari output image scale
        • upscaled: lewat Nourivex Image Upscale With Model
    • Seleksi final pakai Nourivex Image Route Toggle.
  4. Zona Akhir

    • Output dari Nourivex Image Route Toggle ke Nourivex Preview Image final (atau ganti ke SaveImage kalau ingin langsung simpan).

Quick Manual Switch (sebelum run):

  • Text-to-Image mode: Nourivex Latent Route Toggle.use_latent_b = false
  • Image-to-Image/Edit mode: Nourivex Latent Route Toggle.use_latent_b = true
  • Preview cepat (tanpa upscale model): Nourivex Image Route Toggle.use_upscale = false
  • Final render (dengan upscale model): Nourivex Image Route Toggle.use_upscale = true
  • Flux LoRA terbaru: di Nourivex LoRA Stack XL set engine_profile = FLUX

Catatan kompatibilitas Flux:

  • Workflow default Flux Klein sekarang tidak lagi bergantung pada ImpactLatentSwitch, karena sudah memakai node internal Nourivex Latent Route Toggle.
  • Jika CLIP Flux di environment kamu memakai varian node berbeda, mapping ulang node encode ke varian Flux yang tersedia tanpa mengubah alur utama.

Troubleshooting I/O bridge:

  • Jika sempat muncul error Nourivex Load Image requires ComfyUI runtime, update pack ini lalu restart ComfyUI (wrapper sekarang resolve node core lebih robust per module).

Install / Update

  1. Simpan folder ini di:
    • ComfyUI/custom_nodes/Nour_Comfy
  2. Restart ComfyUI.
  3. Jika node belum muncul:
    • hard refresh browser ComfyUI
    • cek console startup apakah folder Nour_Comfy terdeteksi

Best Practice Pack

  • Pisahkan logic node per file (nodes/*) agar clean architecture.
  • Taruh utility reusable di shared/*.
  • Pertahankan NODE_CLASS_MAPPINGS stabil untuk backward-compat.
  • Setiap update input/output node, wajib update README agar workflow user tetap sinkron.