From d3401751c694c1ae276e47fffeba284bcd27d961 Mon Sep 17 00:00:00 2001 From: dreevelle <123705989+dreevelle@users.noreply.github.com> Date: Mon, 26 Oct 2026 10:39:07 +0000 Subject: [PATCH] remove claude.md --- CLAUDE.md | 157 ------------------------------------------------------ 1 file changed, 157 deletions(-) delete mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 77dfc39..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,157 +0,0 @@ -# CLAUDE.md - -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -## What this is - -A single-file ComfyUI custom node package. All code lives in `__init__.py`; there -is no build step, test suite, or linter config. Three nodes — -`ResolutionPreset`, `ResolutionSelectorMP` and `ResolutionAlignToGrid` — all pure -integer maths with no torch/numpy involvement. - -`ResolutionPreset`'s combo options are **generated at import time** by -`build_presets()` from the same `lattice_step()` the solver uses, so the list can -never disagree with `solve_exact()`. Do not hand-edit resolutions into it. The -per-ratio grid choice (coarsest alignment yielding `PRESET_MIN_ENTRIES` sizes) -exists because fine-lattice ratios like 1:1 have L=16 and would otherwise emit -~105 entries; changing `PRESET_MIN_MP` / `PRESET_MAX_MP` / `PRESET_MIN_ENTRIES` -silently reshapes every label, and **labels are the public API** — a saved -workflow stores the selected label string, so altering the format or the tuning -constants breaks existing graphs. - -Registered through ComfyUI's **V3 schema API**, not the legacy -`NODE_CLASS_MAPPINGS` dict: `comfy_entrypoint()` returns a `ComfyExtension` whose -`get_node_list()` yields `IO.ComfyNode` subclasses. Inputs are declared in -`define_schema()` and arrive as named kwargs to `execute()`. - -## Local environment - -- ComfyUI checkout: `/home/dreevelle/comfy/ComfyUI` -- Python venv: `/home/dreevelle/comfy-env/bin/python` -- The package is published, and `ComfyUI/custom_nodes/comfyui-resolution-tools` - (lowercase, the registry id) is a **ComfyUI-Manager install** that tracks - registry releases. This working tree is not wired into ComfyUI. - -To test a change before releasing it, symlink this tree in under its CamelCase -name so it doesn't collide with the Manager install: - -```bash -ln -sfn /home/dreevelle/Projects/ComfyUI-ResolutionTools \ - /home/dreevelle/comfy/ComfyUI/custom_nodes/ComfyUI-ResolutionTools -``` - -**Remove that symlink before doing anything in ComfyUI-Manager for this -package.** Manager's remove/replace path does `shutil.rmtree` on the *resolved* -path, so it deletes the symlink target's contents instead of unlinking — on -2026-08-09 that wiped this working tree, `.git` included, and it had to be -restored by re-cloning. Commit and push before any Manager operation, and never -leave a symlinked dev copy in place while installing or updating the published -version. - -## Verifying changes - -`__init__.py` imports `comfy_api.latest` at module scope, so it needs ComfyUI on -`sys.path` — but the maths functions are module-level and dependency-free, so -they can be exercised directly: - -```bash -cd /home/dreevelle/comfy/ComfyUI && PYTHONPATH=/home/dreevelle/comfy/ComfyUI \ -/home/dreevelle/comfy-env/bin/python -c " -import importlib.util -spec = importlib.util.spec_from_file_location('rt', '/home/dreevelle/Projects/ComfyUI-ResolutionTools/__init__.py') -m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m) -print(m.solve_exact(9, 16, 16, 2.36e6)) # -> (1152, 2048) -" -``` - -Two invariants any change to `solve_exact` must preserve, and which are worth -re-fuzzing over random `(ratio, alignment, target)` triples: - -1. `width % alignment == 0 and height % alignment == 0` -2. `width * h_ratio == height * w_ratio` (ratio held exactly, no drift) - -Known-good anchors: `9:16 @ m=16, 2.36 MP -> 1152x2048`; -`16:9 @ m=32, 1.33 MP -> 1536x864`; `21:9 @ m=16, 2.37 MP -> 2352x1008`. - -## Why the maths is what it is - -**Real megapixels.** Core's `comfy_extras/nodes_resolution.py:78` uses -`megapixels * 1024 * 1024`. That's the SDXL-era convention where "1 MP" meant -1024x1024. This package deliberately diverges to `* 1_000_000`. Do not "fix" -this to match core — the divergence is the point, and the README documents it. - -**Lattice solving.** `lattice_step()` computes the smallest scale increment that -keeps both axes on the alignment grid while holding an exact ratio. Core rounds -each axis independently, which drifts the ratio (9:16 at 2.36 MP becomes 0.5649 -instead of 0.5625). `solve_nearest()` preserves core's behaviour for when the -lattice is too coarse; it is opt-in via `exact_ratio=False`. - -**Alignment = VAE spatial downscale x DiT patch size.** Verified against the -ComfyUI source rather than assumed: - -- Krea 2 -> 16. `latent_formats.LatentFormat.spacial_downscale_ratio = 8` - (inherited by `Wan21`, which `supported_models.Krea2` uses) x `patch=2` in - `comfy/ldm/krea2/model.py`. -- MiniMax H3 -> 32. `latent_formats.MiniMaxH3Video.spacial_downscale_ratio = 16` - x `patch_size=(1, 2, 2)` in `comfy/ldm/minimax/model.py`. -- SDXL/SD1.5 -> 64. UNet, no patchify; three downsample stages on an 8x VAE. - -The failure mode when unaligned is `comfy.ldm.common_dit.pad_to_patch_size`, -which pads with `padding_mode="circular"` and appends only at the end — hence a -bottom/right band, never top/left. If a future model changes VAE or patch size, -the alignment table in the README and `ALIGNMENT_TOOLTIP` both need updating. - -## Conventions - -- Version is duplicated in `__version__` (`__init__.py`) and `[project].version` - (`pyproject.toml`) — bump both. -- `dependencies` stays empty; this package is stdlib-only by design. -- Node IDs (`ResolutionSelectorMP`, `ResolutionAlignToGrid`) are the public API. - Renaming one breaks every saved workflow that uses it. - -## Releasing - -Intended for the Comfy Registry as `comfyui-resolution-tools` under publisher -`dreevelle`, same setup as ComfyUI-FastImageSequence. - -**Changing `[project].version` in `pyproject.toml` on `main` publishes a -release.** `.github/workflows/publish_action.yml` watches that path and runs -`Comfy-Org/publish-node-action` with the `REGISTRY_ACCESS_TOKEN` repo secret. -Don't touch the version field unless a release is intended; republishing an -existing version fails with `400 The node version already exists`. - -`.comfyignore` keeps `CLAUDE.md` and `.github/` out of the published archive. -`comfy node validate` runs the registry checks locally; `comfy node pack` -produces the exact archive that would be uploaded. - -`assets/icon.png` is the registry icon, pointed at by `[tool.comfy] Icon` as a -raw GitHub URL on `main`. The registry stores the *URL*, not the bytes, and the -Manager hotlinks it, so **replacing this file on `main` restyles every card with -no republish**. Only changing the URL needs a version bump, because `icon` is -node-level metadata written as a side effect of publishing a version. - -The background is **transparent on purpose**. The frontend's `PackBanner` draws -the icon twice into a 7:3 box — once as a backdrop, `bg-cover` plus `blur(10px)` -at `opacity-30`, and once `object-contain` on top. An opaque icon therefore shows -as a hard rectangle: `bg-cover` crops to the centre and zooms ~2.3x, so it samples -mostly glow and lifts the surround to ~47, while the contained copy still shows -the icon's own near-black corners at ~17. Deriving alpha from luminance removes -the edge completely, and it is the right derivation because the artwork is -additive glow on near-black. The cost, accepted deliberately, is that the pale -mark washes out on ComfyUI's light theme. - -Regenerate from the brand original, capped at the registry's 400x400 square -maximum. Downscale in linear light; the naive sRGB-space resize dulls the ring -stroke and blurs the bar separations inside the D: - -```bash -magick ~/Projects/alora/dev/assets/brand/dreevelle_pfp.png \ - -colorspace RGB -filter Lanczos -resize 400x400 -colorspace sRGB \ - \( +clone -grayscale Rec601Luma -level 7.45%,100% \) \ - -alpha off -compose CopyOpacity -composite \ - -background none -alpha Background -strip assets/icon.png -oxipng -o max --strip safe assets/icon.png -``` - -Do not set `[tool.comfy] Banner`. `PackBanner` resolves `banner_url || icon`, so -a banner *replaces* the mark rather than sitting behind it.