feat(nodes): enhance radial attention resolution selector for video

- Overhauled the resolution calculation to be compatible with video radial attention by incorporating video length and patch divisor.
- Added UI controls for , , and  to the ResolutionSelector node.
- The node now outputs  for easier integration with video pipelines.
- Updated presets and added an example workflow for the new functionality.
This commit is contained in:
if@impactframes.com
2025-09-08 15:59:01 +01:00
parent 68550bca7a
commit bc1fb3277e
4 changed files with 1256 additions and 156 deletions
+68 -138
View File
@@ -24,44 +24,55 @@ PREFERED_KONTEXT_RESOLUTIONS = [
(1568, 672),
]
def calculate_radial_compatible_resolution(width, height, mode="closest", block_size=64):
def calculate_radial_compatible_resolution(width, height, mode="closest", block_size=128, length=None, patch_divisor=16):
"""
Calculate radial attention compatible resolution.
Calculate radial attention compatible resolution for images or videos.
For radial attention to work, patches_per_frame must be divisible by block_size:
patches_per_frame = (height//8) * (width//8) // 4
For images (length=None):
(width/patch_divisor * height/patch_divisor) must be divisible by block_size.
For videos:
(width/patch_divisor * height/patch_divisor * (length+3)/4) must be divisible by block_size.
Args:
width (int): Original width
height (int): Original height
mode (str): "upscale", "downscale", or "closest"
block_size (int): Radial attention block size (64 or 128)
length (int, optional): Length of video in frames. If None, calculates for an image.
patch_divisor (int): The spatial patch size divisor (e.g., 16 or 32).
Returns:
tuple: (compatible_width, compatible_height)
"""
def find_compatible_dimension(target_size, mode, block_size):
# Start with VAE-aligned size
base_size = (target_size // VAE_STRIDE[1]) * VAE_STRIDE[1]
if length is not None:
if (length + 3) % 4 != 0:
print(f"Warning: Radial attention may not work with length {length}. It should be 4k-3 (e.g., 1, 5, ..., 81).")
length_factor = 1
else:
length_factor = (length + 3) // 4
# Search for a size where patches_per_frame % block_size == 0
search_range = range(max(VAE_STRIDE[1], base_size - 64), base_size + 80, VAE_STRIDE[1])
common_divisor = math.gcd(length_factor, block_size)
target_divisor = block_size // common_divisor
else:
target_divisor = block_size
def find_compatible_dimension(target_size, other_dim_patched, mode):
base_size = (target_size // patch_divisor) * patch_divisor
search_range = range(max(patch_divisor, base_size - 128), base_size + 128 + patch_divisor, patch_divisor)
candidates = []
for test_size in search_range:
lat_dim = test_size // VAE_STRIDE[1]
patches_per_frame = (lat_dim * lat_dim) // (PATCH_SIZE[1] * PATCH_SIZE[2])
if patches_per_frame % block_size == 0:
patched_dim = test_size // patch_divisor
if (patched_dim * other_dim_patched) % target_divisor == 0:
distance = abs(test_size - target_size)
candidates.append((distance, test_size))
if not candidates:
# Fallback: just ensure VAE alignment
return base_size if base_size >= VAE_STRIDE[1] else VAE_STRIDE[1]
return base_size if base_size >= patch_divisor else patch_divisor
candidates.sort() # Sort by distance
candidates.sort()
if mode == "upscale":
valid_candidates = [size for dist, size in candidates if size >= target_size]
@@ -71,93 +82,52 @@ def calculate_radial_compatible_resolution(width, height, mode="closest", block_
return valid_candidates[0] if valid_candidates else candidates[0][1]
else: # closest
return candidates[0][1]
# Handle square resolutions specially (both dimensions must work together)
if width == height:
# For square resolutions, find size where lat_dim^2 // 4 % block_size == 0
target_lat = width // VAE_STRIDE[1]
# Always prefer higher values - search upward first
target_patched = width // patch_divisor
candidates = []
# Search upward for compatible sizes
for offset in range(0, 16): # Search upward from target
test_lat = target_lat + offset
if test_lat <= 0:
continue
patches_per_frame = (test_lat * test_lat) // (PATCH_SIZE[1] * PATCH_SIZE[2])
if patches_per_frame % block_size == 0:
test_size = test_lat * VAE_STRIDE[1]
for offset in range(0, 32):
test_patched = target_patched + offset
if test_patched > 0 and (test_patched * test_patched) % target_divisor == 0:
test_size = test_patched * patch_divisor
distance = abs(test_size - width)
candidates.append((distance, test_size, test_size >= width))
# If no upward candidates, search downward
if not candidates:
for offset in range(-1, -16, -1): # Search downward from target
test_lat = target_lat + offset
if test_lat <= 0:
continue
patches_per_frame = (test_lat * test_lat) // (PATCH_SIZE[1] * PATCH_SIZE[2])
if patches_per_frame % block_size == 0:
test_size = test_lat * VAE_STRIDE[1]
for offset in range(-1, -32, -1):
test_patched = target_patched + offset
if test_patched > 0 and (test_patched * test_patched) % target_divisor == 0:
test_size = test_patched * patch_divisor
distance = abs(test_size - width)
candidates.append((distance, test_size, test_size >= width))
if candidates:
# Always prefer higher values (>= original size)
higher_candidates = [c for c in candidates if c[2]] # c[2] is "is_higher_or_equal"
higher_candidates = [c for c in candidates if c[2]]
if higher_candidates:
# Sort by distance and return the closest higher value
higher_candidates.sort(key=lambda x: x[0])
return higher_candidates[0][1], higher_candidates[0][1]
res = higher_candidates[0][1]
return res, res
else:
# Fallback to closest if no higher candidates
candidates.sort(key=lambda x: x[0])
return candidates[0][1], candidates[0][1]
# If no perfect match found, use the original if it's already compatible
orig_lat = width // VAE_STRIDE[1]
orig_patches = (orig_lat * orig_lat) // 4
if orig_patches % block_size == 0:
return width, height
res = candidates[0][1]
return res, res
# For non-square or fallback, handle dimensions independently
compatible_width = find_compatible_dimension(width, mode, block_size)
compatible_height = find_compatible_dimension(height, mode, block_size)
# For non-square, we can't easily solve for both. Let's adjust one dimension first.
# We'll adjust width first, then find a compatible height.
base_width = (width // patch_divisor) * patch_divisor
base_height = (height // patch_divisor) * patch_divisor
return compatible_width, compatible_height
w_p = base_width // patch_divisor
h_p = base_height // patch_divisor
if (w_p * h_p) % target_divisor == 0:
return base_width, base_height
def update_resolutions_for_radial_attention(resolutions_dict, mode="closest", block_size=64):
"""
Update resolution dictionary to make all resolutions radial attention compatible.
# If not compatible, find a new height for the current width
compatible_height = find_compatible_dimension(height, w_p, mode)
Args:
resolutions_dict (dict): Original resolutions dictionary
mode (str): "upscale", "downscale", or "closest"
block_size (int): Radial attention block size (64 or 128)
Returns:
dict: Updated resolutions dictionary
"""
updated_resolutions = {}
for model_type, orientations in resolutions_dict.items():
updated_resolutions[model_type] = {}
for orientation, qualities in orientations.items():
updated_resolutions[model_type][orientation] = {}
for quality, (width, height) in qualities.items():
new_width, new_height = calculate_radial_compatible_resolution(width, height, mode, block_size)
updated_resolutions[model_type][orientation][quality] = (new_width, new_height)
# Log changes if resolution was modified
if new_width != width or new_height != height:
print(f"Radial Attention (block_size={block_size}): {model_type}-{orientation}-{quality}: {width}x{height} -> {new_width}x{new_height}")
return updated_resolutions
return base_width, compatible_height
class ResolutionSelector:
"""Select width & height for video/image generation.
@@ -266,20 +236,22 @@ class ResolutionSelector:
"mode": (modes, {"default": modes[0], "tooltip": "Generation mode"}),
"aspect_ratio": (sorted(list(all_aspect_ratios)), {"default": "Horizontal"}),
"quality": (["HQ", "MQ", "LQ"], {"default": "HQ"}),
"radial_attention_mode": (["disabled", "image", "video"], {"default": "disabled", "tooltip": "Enable and configure radial attention compatibility"}),
},
"optional": {
"context": ("*", {}),
"enable_radial_attention": ("BOOLEAN", {"default": False, "tooltip": "Enable radial attention compatibility"}),
"length": ("INT", {"default": 81, "min": 1, "max": 8192, "step": 4, "tooltip": "Video length in frames (for video radial attention)"}),
"patch_divisor": ("INT", {"default": 16, "min": 8, "max": 64, "step": 8, "tooltip": "Spatial patch divisor for radial attention (e.g., 16 or 32)"}),
"block_size": ([128, 64], {"default": 128, "tooltip": "Radial attention block size"}),
}
}
RETURN_TYPES = ("INT", "INT", "STRING", "*")
RETURN_NAMES = ("width", "height", "size_string", "context")
RETURN_TYPES = ("INT", "INT", "INT", "STRING", "*")
RETURN_NAMES = ("width", "height", "length", "size_string", "context")
FUNCTION = "get_resolution"
CATEGORY = "🔗llm_toolkit/utils"
def get_resolution(self, mode, aspect_ratio, quality, context=None, enable_radial_attention=False, block_size=128):
def get_resolution(self, mode, aspect_ratio, quality, radial_attention_mode, context=None, length=81, patch_divisor=16, block_size=128):
# Initialize or copy the context
if context is None:
output_context = {}
@@ -298,9 +270,11 @@ class ResolutionSelector:
w, h = self.RESOLUTIONS[mode][aspect_ratio][quality]
# Apply radial attention compatibility if enabled (always prefer higher values)
if enable_radial_attention:
w, h = calculate_radial_compatible_resolution(w, h, "upscale", block_size)
# Apply radial attention compatibility if enabled
if radial_attention_mode == "video":
w, h = calculate_radial_compatible_resolution(w, h, "upscale", block_size, length, patch_divisor)
elif radial_attention_mode == "image":
w, h = calculate_radial_compatible_resolution(w, h, "upscale", block_size, None, patch_divisor)
# Determine the string output based on the mode
if mode in ["GEMINI_IMAGEN", "NANO_BANANA"]:
@@ -325,10 +299,10 @@ class ResolutionSelector:
output_context["generation_config"] = generation_config
# --- End Update context ---
return (w, h, size_string, output_context)
return (w, h, length, size_string, output_context)
except KeyError:
# fallback default
return (832, 480, "832x480", output_context)
return (832, 480, length, "832x480", output_context)
NODE_CLASS_MAPPINGS = {
@@ -340,48 +314,4 @@ NODE_DISPLAY_NAME_MAPPINGS = {
}
# Export for potential JavaScript access
WEB_DIRECTORY = "./web"
def get_radial_resolutions(mode="closest", block_size=64):
"""Get radial attention compatible resolutions."""
return update_resolutions_for_radial_attention(ResolutionSelector.RESOLUTIONS, mode, block_size)
if __name__ == "__main__":
# Test the calculator
print("Testing radial attention compatible resolutions:")
for block_size in [64, 128]:
print(f"\n=== BLOCK SIZE {block_size} ===")
print(f"Original problematic size: 624x624")
print("Upscale mode:", calculate_radial_compatible_resolution(624, 624, "upscale", block_size))
print("Downscale mode:", calculate_radial_compatible_resolution(624, 624, "downscale", block_size))
print("Closest mode:", calculate_radial_compatible_resolution(624, 624, "closest", block_size))
print(f"\n--- Resolution Sets (block_size={block_size}) ---")
for mode in ["upscale", "downscale", "closest"]:
print(f"\n{mode.upper()} MODE:")
radial_resolutions = get_radial_resolutions(mode, block_size)
# Show squarish resolutions (most affected)
print("Squarish resolutions:")
for model_type in radial_resolutions:
if "Squarish" in radial_resolutions[model_type]:
for quality, (w, h) in radial_resolutions[model_type]["Squarish"].items():
original = ResolutionSelector.RESOLUTIONS[model_type]["Squarish"][quality]
changed = "✓" if (w, h) != original else " "
print(f" {model_type}-{quality}: {w}x{h} {changed}")
# Test a few other problematic ones
print("Other potentially problematic:")
test_cases = [
("T2V14B", "Horizontal", "MQ"), # 1088x832
("IMG", "Cinematic", "LQ"), # 1024x440
]
for model, orient, qual in test_cases:
if orient in radial_resolutions[model] and qual in radial_resolutions[model][orient]:
w, h = radial_resolutions[model][orient][qual]
original = ResolutionSelector.RESOLUTIONS[model][orient][qual]
changed = "✓" if (w, h) != original else " "
print(f" {model}-{orient}-{qual}: {w}x{h} {changed}")
WEB_DIRECTORY = "./web"
Binary file not shown.

After

Width:  |  Height:  |  Size: 332 KiB

File diff suppressed because it is too large Load Diff
+18 -18
View File
@@ -32,27 +32,27 @@
{
"task": "7 Background and Outfit Replacement",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Swap scenes and clothing while preserving the subject's identity using Nano Banana AI. Change the background to [your desired background] and the clothes to [your desired clothing style] ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Swap scenes and clothing while preserving the subject's identity. Change the background to [your desired background] and the clothes to [your desired clothing style] ."
},
{
"task": "8 Outfit Try-On",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Leverage Nano Banana AI with a selfie and clothing reference to produce multiple on-body effect images, minimizing the need for physical models ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. The priority is to maintain the exact facial features and likeness while replacing clothing to produce an accurate image of the subject wearing on-body effects. This involves following the underlying body structure, ensuring garments fall and fold naturally, and ensuring the subject fits seamlessly with the background, with matching lighting, accurate scale, and perspective images."
},
{
"task": "9 Accessory Swap",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Transform accessory types and add complementary objects that fit the theme and scene via Nano Banana AI, while keeping facial features intact. Swap [original accessory] with [new accessory] and add [complementary object] ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Transform accessory types and add complementary objects that fit the theme and scene, while keeping facial features intact. Swap [original accessory] with [new accessory] and add [complementary object] ."
},
{
"task": "10 Single-Hand Holding/Product Placement Consistency",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per. Use Nano Banana AI to add or reposition products with one-arm adjustments, ensuring smooth integration for e-commerce imagery. Have the subject hold [product] with [specific pose/action] ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per. to add or reposition products with one-arm adjustments, ensuring smooth integration for e-commerce imagery. Have the subject hold [product] with [specific pose/action] ."
},
{
"task": "11 Item Accessory Replacement",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Replace specific accessories or items, such as phone cases, without disturbing the rest of the image through Nano Banana AI. Replace the [original item] with [new item] ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Replace specific accessories or items, such as phone cases, without disturbing the rest of the image. Replace the [original item] with [new item] ."
},
{
"task": "12 Multi-Panel Montage Storyboard",
@@ -62,7 +62,7 @@
{
"task": "13 Logo-Integrated Ad Short",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Seamlessly embed brand logos into reference-derived scenes using Nano Banana AI to craft branded narratives. Workflow: Base generation with Ideogram, placement via Nano Banana AI, animation with Runway Gen-4 Turbo ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Seamlessly embed brand logos into reference-derived scenes to craft branded narratives. Workflow: Base generation with Ideogram, placement, animation with Runway Gen-4 Turbo ."
},
{
"task": "14 Single Product Breakdown",
@@ -72,7 +72,7 @@
{
"task": "15 High-Angle View",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Produce a high-angle overhead rendition of the original scene using Nano Banana AI for dynamic photography perspectives. Create a high-angle view of this shot ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Produce a high-angle overhead rendition of the original scene for dynamic photography perspectives. Create a high-angle view of this shot ."
},
{
"task": "16 First-Person POV + Background Blur",
@@ -82,7 +82,7 @@
{
"task": "17 Macro Photography",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Craft ultra-detailed, realistic images with rich textures via Nano Banana AI, such as hyper-realistic close-ups. Create a hyper-realistic macro photograph of [subject], focusing on [specific details]. The background should be [background description] ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Craft ultra-detailed, realistic images with rich textures, such as hyper-realistic close-ups. Create a hyper-realistic macro photograph of [subject], focusing on [specific details]. The background should be [background description] ."
},
{
"task": "18 Storyboard/B-Roll Sequence",
@@ -92,7 +92,7 @@
{
"task": "19 Pose Adjustment (Redirection)",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Effortlessly alter subject poses or gaze directions in images using Nano Banana AI. Change the subject's pose to [desired pose or gaze direction] ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Effortlessly alter subject poses or gaze directions in images. Change the subject's pose to [desired pose or gaze direction] ."
},
{
"task": "20 DSLR-Style Photo Upgrade: Low-Res to Simulated SLR Quality",
@@ -107,17 +107,17 @@
{
"task": "22 YouTube Thumbnail Creation",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Design eye-catching thumbnails by combining characters, text, and elements via Nano Banana AI prompts. Create a YouTube thumbnail with [your theme description]. The text should say '[YOUR TITLE]', [font style description]."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Design eye-catching thumbnails by combining characters, text, and elements prompts. Create a YouTube thumbnail with [your theme description]. The text should say '[YOUR TITLE]', [font style description]."
},
{
"task": "23 Continuous Comic Sequel",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Extend comic panels or chapters in the original art style with straightforward Nano Banana AI prompts. Continue the comic from the provided panel, showing [description of the next scene or action] ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Extend comic panels or chapters in the original art style with straightforward prompts. Continue the comic from the provided panel, showing [description of the next scene or action] ."
},
{
"task": "24 Stop-Motion Puppet Style",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Produce handmade stop-motion aesthetics with textured details and lighting through Nano Banana AI. Ultra detailed stop-motion animation frame, scene of [subject and action] interacting on a miniature set, felt and fabric textures, visible stitching, slightly imperfect shapes, handcrafted props, subtle dust and wear for realism, expressions made with sewn buttons and embroidered mouths in the style [specific details about materials, lighting, and style] ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Produce handmade stop-motion aesthetics with textured details and lighting . Ultra detailed stop-motion animation frame, scene of [subject and action] interacting on a miniature set, felt and fabric textures, visible stitching, slightly imperfect shapes, handcrafted props, subtle dust and wear for realism, expressions made with sewn buttons and embroidered mouths in the style [specific details about materials, lighting, and style] ."
},
{
"task": "25 Tokusatsu Style Scene",
@@ -127,7 +127,7 @@
{
"task": "26 Stick Figure to Character Action",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Convert basic stick figures into dynamic anime scenes with specified characters using Nano Banana AI for pose-based generation. Transform the stick figure into [character description], performing the action [action description], in an anime style ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Convert basic stick figures into dynamic anime scenes with specified characters for pose-based generation. Transform the stick figure into [character description], performing the action [action description], in an anime style ."
},
{
"task": "27 Generate a Set of Character Designs/Storybook",
@@ -142,7 +142,7 @@
{
"task": "29 Sci-Fi Landscape Concept Art",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Render intricate, vibrant sci-fi landscapes and alien worlds using Nano Banana AI. Create a hyper-realistic sci-fi landscape of [scene description], including details like [specific elements, e.g., planets, flora, structures] ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Render intricate, vibrant sci-fi landscapes and alien worlds. Create a hyper-realistic sci-fi landscape of [scene description], including details like [specific elements, e.g., planets, flora, structures] ."
},
{
"task": "30 Google Street View Annotation",
@@ -152,17 +152,17 @@
{
"task": "31 3D Mask Edits & Color Marking",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Apply 3D volume masking, pose edits, and color-coded changes in 2D images via Nano Banana AI for technical visualizations. On the provided figure, apply the following edits: [list of edits, e.g., mask specific parts, change pose, mark moved parts with a light blue color grid, unchanged remain unmarked] ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Apply 3D volume masking, pose edits, and color-coded changes in 2D images for technical visualizations. On the provided figure, apply the following edits: [list of edits, e.g., mask specific parts, change pose, mark moved parts with a light blue color grid, unchanged remain unmarked] ."
},
{
"task": "32 Illustration to Figurine",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Convert 2D illustrations into realistic 3D figurines, complete with packaging and modeling scenes, using Nano Banana AI. Turn the illustration into a character figurine, and place it in a scene with [details of the background, packaging, and any other elements like a modeling screen] ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Convert 2D illustrations into realistic 3D figurines, complete with packaging and modeling scenes,. Turn the illustration into a character figurine, and place it in a scene with [details of the background, packaging, and any other elements like a modeling screen] ."
},
{
"task": "33 Illustration to Commercialized 1/7-Scale Figurine",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Use Nano Banana AI to create a 1/7-scale commercialized figure of the character in the illustration in a realistic style and environment. Place the figure on a computer desk using a circular transparent acrylic base without any text. On the computer screen, display the ZBrush modeling process of the figure. Next to the computer screen, place a BANDAI-style toy packaging box printed with the original artwork ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. to create a 1/7-scale commercialized figure of the character in the illustration in a realistic style and environment. Place the figure on a computer desk using a circular transparent acrylic base without any text. On the computer screen, display the ZBrush modeling process of the figure. Next to the computer screen, place a BANDAI-style toy packaging box printed with the original artwork ."
},
{
"task": "34 Old Photo Restoration and Enhancement",
@@ -172,7 +172,7 @@
{
"task": "35 Professional-Level Photo Retouching",
"num_instructions": 1,
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Achieve pro-grade edits like blemish removal while retaining natural features using Nano Banana AI, bypassing traditional software. Clean the face by removing acne, pimples, blemishes, and temporary spots from the skin (face, nose, forehead, neck, back of the head, throat). Smooth and correct the skin texture for a realistic and natural look. Preserve all permanent marks such as scars, moles, or birthmarks without altering them. [list optional additional edits] ."
"prompt": "Image Order: IMAGE_1 is always the main SUBJECT; the LAST image is always the BACKGROUND; any middle images (IMAGE_2..IMAGE_{n-1}) are optional REFS that may represent garment/style/pose/prop or other concepts per user text. Achieve pro-grade edits like blemish removal while retaining natural features, bypassing traditional software. Clean the face by removing acne, pimples, blemishes, and temporary spots from the skin (face, nose, forehead, neck, back of the head, throat). Smooth and correct the skin texture for a realistic and natural look. Preserve all permanent marks such as scars, moles, or birthmarks without altering them. [list optional additional edits] ."
},
{
"task": "36 3D Model Product Marketing",