feat: ultra-strong SDXL QR variant, workflow blueprints, router updates
Adds a stronger SDXL QR hidden-image workflow and separates reusable blueprints from the runnable workflows, alongside node and installer updates. - workflows/sdxl_qr_hidden_image_ultra_strong.json: new higher-strength variant of the SDXL QR workflow. - workflow_blueprints/: blueprint copies of the flux ghost, sd15 QR, sdxl QR, and unified router graphs, kept separate from the executable workflows. - illusion_nodes.py, install.bat, docs/WORKFLOWS.md, README.md: node and install/documentation updates to match.
This commit is contained in:
@@ -6,7 +6,7 @@ The project is built around three goals:
|
||||
|
||||
- single-click dependency setup for hidden-image experiments
|
||||
- custom nodes for pattern preprocessing, text-mask generation, scheduler presets, and FLUX-style latent ghosting
|
||||
- workflow blueprints for QR, subliminal text, logo, and optical-illusion style pipelines
|
||||
- importable starter workflows plus blueprint notes for QR, subliminal text, logo, and optical-illusion style pipelines
|
||||
|
||||
## Features
|
||||
|
||||
@@ -32,7 +32,9 @@ The project is built around three goals:
|
||||
- `model_manifest.json`
|
||||
Public model list, preset mapping, and manual follow-up entries.
|
||||
- `workflows/`
|
||||
Workflow blueprints for SD 1.5, SDXL, FLUX, and a unified router preset.
|
||||
Importable ComfyUI starter prompts for SD 1.5, SDXL, FLUX, and a unified router preset.
|
||||
- `workflow_blueprints/`
|
||||
Human-readable blueprint JSON preserved from the original workflow notes.
|
||||
- `docs/WORKFLOWS.md`
|
||||
Notes on how to wire the blueprint workflows inside ComfyUI.
|
||||
|
||||
@@ -110,18 +112,20 @@ The installer does not auto-download gated or license-acceptance base models suc
|
||||
|
||||
## Workflows
|
||||
|
||||
The `workflows/` directory currently contains blueprint JSON files rather than exported ComfyUI canvases:
|
||||
The `workflows/` directory now contains importable ComfyUI starter prompts:
|
||||
|
||||
- `sd15_qr_hidden_image.json`
|
||||
- `sdxl_qr_hidden_image.json`
|
||||
- `flux_ghost_hidden_image.json`
|
||||
- `unified_illusion_router.json`
|
||||
|
||||
This is intentional for now. Saved ComfyUI graph exports depend on the exact checkpoint loader and FLUX packaging used in a live install.
|
||||
These starters include the NanoBanana preprocessing path and placeholder model-loader branches where the exact checkpoint or ControlNet choice is install-specific.
|
||||
|
||||
The original human-readable blueprint files were moved to `workflow_blueprints/` and are still referenced by `docs/WORKFLOWS.md`.
|
||||
|
||||
## Roadmap
|
||||
|
||||
- importable ComfyUI workflow canvases
|
||||
- fully wired model-specific ComfyUI workflow canvases
|
||||
- more style presets for logos, spirals, and depth-guided illusions
|
||||
- optional gated-model manifest entries
|
||||
- stronger FLUX workflow automation
|
||||
@@ -130,4 +134,4 @@ This is intentional for now. Saved ComfyUI graph exports depend on the exact che
|
||||
|
||||
This repository is released under the MIT License. See `LICENSE`.
|
||||
|
||||
Model weights, third-party nodes, and external checkpoints retain their own upstream licenses.
|
||||
Model weights, third-party nodes, and external checkpoints retain their own upstream licenses.
|
||||
|
||||
+15
-11
@@ -1,20 +1,24 @@
|
||||
# Workflow Notes
|
||||
|
||||
The JSON files in `workflows/` are model-specific workflow blueprints rather than drag-and-drop ComfyUI graph exports. They define the node order, recommended settings, and the exact role of each NanoBanana custom node.
|
||||
The `workflows/` directory now contains importable ComfyUI starter prompts instead of the old human-readable blueprint JSON. These files should open as non-empty starter canvases in ComfyUI.
|
||||
|
||||
Recommended graph pattern:
|
||||
The original reference notes were preserved in `workflow_blueprints/`.
|
||||
|
||||
1. Load pattern input with `LoadImage` or generate it with `NanoBanana Text Mask`.
|
||||
2. Normalize the pattern with `NanoBanana Pattern Preprocessor`.
|
||||
3. Use `NanoBanana Magic Scheduler` to derive family-specific ControlNet values.
|
||||
4. For FLUX, also route the processed pattern into `NanoBanana Latent Mask` and then `Set Latent Noise Mask`.
|
||||
5. Feed the processed image into the correct ControlNet loader and `Apply ControlNet Advanced`.
|
||||
6. Finish in the family-appropriate sampler path.
|
||||
What is in the starter prompts:
|
||||
|
||||
The split is intentional:
|
||||
1. A runnable NanoBanana preprocessing path with preview outputs, so loading and queueing the file does something useful immediately.
|
||||
2. SD 1.5 and SDXL starter branches with placeholder checkpoint and ControlNet loader nodes already laid out.
|
||||
3. A FLUX preprocessing starter focused on pattern prep and latent-mask generation, since full FLUX loader stacks vary across installs.
|
||||
|
||||
Recommended usage:
|
||||
|
||||
1. Open a starter from `workflows/`.
|
||||
2. Replace the placeholder checkpoint and ControlNet selections with models that exist in your install.
|
||||
3. Swap `NanoBanana Text Mask` for `LoadImage` if you want to drive the workflow from a QR image or logo file.
|
||||
4. For FLUX, route the `NanoBanana Latent Mask` output into `Set Latent Noise Mask` inside your preferred FLUX sampler chain.
|
||||
|
||||
The original blueprint split still applies:
|
||||
|
||||
- SD 1.5 stays aggressive and is best for scannable QR or obvious hidden text.
|
||||
- SDXL uses optical-pattern composition at higher resolution.
|
||||
- FLUX uses low-strength ControlNet plus latent masking to avoid fighting the model's coherence.
|
||||
|
||||
If you want these blueprints converted into visual ComfyUI workflow exports next, the missing piece is your exact loader stack for SDXL and FLUX in your local install. That varies based on checkpoint packaging and custom nodes.
|
||||
+4
-4
@@ -160,9 +160,9 @@ class IllusionMagicScheduler:
|
||||
"latent": (0.15, 0.45),
|
||||
},
|
||||
"sdxl": {
|
||||
"strength": (0.35, 1.0),
|
||||
"end_percent": (0.35, 0.9),
|
||||
"cfg": (4.5, 7.0),
|
||||
"strength": (0.85, 1.6),
|
||||
"end_percent": (0.7, 1.0),
|
||||
"cfg": (3.2, 5.0),
|
||||
"blur": (12.0, 3.0),
|
||||
"latent": (0.12, 0.35),
|
||||
},
|
||||
@@ -267,4 +267,4 @@ NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
"IllusionTextMask": "NanoBanana Text Mask",
|
||||
"IllusionMagicScheduler": "NanoBanana Magic Scheduler",
|
||||
"IllusionLatentMask": "NanoBanana Latent Mask",
|
||||
}
|
||||
}
|
||||
|
||||
+78
-22
@@ -1,30 +1,86 @@
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
setlocal EnableExtensions EnableDelayedExpansion
|
||||
|
||||
set SCRIPT_DIR=%~dp0
|
||||
set PYTHON_BIN=%PYTHON_BIN%
|
||||
if "%PYTHON_BIN%"=="" set PYTHON_BIN=python
|
||||
set "SCRIPT_DIR=%~dp0"
|
||||
set "PYTHON_EXE="
|
||||
set "PYTHON_ARGS="
|
||||
set "COMFYUI_ROOT="
|
||||
set "EXTRA_ARGS="
|
||||
|
||||
set COMFYUI_ROOT=
|
||||
set EXTRA_ARGS=
|
||||
call :find_python
|
||||
if errorlevel 1 exit /b 1
|
||||
|
||||
if not "%~1"=="" (
|
||||
set FIRST_ARG=%~1
|
||||
if "%FIRST_ARG:~0,2%"=="--" (
|
||||
set EXTRA_ARGS=%*
|
||||
) else (
|
||||
set COMFYUI_ROOT=%~1
|
||||
shift
|
||||
set EXTRA_ARGS=%*
|
||||
call :parse_args %*
|
||||
if errorlevel 1 exit /b 1
|
||||
|
||||
echo Installing NanoBanana - Illusion Architect dependencies
|
||||
"%PYTHON_EXE%" %PYTHON_ARGS% -m pip install -r "%SCRIPT_DIR%requirements.txt"
|
||||
if errorlevel 1 exit /b 1
|
||||
|
||||
if defined COMFYUI_ROOT (
|
||||
"%PYTHON_EXE%" %PYTHON_ARGS% "%SCRIPT_DIR%scripts\check_and_fill.py" --comfyui-root "%COMFYUI_ROOT%" %EXTRA_ARGS%
|
||||
) else (
|
||||
"%PYTHON_EXE%" %PYTHON_ARGS% "%SCRIPT_DIR%scripts\check_and_fill.py" %EXTRA_ARGS%
|
||||
)
|
||||
exit /b %ERRORLEVEL%
|
||||
|
||||
:parse_args
|
||||
if "%~1"=="" exit /b 0
|
||||
set "FIRST_ARG=%~1"
|
||||
if "!FIRST_ARG:~0,2!"=="--" (
|
||||
goto :collect_extra_args
|
||||
)
|
||||
set "COMFYUI_ROOT=%~1"
|
||||
shift
|
||||
|
||||
:collect_extra_args
|
||||
if "%~1"=="" exit /b 0
|
||||
if defined EXTRA_ARGS (
|
||||
set "EXTRA_ARGS=!EXTRA_ARGS! %1"
|
||||
) else (
|
||||
set "EXTRA_ARGS=%1"
|
||||
)
|
||||
shift
|
||||
goto :collect_extra_args
|
||||
|
||||
exit /b 0
|
||||
|
||||
:find_python
|
||||
if defined PYTHON_BIN (
|
||||
set "PYTHON_EXE=%PYTHON_BIN%"
|
||||
"%PYTHON_EXE%" --version >nul 2>nul
|
||||
if not errorlevel 1 exit /b 0
|
||||
echo Python not found: %PYTHON_BIN%
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
for %%I in ("%SCRIPT_DIR%..\..\.venv\Scripts\python.exe") do (
|
||||
if exist "%%~fI" (
|
||||
set "PYTHON_EXE=%%~fI"
|
||||
exit /b 0
|
||||
)
|
||||
)
|
||||
|
||||
echo Installing NanoBanana - Illusion Architect dependencies
|
||||
%PYTHON_BIN% -m pip install -r "%SCRIPT_DIR%requirements.txt"
|
||||
if errorlevel 1 exit /b 1
|
||||
for %%I in ("%SCRIPT_DIR%..\..\python_embeded\python.exe") do (
|
||||
if exist "%%~fI" (
|
||||
set "PYTHON_EXE=%%~fI"
|
||||
exit /b 0
|
||||
)
|
||||
)
|
||||
|
||||
if not "%COMFYUI_ROOT%"=="" (
|
||||
%PYTHON_BIN% "%SCRIPT_DIR%scripts\check_and_fill.py" --comfyui-root "%COMFYUI_ROOT%" %EXTRA_ARGS%
|
||||
) else (
|
||||
%PYTHON_BIN% "%SCRIPT_DIR%scripts\check_and_fill.py" %EXTRA_ARGS%
|
||||
)
|
||||
py -3 --version >nul 2>nul
|
||||
if not errorlevel 1 (
|
||||
set "PYTHON_EXE=py"
|
||||
set "PYTHON_ARGS=-3"
|
||||
exit /b 0
|
||||
)
|
||||
|
||||
python --version >nul 2>nul
|
||||
if not errorlevel 1 (
|
||||
set "PYTHON_EXE=python"
|
||||
exit /b 0
|
||||
)
|
||||
|
||||
echo Python was not found.
|
||||
echo Install Python or use the ComfyUI .venv / python_embeded distribution.
|
||||
exit /b 1
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"name": "FLUX Ghost Pattern Hidden Image",
|
||||
"format": "nanobanana-illusion-preset-v1",
|
||||
"target": "flux",
|
||||
"required_models": [
|
||||
"flux1_dev_controlnet_canny.safetensors",
|
||||
"your_flux_dev_base"
|
||||
],
|
||||
"required_nodes": [
|
||||
"NanoBanana Pattern Preprocessor",
|
||||
"NanoBanana Magic Scheduler",
|
||||
"NanoBanana Latent Mask"
|
||||
],
|
||||
"graph": [
|
||||
{
|
||||
"step": 1,
|
||||
"node": "LoadImage or NanoBanana Text Mask",
|
||||
"purpose": "Load the hidden pattern as a high contrast source."
|
||||
},
|
||||
{
|
||||
"step": 2,
|
||||
"node": "NanoBanana Pattern Preprocessor",
|
||||
"settings": {
|
||||
"blur_radius": 10.0,
|
||||
"contrast": 1.3,
|
||||
"threshold": 0.42,
|
||||
"invert": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 3,
|
||||
"node": "NanoBanana Latent Mask",
|
||||
"settings": {
|
||||
"blur_radius": 18.0,
|
||||
"contrast": 2.0,
|
||||
"midpoint": 0.48,
|
||||
"mask_strength": 0.58
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 4,
|
||||
"node": "NanoBanana Magic Scheduler",
|
||||
"settings": {
|
||||
"model_family": "flux",
|
||||
"magic_slider": 0.46
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 5,
|
||||
"node": "Apply ControlNet Advanced + Set Latent Noise Mask",
|
||||
"purpose": "Run the Canny ControlNet at low strength and combine it with the latent mask for early-step ghosting."
|
||||
},
|
||||
{
|
||||
"step": 6,
|
||||
"node": "Flux sampler path",
|
||||
"settings": {
|
||||
"steps": 24,
|
||||
"guidance": "low",
|
||||
"controlnet_strength": "0.2 - 0.45"
|
||||
}
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"FLUX hidden images rely on subtle control rather than brute forcing.",
|
||||
"If the illusion vanishes completely, reduce blur slightly before increasing ControlNet strength."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"name": "SD 1.5 QR Hidden Image",
|
||||
"format": "nanobanana-illusion-preset-v1",
|
||||
"target": "sd15",
|
||||
"required_models": [
|
||||
"control_v1p_sd15_qrcode_monster_v2.safetensors",
|
||||
"your_sd15_checkpoint.safetensors"
|
||||
],
|
||||
"required_nodes": [
|
||||
"NanoBanana Pattern Preprocessor",
|
||||
"NanoBanana Magic Scheduler"
|
||||
],
|
||||
"graph": [
|
||||
{
|
||||
"step": 1,
|
||||
"node": "LoadImage or NanoBanana Text Mask",
|
||||
"purpose": "Load a logo, QR payload image, or render black and white text."
|
||||
},
|
||||
{
|
||||
"step": 2,
|
||||
"node": "NanoBanana Pattern Preprocessor",
|
||||
"settings": {
|
||||
"blur_radius": 4.0,
|
||||
"contrast": 1.75,
|
||||
"threshold": 0.48,
|
||||
"invert": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 3,
|
||||
"node": "NanoBanana Magic Scheduler",
|
||||
"settings": {
|
||||
"model_family": "sd15",
|
||||
"magic_slider": 0.82
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 4,
|
||||
"node": "Apply ControlNet Advanced",
|
||||
"purpose": "Feed the processed image into QR Code Monster with the scheduler outputs driving strength and end percent."
|
||||
},
|
||||
{
|
||||
"step": 5,
|
||||
"node": "KSampler",
|
||||
"settings": {
|
||||
"steps": 28,
|
||||
"sampler": "dpmpp_2m_sde",
|
||||
"scheduler": "karras",
|
||||
"denoise": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"This is the most aggressive family and remains the easiest path for readable QR or text reveals.",
|
||||
"Raise the magic slider when the encoded pattern must remain scannable."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"name": "SDXL QR Hidden Image",
|
||||
"format": "nanobanana-illusion-preset-v1",
|
||||
"target": "sdxl",
|
||||
"required_models": [
|
||||
"control_v04u_sdxl_opticalpattern.safetensors",
|
||||
"your_sdxl_checkpoint.safetensors"
|
||||
],
|
||||
"required_nodes": [
|
||||
"NanoBanana Pattern Preprocessor",
|
||||
"NanoBanana Magic Scheduler"
|
||||
],
|
||||
"graph": [
|
||||
{
|
||||
"step": 1,
|
||||
"node": "LoadImage or NanoBanana Text Mask",
|
||||
"purpose": "Prepare the hidden pattern image at SDXL working resolution."
|
||||
},
|
||||
{
|
||||
"step": 2,
|
||||
"node": "NanoBanana Pattern Preprocessor",
|
||||
"settings": {
|
||||
"blur_radius": 6.0,
|
||||
"contrast": 1.55,
|
||||
"threshold": 0.5,
|
||||
"invert": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 3,
|
||||
"node": "NanoBanana Magic Scheduler",
|
||||
"settings": {
|
||||
"model_family": "sdxl",
|
||||
"magic_slider": 0.7
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 4,
|
||||
"node": "Apply ControlNet Advanced",
|
||||
"purpose": "Use the SDXL optical pattern controlnet for global composition instead of hard QR forcing."
|
||||
},
|
||||
{
|
||||
"step": 5,
|
||||
"node": "KSampler",
|
||||
"settings": {
|
||||
"steps": 32,
|
||||
"sampler": "dpmpp_2m",
|
||||
"scheduler": "karras",
|
||||
"denoise": 1.0
|
||||
}
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"SDXL responds better to softer pattern control than SD 1.5.",
|
||||
"Keep end percent below 0.9 when the result feels too literal."
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "Unified Illusion Router",
|
||||
"format": "nanobanana-illusion-preset-v1",
|
||||
"target": "multi-model",
|
||||
"families": {
|
||||
"sd15": "workflows/sd15_qr_hidden_image.json",
|
||||
"sdxl": "workflows/sdxl_qr_hidden_image.json",
|
||||
"flux": "workflows/flux_ghost_hidden_image.json"
|
||||
},
|
||||
"magic_slider_guidance": {
|
||||
"0.0": "Nearly invisible pattern; optimized for optical illusion style.",
|
||||
"0.5": "Balanced hidden structure and overall artistry.",
|
||||
"1.0": "Pattern preservation prioritized for readable QR or explicit hidden text."
|
||||
}
|
||||
}
|
||||
@@ -1,67 +1,84 @@
|
||||
{
|
||||
"name": "FLUX Ghost Pattern Hidden Image",
|
||||
"format": "nanobanana-illusion-preset-v1",
|
||||
"target": "flux",
|
||||
"required_models": [
|
||||
"flux1_dev_controlnet_canny.safetensors",
|
||||
"your_flux_dev_base"
|
||||
],
|
||||
"required_nodes": [
|
||||
"NanoBanana Pattern Preprocessor",
|
||||
"NanoBanana Magic Scheduler",
|
||||
"NanoBanana Latent Mask"
|
||||
],
|
||||
"graph": [
|
||||
{
|
||||
"step": 1,
|
||||
"node": "LoadImage or NanoBanana Text Mask",
|
||||
"purpose": "Load the hidden pattern as a high contrast source."
|
||||
"1": {
|
||||
"class_type": "IllusionTextMask",
|
||||
"inputs": {
|
||||
"text": "GHOST",
|
||||
"width": 1024,
|
||||
"height": 1024,
|
||||
"font_size": 220,
|
||||
"margin": 72,
|
||||
"invert": false
|
||||
},
|
||||
{
|
||||
"step": 2,
|
||||
"node": "NanoBanana Pattern Preprocessor",
|
||||
"settings": {
|
||||
"blur_radius": 10.0,
|
||||
"contrast": 1.3,
|
||||
"threshold": 0.42,
|
||||
"invert": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 3,
|
||||
"node": "NanoBanana Latent Mask",
|
||||
"settings": {
|
||||
"blur_radius": 18.0,
|
||||
"contrast": 2.0,
|
||||
"midpoint": 0.48,
|
||||
"mask_strength": 0.58
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 4,
|
||||
"node": "NanoBanana Magic Scheduler",
|
||||
"settings": {
|
||||
"model_family": "flux",
|
||||
"magic_slider": 0.46
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 5,
|
||||
"node": "Apply ControlNet Advanced + Set Latent Noise Mask",
|
||||
"purpose": "Run the Canny ControlNet at low strength and combine it with the latent mask for early-step ghosting."
|
||||
},
|
||||
{
|
||||
"step": 6,
|
||||
"node": "Flux sampler path",
|
||||
"settings": {
|
||||
"steps": 24,
|
||||
"guidance": "low",
|
||||
"controlnet_strength": "0.2 - 0.45"
|
||||
}
|
||||
"_meta": {
|
||||
"title": "Optional Pattern Source - NanoBanana Text Mask"
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"FLUX hidden images rely on subtle control rather than brute forcing.",
|
||||
"If the illusion vanishes completely, reduce blur slightly before increasing ControlNet strength."
|
||||
]
|
||||
}
|
||||
},
|
||||
"2": {
|
||||
"class_type": "IllusionPatternPreprocessor",
|
||||
"inputs": {
|
||||
"image": [
|
||||
"1",
|
||||
0
|
||||
],
|
||||
"blur_radius": 10.0,
|
||||
"contrast": 1.3,
|
||||
"brightness": 1.0,
|
||||
"threshold": 0.42,
|
||||
"invert": false
|
||||
},
|
||||
"_meta": {
|
||||
"title": "NanoBanana Pattern Preprocessor"
|
||||
}
|
||||
},
|
||||
"3": {
|
||||
"class_type": "IllusionLatentMask",
|
||||
"inputs": {
|
||||
"image": [
|
||||
"2",
|
||||
0
|
||||
],
|
||||
"blur_radius": 18.0,
|
||||
"contrast": 2.0,
|
||||
"midpoint": 0.48,
|
||||
"mask_strength": 0.58,
|
||||
"invert": false
|
||||
},
|
||||
"_meta": {
|
||||
"title": "NanoBanana Latent Mask"
|
||||
}
|
||||
},
|
||||
"4": {
|
||||
"class_type": "IllusionMagicScheduler",
|
||||
"inputs": {
|
||||
"model_family": "flux",
|
||||
"magic_slider": 0.46
|
||||
},
|
||||
"_meta": {
|
||||
"title": "NanoBanana Magic Scheduler (FLUX)"
|
||||
}
|
||||
},
|
||||
"5": {
|
||||
"class_type": "PreviewImage",
|
||||
"inputs": {
|
||||
"images": [
|
||||
"2",
|
||||
0
|
||||
]
|
||||
},
|
||||
"_meta": {
|
||||
"title": "Preview Processed Pattern"
|
||||
}
|
||||
},
|
||||
"6": {
|
||||
"class_type": "PreviewImage",
|
||||
"inputs": {
|
||||
"images": [
|
||||
"3",
|
||||
1
|
||||
]
|
||||
},
|
||||
"_meta": {
|
||||
"title": "Preview Latent Mask"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,57 +1,195 @@
|
||||
{
|
||||
"name": "SD 1.5 QR Hidden Image",
|
||||
"format": "nanobanana-illusion-preset-v1",
|
||||
"target": "sd15",
|
||||
"required_models": [
|
||||
"control_v1p_sd15_qrcode_monster_v2.safetensors",
|
||||
"your_sd15_checkpoint.safetensors"
|
||||
],
|
||||
"required_nodes": [
|
||||
"NanoBanana Pattern Preprocessor",
|
||||
"NanoBanana Magic Scheduler"
|
||||
],
|
||||
"graph": [
|
||||
{
|
||||
"step": 1,
|
||||
"node": "LoadImage or NanoBanana Text Mask",
|
||||
"purpose": "Load a logo, QR payload image, or render black and white text."
|
||||
"1": {
|
||||
"class_type": "IllusionTextMask",
|
||||
"inputs": {
|
||||
"text": "SCAN ME",
|
||||
"width": 768,
|
||||
"height": 768,
|
||||
"font_size": 160,
|
||||
"margin": 48,
|
||||
"invert": false
|
||||
},
|
||||
{
|
||||
"step": 2,
|
||||
"node": "NanoBanana Pattern Preprocessor",
|
||||
"settings": {
|
||||
"blur_radius": 4.0,
|
||||
"contrast": 1.75,
|
||||
"threshold": 0.48,
|
||||
"invert": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 3,
|
||||
"node": "NanoBanana Magic Scheduler",
|
||||
"settings": {
|
||||
"model_family": "sd15",
|
||||
"magic_slider": 0.82
|
||||
}
|
||||
},
|
||||
{
|
||||
"step": 4,
|
||||
"node": "Apply ControlNet Advanced",
|
||||
"purpose": "Feed the processed image into QR Code Monster with the scheduler outputs driving strength and end percent."
|
||||
},
|
||||
{
|
||||
"step": 5,
|
||||
"node": "KSampler",
|
||||
"settings": {
|
||||
"steps": 28,
|
||||
"sampler": "dpmpp_2m_sde",
|
||||
"scheduler": "karras",
|
||||
"denoise": 1.0
|
||||
}
|
||||
"_meta": {
|
||||
"title": "Optional Pattern Source - NanoBanana Text Mask"
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"This is the most aggressive family and remains the easiest path for readable QR or text reveals.",
|
||||
"Raise the magic slider when the encoded pattern must remain scannable."
|
||||
]
|
||||
}
|
||||
},
|
||||
"2": {
|
||||
"class_type": "IllusionPatternPreprocessor",
|
||||
"inputs": {
|
||||
"image": [
|
||||
"1",
|
||||
0
|
||||
],
|
||||
"blur_radius": 4.0,
|
||||
"contrast": 1.75,
|
||||
"brightness": 1.0,
|
||||
"threshold": 0.48,
|
||||
"invert": false
|
||||
},
|
||||
"_meta": {
|
||||
"title": "NanoBanana Pattern Preprocessor"
|
||||
}
|
||||
},
|
||||
"3": {
|
||||
"class_type": "IllusionMagicScheduler",
|
||||
"inputs": {
|
||||
"model_family": "sd15",
|
||||
"magic_slider": 0.82
|
||||
},
|
||||
"_meta": {
|
||||
"title": "NanoBanana Magic Scheduler (SD 1.5)"
|
||||
}
|
||||
},
|
||||
"4": {
|
||||
"class_type": "PreviewImage",
|
||||
"inputs": {
|
||||
"images": [
|
||||
"2",
|
||||
0
|
||||
]
|
||||
},
|
||||
"_meta": {
|
||||
"title": "Preview Processed Pattern"
|
||||
}
|
||||
},
|
||||
"5": {
|
||||
"class_type": "CheckpointLoaderSimple",
|
||||
"inputs": {
|
||||
"ckpt_name": "your_sd15_checkpoint.safetensors"
|
||||
},
|
||||
"_meta": {
|
||||
"title": "Pick Your SD 1.5 Checkpoint Here"
|
||||
}
|
||||
},
|
||||
"6": {
|
||||
"class_type": "CLIPTextEncode",
|
||||
"inputs": {
|
||||
"text": "best quality, high contrast hidden image, optical illusion, qr code reveal",
|
||||
"clip": [
|
||||
"5",
|
||||
1
|
||||
]
|
||||
},
|
||||
"_meta": {
|
||||
"title": "Positive Prompt"
|
||||
}
|
||||
},
|
||||
"7": {
|
||||
"class_type": "CLIPTextEncode",
|
||||
"inputs": {
|
||||
"text": "blurry, unreadable, low contrast, distorted code",
|
||||
"clip": [
|
||||
"5",
|
||||
1
|
||||
]
|
||||
},
|
||||
"_meta": {
|
||||
"title": "Negative Prompt"
|
||||
}
|
||||
},
|
||||
"8": {
|
||||
"class_type": "ControlNetLoader",
|
||||
"inputs": {
|
||||
"control_net_name": "control_v1p_sd15_qrcode_monster_v2.safetensors"
|
||||
},
|
||||
"_meta": {
|
||||
"title": "Pick SD 1.5 QR ControlNet Here"
|
||||
}
|
||||
},
|
||||
"9": {
|
||||
"class_type": "ControlNetApplyAdvanced",
|
||||
"inputs": {
|
||||
"positive": [
|
||||
"6",
|
||||
0
|
||||
],
|
||||
"negative": [
|
||||
"7",
|
||||
0
|
||||
],
|
||||
"control_net": [
|
||||
"8",
|
||||
0
|
||||
],
|
||||
"image": [
|
||||
"2",
|
||||
0
|
||||
],
|
||||
"strength": [
|
||||
"3",
|
||||
0
|
||||
],
|
||||
"start_percent": [
|
||||
"3",
|
||||
1
|
||||
],
|
||||
"end_percent": [
|
||||
"3",
|
||||
2
|
||||
]
|
||||
},
|
||||
"_meta": {
|
||||
"title": "Apply ControlNet"
|
||||
}
|
||||
},
|
||||
"10": {
|
||||
"class_type": "EmptyLatentImage",
|
||||
"inputs": {
|
||||
"width": 768,
|
||||
"height": 768,
|
||||
"batch_size": 1
|
||||
},
|
||||
"_meta": {
|
||||
"title": "Empty Latent"
|
||||
}
|
||||
},
|
||||
"11": {
|
||||
"class_type": "KSampler",
|
||||
"inputs": {
|
||||
"model": [
|
||||
"5",
|
||||
0
|
||||
],
|
||||
"seed": 42,
|
||||
"steps": 28,
|
||||
"cfg": [
|
||||
"3",
|
||||
3
|
||||
],
|
||||
"sampler_name": "dpmpp_2m_sde",
|
||||
"scheduler": "karras",
|
||||
"positive": [
|
||||
"9",
|
||||
0
|
||||
],
|
||||
"negative": [
|
||||
"9",
|
||||
1
|
||||
],
|
||||
"latent_image": [
|
||||
"10",
|
||||
0
|
||||
],
|
||||
"denoise": 1.0
|
||||
},
|
||||
"_meta": {
|
||||
"title": "KSampler"
|
||||
}
|
||||
},
|
||||
"12": {
|
||||
"class_type": "VAEDecode",
|
||||
"inputs": {
|
||||
"samples": [
|
||||
"11",
|
||||
0
|
||||
],
|
||||
"vae": [
|
||||
"5",
|
||||
2
|
||||
]
|
||||
},
|
||||
"_meta": {
|
||||
"title": "VAE Decode"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1022
-45
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,15 +1,58 @@
|
||||
{
|
||||
"name": "Unified Illusion Router",
|
||||
"format": "nanobanana-illusion-preset-v1",
|
||||
"target": "multi-model",
|
||||
"families": {
|
||||
"sd15": "workflows/sd15_qr_hidden_image.json",
|
||||
"sdxl": "workflows/sdxl_qr_hidden_image.json",
|
||||
"flux": "workflows/flux_ghost_hidden_image.json"
|
||||
"1": {
|
||||
"class_type": "IllusionTextMask",
|
||||
"inputs": {
|
||||
"text": "NANOBANANA",
|
||||
"width": 1024,
|
||||
"height": 1024,
|
||||
"font_size": 180,
|
||||
"margin": 64,
|
||||
"invert": false
|
||||
},
|
||||
"_meta": {
|
||||
"title": "Sample Pattern"
|
||||
}
|
||||
},
|
||||
"magic_slider_guidance": {
|
||||
"0.0": "Nearly invisible pattern; optimized for optical illusion style.",
|
||||
"0.5": "Balanced hidden structure and overall artistry.",
|
||||
"1.0": "Pattern preservation prioritized for readable QR or explicit hidden text."
|
||||
"2": {
|
||||
"class_type": "PreviewImage",
|
||||
"inputs": {
|
||||
"images": [
|
||||
"1",
|
||||
0
|
||||
]
|
||||
},
|
||||
"_meta": {
|
||||
"title": "Pattern Preview"
|
||||
}
|
||||
},
|
||||
"3": {
|
||||
"class_type": "IllusionMagicScheduler",
|
||||
"inputs": {
|
||||
"model_family": "sd15",
|
||||
"magic_slider": 0.82
|
||||
},
|
||||
"_meta": {
|
||||
"title": "SD 1.5 Guidance"
|
||||
}
|
||||
},
|
||||
"4": {
|
||||
"class_type": "IllusionMagicScheduler",
|
||||
"inputs": {
|
||||
"model_family": "sdxl",
|
||||
"magic_slider": 0.7
|
||||
},
|
||||
"_meta": {
|
||||
"title": "SDXL Guidance"
|
||||
}
|
||||
},
|
||||
"5": {
|
||||
"class_type": "IllusionMagicScheduler",
|
||||
"inputs": {
|
||||
"model_family": "flux",
|
||||
"magic_slider": 0.46
|
||||
},
|
||||
"_meta": {
|
||||
"title": "FLUX Guidance"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user