Commit Graph
94 Commits
Author SHA1 Message Date
/ai.oliandClaude Opus 5.5 ea2ef591a3 Ratio Outpaint Calc : mask_padded + masque des bandes exact ; Region Mask List : extra_mask / empty
- Ratio Outpaint Calc : entree optionnelle mask -> sortie mask_padded
  (paddee exactement comme l'image). Masque des bandes construit avec le
  meme pad que l'image : il etait faux quand l'arrondi au multiple rognait
  la source (pad negatif).
- Region Mask List : extra_mask (une region de plus, non decoupee, ex. les
  bandes d'outpaint) et empty = keep / full_image (aucune region -> image
  entiere). Par defaut : comportement inchange.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ScF8qKYdotua6aKovsgdxV
2026-10-12 19:46:44 +02:00
/ai.oliandClaude Opus 5.5 62da29a66e v1.7.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ScF8qKYdotua6aKovsgdxV
2026-10-12 18:09:10 +02:00
/ai.oliandClaude Opus 5.5 47e6ac7d97 README : Aioli Mask BBox V2, note de migration, feather, empty_mask, measure_area
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ScF8qKYdotua6aKovsgdxV
2026-10-12 18:08:57 +02:00
/ai.oliandClaude Opus 5.5 344832e441 BBox Multiple Assembler : feather en padding replicate ; Inpaint Color Fix : measure_area
- Feather : le bord de l'image prolonge le masque (avant : compte comme
  noir, l'original revenait au bord). Region Preview suit.
- Inpaint Color Fix : entree optionnelle measure_area (image_area d'Aioli
  Mask BBox V2), les bandes n'entrent plus dans les statistiques.
  Sans elle : comportement identique.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ScF8qKYdotua6aKovsgdxV
2026-10-12 18:07:00 +02:00
/ai.oliandClaude Opus 5.5 adef5bbcaa Aioli Mask BBox V2 : une seule regle de geometrie, bandes au lieu d'etirement
- Nouveau node AioliMaskBBoxV2 (nodes/mask_bbox_v2.py), calcul dans
  nodes/bbox_core_v2.py (math pur). resolution en equivalent carre,
  plafond 2048^2 px, crop = bbox agrandi au ratio du modele, bandes si
  l'image ne suffit pas (x/y negatifs), context region / full_image,
  sortie image_area. Jamais de bbox coupe, jamais d'etirement.
- AioliMaskBBox passe en legacy (DEPRECATED, comportement identique).
  bbox_core.py intact.
- Mask Split Regions : empty_mask = nothing / full_image.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ScF8qKYdotua6aKovsgdxV
2026-10-12 18:05:33 +02:00
/ai.oliandClaude Opus 5 4cc1c21c58 README : section Aioli Mask BBox + note de migration
La section "BBox Multiple Fix" devient "Aioli Mask BBox" (entree padding qui
remplace padding + blur, note sur le mask vide), suivie d'une sous-section
"Migrating from BBox Multiple Fix" : les anciens workflows n'ont rien a faire,
la cle et les neuf sorties ne bougent pas. Bandeau 1.6.0 en tete.

Les chaines citees ailleurs dans le README perdent leur MaskBoundingBox+. Les
workflows d'exemple gardent la chaine 2 nodes : ils tournent toujours, c'est
signale a l'endroit ou ils sont listes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LNYuvBpfUhpoXu8n8oygAF
2026-09-14 22:34:44 +02:00
/ai.oliandClaude Opus 5 6442557074 Doc : InpaintColorFix pointe vers AioliMaskBBox
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LNYuvBpfUhpoXu8n8oygAF
2026-09-14 22:32:44 +02:00
/ai.oliandClaude Opus 5 5c51dd32e7 Doc : Aioli Mask BBox, note de migration, refs mises a jour
README : la section "BBox Multiple Fix" devient "Aioli Mask BBox" (entree
padding, note mask vide), avec une sous-section "Migrating from BBox Multiple
Fix" qui dit noir sur blanc que les anciens workflows n'ont rien a faire.
Bandeau 1.6.0 en tete. Les chaines citees ailleurs dans le README perdent leur
MaskBoundingBox+. Les workflows d'exemple gardent la chaine 2 nodes : ils
tournent toujours, c'est signale.

Docstrings des trois nodes list-aware mis a jour (ils s'affichent en tooltip
dans ComfyUI).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LNYuvBpfUhpoXu8n8oygAF
2026-09-14 22:31:46 +02:00
/ai.oliandClaude Opus 5 0805fb125f Fusionne Mask Bounding Box + BBox Multiple Fix en un seul node
📐 Aioli Mask BBox remplace la chaine MaskBoundingBox+ (ComfyUI Essentials, en
maintenance seule depuis avril 2025) -> BBoxMultipleFix : il detecte le bbox
lui-meme a partir du mask, avec un seul reglage `padding` la ou Essentials en
avait deux (padding + blur, qui elargissaient tous deux le bbox).

Rien ne casse : BBoxMultipleFix reste enregistre sous la meme cle, memes
entrees, memes sorties dans le meme ordre - simplement marque DEPRECATED.
L'algorithme est extrait dans nodes/bbox_core.py, partage par les deux nodes :
une seule implementation a maintenir.

Verifie : bbox_core rend des resultats strictement identiques a l'ancien code
sur 3 844 704 combinaisons ; la chaine 2 nodes et le node fusionne rendent des
tenseurs bit-identiques sur 5 760 configurations. Un mask vide ne plante plus.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LNYuvBpfUhpoXu8n8oygAF
2026-09-14 22:30:53 +02:00
/ai.oli 77a0ad34c6 v1.5.6: revert InpaintColorFix passthrough outputs
Remove the delta_e_threshold/blend_strength/feather_radius passthrough outputs added
in 1.5.5 (not needed). Back to the two original outputs (image_corrected, correction_mask).
The RGBA/grayscale robustness from 1.5.4 is kept.
2026-06-22 21:15:55 +02:00
/ai.oli d5c18ed318 v1.5.5: InpaintColorFix passthrough outputs
Add delta_e_threshold (FLOAT), blend_strength (FLOAT) and feather_radius (INT) as
outputs that echo the received settings, so they can be chained straight into a
second InpaintColorFix without re-wiring the value nodes. Image/mask outputs and
all behaviour unchanged.
2026-06-22 20:53:29 +02:00
/ai.oli 97c4fbacea v1.5.4: InpaintColorFix robust to RGBA / grayscale inputs
nano-banana / Gemini (and transparent PNGs) output 4-channel RGBA images; the LAB
conversion did reshape(-1, 3) and crashed ("cannot reshape array of size ... into
shape (3)"). Add _to_rgb3() to drop alpha / expand grayscale to 3 channels before
the LAB path, applied to both crops at the start of fix().
2026-06-22 20:37:52 +02:00
/ai.oli b88258d38a docs: multi-region edit example + remove debug_outline from docs
- replace the outdated "Example Workflow — Flux2Klein (custom-nodes)" section
  (WF_Inpaint_aioli-nodes) with a new "Multi-region edit (Flux.2 Klein)" section
  showcasing most inpaint nodes, illustrated with the checker / combined_mask /
  recomposed example images
- remove the debug_outline row from BBox Multiple Assembler and Region Preview
  inputs tables (now frozen internally in v1.5.3)
2026-06-19 19:44:27 +02:00
/ai.oli 4a77ea8d62 Add files via upload 2026-06-19 19:15:49 +02:00
/ai.oli a5521f840d v1.5.3: freeze debug_outline=True internally on RegionPreview and BBoxMultipleAssembler, and stop exposing it (cleaner canvas). The checker is always annotated; turning it off only made it a duplicate of the clean output, so it was not a useful toggle. No other behaviour change. 2026-06-19 19:09:14 +02:00
/ai.oli d70afc8e88 Add files via upload 2026-06-19 18:14:57 +02:00
/ai.oli b5e79aa426 docs: Region Preview — drop order I/O + coords from docs
Align the 👁 Region Preview section with the 5-output shape
(combined_mask, checker, mask_adjust, feather, opacity):
- coords paragraph reworded (masks are full-size, already positioned)
- inputs table: simplify masks row, remove x/y, width/height and order rows
- outputs table: remove the order row
- re-wiring note: explain order is set directly on the assembler
2026-06-19 15:35:18 +02:00
/ai.oli 59cf7acbb8 RegionPreview v1.5.2: drop the 'order' widget/output. ComfyUI can't link a node output into a combo input, and order doesn't affect the preview (union is order-independent). Set order directly on BBoxMultipleAssembler. mask_adjust/feather/opacity still pass through (INT/INT/FLOAT). 2026-06-19 15:28:54 +02:00
/ai.oli 713674c608 RegionPreview v1.5.1: drop unused x/y/width/height inputs (masks from RegionMaskList/MaskSplitRegions are full-size; coords were never used in the intended side-branch). Cleaner node, full-size path only. 2026-06-19 15:26:06 +02:00
/ai.oli 302a9bcad4 docs: document 👁 Region Preview (v1.5.0)
- intro node count Seven -> Eight
- new "👁 Region Preview" section: inputs/outputs tables, side-branch
  positioning, and the re-wiring note (INT/INT/FLOAT clean, order STRING)
2026-06-19 15:12:58 +02:00
/ai.oli 1b8e0db2e5 feat: add 👁 Region Preview node (v1.5.0)
Preview the assembler's combined_mask + colored checker BEFORE generation,
reusing BBoxMultipleAssembler's exact math (imported helpers). Branch it as a
side-channel after Region Mask List / Mask Split Regions. Also serves as a
single tuning point: set order/mask_adjust/feather/opacity here, visualize,
then rewire the outputs back into BBoxMultipleAssembler.

- nodes/region_preview.py: new RegionPreview node
- __init__.py: register import + class/display mappings
- pyproject.toml: 1.4.0 -> 1.5.0, description updated
2026-06-19 15:09:15 +02:00
/ai.oli 416ffbabed docs: document RegionalMaskConditioning global base layer (base_conditioning + base_strength) and regional-conditioning performance note 2026-06-19 00:17:23 +02:00
/ai.oli cda4bf74fc v1.4.0: RegionalMaskConditioning — optional global base_conditioning blended over the regional layer via base_strength (mask_strength-level blend, backward-compatible: base off by default) 2026-06-19 00:15:46 +02:00
/ai.oli 4cb017440e docs: Mask Split Regions now exposes only threshold/min_area/sort_by (connectivity & merge_distance fixed in code) 2026-06-18 23:58:44 +02:00
/ai.oli b8003edbb8 v1.3.1: MaskSplitRegions — expose only threshold/min_area/sort_by as widgets; freeze connectivity=8 and merge_distance=0 as code-level defaults (cleaner canvas, fixes combo glitch) 2026-06-18 23:57:08 +02:00
/ai.oli 663d661484 docs: document the 4 new nodes (BBox Multiple Assembler, Region Mask List, Regional Mask Conditioning, Mask Split Regions); update node count + deps (numpy/scipy) 2026-06-18 23:42:43 +02:00
/ai.oli 06754c13fd v1.3.0: new MaskSplitRegions node — split a hand-drawn mask into N connected-component masks (manual multi-region inpaint, like SAM3 but keyword-free). scipy.ndimage (already in ComfyUI), with threshold/min_area/merge_distance/connectivity/sort_by 2026-06-18 13:14:30 +02:00
/ai.oli 3fcdc5eb13 v1.2.0: full-canvas image-bounded mask_adjust in BBoxMultipleAssembler (fast separable morphology; within-rect composite -> reveals layer below beyond crop, no base overwrite); new RegionMaskList (+inverse-union background, switchable, appended last); simplified RegionalMaskConditioning (list-fold + 1->N broadcast) 2026-06-18 00:37:24 +02:00
/ai.oli 5a583859db feat(assembler): overlap hierarchy + mask_adjust + checker overlay (v1.1.1)
- order: list_first_on_top (1st mask on top, last = inverted background) or area_large_under
- mask_adjust: grow/shrink white zones before feather
- new 'checker' IMAGE output: per-region colored outlines to verify overlap
- bump to 1.1.1
2026-06-17 15:59:09 +02:00
/ai.oli 8bbb14d434 feat: add BBox Multiple Assembler + Regional Mask Conditioning (v1.1.0)
- BBoxMultipleAssembler: fold a list of per-mask crops back onto the base
  image by bbox coords (resize-to-source fixes /16 drift, overlap handling).
- RegionalMaskConditioning: combine a dynamic list of N (conditioning, mask)
  into one regional conditioning for single-pass KSampler, with optional
  background prompt on the inverted union.
- Register both in __init__.py, bump version to 1.1.0.
2026-06-16 20:45:57 +02:00
/ai.oli 3ed06c10ae docs(README): document force_square stretch case in BBox Multiple Fix
Adds a clear note in the BBox Multiple Fix section explaining what
happens when max(bbox_w, bbox_h) > min(W_src, H_src) in force_square
mode: the crop is clamped to a non-square rectangle and stretched
to fit the square target.

Documents the user-side fix: set the downstream ImageResize+ to
stretch mode (keep_proportion=False) using orig_width/orig_height
as targets for pixel-perfect recompose.

Mirrors the warning that the node now logs at runtime.
2026-05-15 20:40:08 +02:00
/ai.oli 3990986431 chore: bump version to 1.0.11 2026-05-15 20:38:18 +02:00
/ai.oli 35d4d5e86a fix(bbox): warn when force_square stretches non-fitting bbox
When force_square=True and max(bbox_w, bbox_h) > min(W_src, H_src),
the theoretical square doesn't fit in the source. The crop ends up
non-square (clamped to source) and stretched to fit the square target.

The node now logs a clear warning when this case is triggered,
pointing users to set the downstream ImageResize+ to stretch mode
(keep_proportion=False) using orig_width/orig_height for
pixel-perfect recompose.

The docstring was also updated to document this case explicitly.

No logic change — only the warning print + docstring update.
2026-05-15 20:38:04 +02:00
/ai.oli 36d5ce2d65 README: add "Try it live" link to NanoInpaint — CropNStitch Cloud app
Adds a one-line link in the nano-banana section pointing to the hosted
ComfyUI Cloud app version of the v3 workflow, so users can try it
without any download or setup.
2026-04-21 16:48:56 +02:00
/ai.oli 4edcf4ce54 README: add 3 ComfyCloud workflows, "why this approach" rationale, community links
- New ☁️ section listing all three ComfyCloud-compatible workflows
  (nano-banana v3, Flux2Klein, Qwen Image Edit 2511) with preview images
- New 💡 "Why this approach" TL;DR at the top explaining the technical
  advantages of the region-inpaint strategy:
  * source dimensions preserved end-to-end
  * more detail in the masked region (generation budget concentrated)
  * force_square avoids model-internal recrops ("pixel shift")
  * pixel-perfect recompose on original coordinates
- Updated subgraph widget table to include the new use_image2 toggle
  (v3 nano-banana only)
- Updated file paths to match the renamed examples
- Added 👋 "About" footer with aioli.collective site + Instagram,
  and a gentle ⭐/feedback nudge
2026-04-21 16:35:03 +02:00
/ai.oli c169e04419 Add files via upload 2026-04-21 12:04:16 +02:00
/ai.oli a129cc8b62 Delete examples/WF_Inpaint_aioli-subgraph_ComfyCloud_nano-banana.json 2026-04-21 12:03:28 +02:00
/ai.oli 1ae0c41099 Update example image and download link for ComfyCloud
Updated example image and ComfyCloud workflow download link in README.
2026-04-21 11:22:28 +02:00
/ai.oli 2f119e16bb Add files via upload 2026-04-21 11:20:17 +02:00
/ai.oli 66cf9a6718 Add files via upload 2026-04-21 11:18:05 +02:00
/ai.oli da9b2c3eae Delete examples/IMG_Inpaint_aioli-subgraph_ComfyCloud_nano-banana.png 2026-04-21 11:16:19 +02:00
/ai.oli aef46305cd Add files via upload 2026-04-21 11:06:05 +02:00
/ai.oli 13b0adb313 Delete examples/IMG_Inpaint_aioli-subgraph_ComfyCloud_Flux2Klein.jpg 2026-04-21 11:05:50 +02:00
/ai.oli debe4e0289 Add files via upload 2026-04-21 10:34:27 +02:00
/ai.oli 27682414bd Add files via upload 2026-04-21 10:21:47 +02:00
/ai.oli f1c7116afd Rename examples/BBOX_Multiple_Fix_Example.jpg to IMG_Inpaint_aioli-nodes_Flux2Klein.jpg 2026-04-21 10:20:01 +02:00
/ai.oli c39b649bad Rename WF_Inpaint_aioli-subgraph_ComfyCloud_nano-banana to WF_Inpaint_aioli-subgraph_ComfyCloud_nano-banana.json 2026-04-21 10:17:50 +02:00
/ai.oli 71c7b98191 Rename BBOX_Fix_Inpaint_ComfyCloud_Example.png to IMG_Inpaint_aioli-subgraph_ComfyCloud_nano-banana.png 2026-04-21 10:17:30 +02:00
/ai.oli bcd62c642f Add WF_Inpaint_aioli-subgraph_ComfyCloud_nano-banana 2026-04-21 10:16:40 +02:00
/ai.oli f5a35ab74e Delete examples/WF_Inpaint_aioli-subgraph_nano-banana.json 2026-04-21 10:16:18 +02:00