diff --git a/README.md b/README.md index 5e193f9..4d9f7fe 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,20 @@ KSampler, KSampler (Advanced) and custom sigmas in one node, built on `comfy.sam - **Step cache**: `step_cache` (off / auto / easycache / lazycache) wraps ComfyUI's own EasyCache and LazyCache, which skip model calls on steps where the output barely changes and work across architectures (including audio+video models). `auto` turns on easycache from 15 steps up; distilled 4-8 step runs should stay off. `cache_threshold` (higher = faster, softer), `cache_start` and `cache_end` set when it may skip. Measured on Anima, 30 steps, RTX 5080: easycache 0.1 skipped 15/30 steps (1.8x, similarity to uncached 0.991), 0.2 skipped 17 (2.05x, 0.978), 0.4 skipped 19 (2.4x, 0.971); lazycache 0.2 gave 2.05x at 0.988. Results vary by model. - **Presets**: save, apply and delete named presets (steps, cfg, sampler, scheduler, denoise, runs, step cache). They are stored in ComfyUI's user folder under `promptforge/sampler_presets.json`. +Tested starting points at about 1.5 MP (identity tests used a source picture through the edit graphs; every row was rendered and checked): + +| Model | T2I | Edit | +|---|---|---| +| Krea 2 FinePorn V6.1 | 10 steps, cfg 1, `euler`/`simple` (or `er_sde`/`beta`) | 10 steps, cfg 1, `euler`/`simple`, denoise 1 | +| Krea 2 Turbo Anime / ReaKrea2 Turbo | 8 steps, cfg 1, `res_multistep`/`simple` or `euler`/`simple` | 8 steps, cfg 1, same | +| MOSS FinalCut int8 / FP8 | 25 steps, cfg 3, `er_sde`/`sgm_uniform` | 20 steps, cfg 2, `euler`/`normal`, denoise 1 | +| MOSS Jib Mix | 20 steps, cfg 1, `euler`/`simple` | 20 steps, cfg 2, `euler`/`normal`, denoise 1 | +| MOSS Dirty | 25 steps, cfg 2, `er_sde`/`simple` | 20 steps, cfg 2, `euler`/`normal`, denoise 1 | +| MOSS PrimeLust fp16 / nvfp4 | 30 steps, cfg 5, `er_sde`/`normal` | 20 steps, cfg 2, `euler`/`normal`, denoise 1 | +| with a DMD LoRA (lodestones 8-step, sft 4-step) | 8 steps, cfg 1, `er_sde`/`simple`, LoRA strength 1 | 8 steps, cfg 1, `er_sde`/`simple`, denoise 1 | + +DMD on PrimeLust needs 12 steps and cfg 1.5. MOSS edit keeps the face well at `image_strength` 1.5-2.0 and denoise 1 (it is reference conditioning, not img2img: a denoise below ~0.8 tiles the image). Krea edit holds identity strongly at 8-10 steps, cfg 1. Presets with these names are already in the sampler list. + ### PromptForge Quantize Text Encoder (`PROMPTFORGE_QuantizeTextEncoder`) Turns a Qwen3.5 model folder (shards plus, if present, a separate `model-mtp*.safetensors`) into one quantized ComfyUI text encoder in `models/text_encoders`, in under a minute. Format `mixed` (default) is NVFP4 for the MLP and INT8 ConvRot for the attention layers, which ComfyUI runs reliably for long prompts; an all-NVFP4 file fails on long prompts. The vision tower, embeddings, output layer and the multi-token-prediction (MTP) head stay in bf16. Pick the file as the prompt writer: ComfyUI then writes with speculative decoding from the MTP head. A 9B model: 18 GB -> 9.6 GB, a prompt written in 8 to 10 s, against 18 s from the folder with transformers. Run the node once per model and refresh the lists (r). diff --git a/pyproject.toml b/pyproject.toml index 1ad44fe..6e8917b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "ComfyUI-PromptForge" description = "ComfyUI prompt enhancement suite: model/config node with GPU-aware auto settings, prompt enhancer with a preset catalog, and a standalone config finder." -version = "1.28.9" +version = "1.28.10" license = { file = "LICENSE" } dependencies = [ "transformers", diff --git a/sampler_defaults.py b/sampler_defaults.py index 0ef9958..dbcd325 100644 --- a/sampler_defaults.py +++ b/sampler_defaults.py @@ -21,6 +21,7 @@ FAMILY = { "krea2": {"sampler_name": "res_multistep", "scheduler": "simple"}, "minimax_h3": {"sampler_name": "euler", "scheduler": "simple"}, "ltxv": {"scheduler": "ltxv"}, + "moss_image": {"sampler_name": "er_sde", "scheduler": "simple", "steps": 20, "cfg": 3.0}, } DISTILLED_HINT = re.compile(r"turbo|distill|lightning|hyper|lcm|schnell|dmd|\b[2-9]step|\b[1-9]\d?step", re.I) DISTILLED = {"steps": 8, "cfg": 1.0}