Generate Poster/Ad Asset with your Product
Upload your product and a simple text prompt for the poster or ad design. Iterate on the look before swapping the product into the generate layout.
About
This ComfyUI workflow is designed to streamline the creation of visually appealing posters or advertisements by integrating your product image into a generated layout. The process begins by uploading your product image and providing a simple text prompt that outlines the desired theme or style for the poster.
The workflow utilizes a combination of advanced AI models, including ByteDance and Google Gemini, to generate a base layout that aligns with your prompt. The Seedream model further refines the visual elements, ensuring high-quality output. Custom nodes like comfyui_essentials enhance the workflow by providing essential functionalities such as image saving and previewing, allowing for iterative design adjustments before finalizing the product integration.
Technically, the workflow leverages nodes such as LoadImage to import the product image, and ByteDanceSeedreamNode to apply the Seedream model's aesthetic transformations. The GeminiNode is used to incorporate Google's Gemini model, which excels at generating cohesive and visually striking layouts based on textual prompts. PreviewAny and Reroute nodes facilitate real-time previews and efficient data flow management, ensuring that users can make informed decisions during the design process.
This workflow is particularly useful for marketers and designers looking to quickly produce professional-grade promotional materials with minimal manual effort.
What you provide
- Reading the workflow
Runs in ComfyUI. This workflow can't run on this page. Open it in Comfy Cloud with everything loaded, or download it for your own ComfyUI.
Try in CloudInside the workflow
A read-only preview of the node graph. Open it in Comfy Cloud or download it to edit the nodes.
Loading the graph
Open full-size workflow preview- Author
- Rob
Requires custom nodes
- Reading the workflow
Use this workflow from code
Generated from the workflow graph and inputs when possible; stored examples are shown otherwise. Review credentials and endpoints before running code, which may incur charges.
What you need
- Runs on
- Comfy Cloud
- Key
- COMFY_API_KEY
Needs a paid Cloud plan and credits.
# Python 3.10+: pip install comfy-sdk==0.4.0
import os
from comfy_sdk import Comfy
api_key = os.environ.get("COMFY_API_KEY", "").strip()
if not api_key: raise RuntimeError("Set COMFY_API_KEY")
os.environ.setdefault("COMFY_BASE_URL", "https://cloud.comfy.org")
client = Comfy(api_key=api_key)
workflow = client.workflows.from_json({
"10": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "ComfyUI-poster",
"images": [
"14",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"13": {
"class_type": "SaveImage",
"inputs": {
"filename_prefix": "ComfyUI-poster_product",
"images": [
"19",
0
]
},
"_meta": {
"title": "Save Image"
}
},
"14": {
"class_type": "ByteDanceSeedreamNode",
"inputs": {
"fail_on_partial": True,
"height": 2048,
"max_images": 1,
"model": "seedream-4-5-251128",
"prompt": [
"23",
0
],
"seed": 123,
"sequential_image_generation": "auto",
"size_preset": "1664x2496 (2:3)",
"watermark": False,
"width": 2048
},
"_meta": {
"title": "ByteDance Seedream 4.5 & 5.0"
}
},
"15": {
"class_type": "LoadImage",
"inputs": {
"image": "comfy_cloud_water_can.jpg"
},
"_meta": {
"title": "Load Product Image"
}
},
"19": {
"class_type": "ByteDanceSeedreamNode",
"inputs": {
"fail_on_partial": True,
"height": 2048,
"image": [
"29:33",
0
],
"max_images": 1,
"model": "seedream-4-5-251128",
"prompt": "Replace the product from image 1 with the product from image 2. Ensure the products dimensions stay consistent with input image 2.",
"seed": 321,
"sequential_image_generation": "disabled",
"size_preset": "1664x2496 (2:3)",
"watermark": False,
"width": 2048
},
"_meta": {
"title": "ByteDance Seedream 4.5 & 5.0"
}
},
"23": {
"class_type": "GeminiNode",
"inputs": {
"images": [
"15",
0
],
"model": "gemini-3-pro-preview",
"prompt": "The canned product sits on a reflective glass table, faintly reflecting the sky, liquid water textures sit on the table, small silicon computer chips are scattered around. In the blue sky, clouds form as text that says \"Comfy Cloud\" amongst scattered clouds. Realistic product photography.",
"seed": 12345,
"system_prompt": "# Role: Prompt Architect & Creative Director\n\n## 1. Core Objective\n\nYou are an expert **Prompt Engineer and Commercial Art Director**. Your mission is to transform natural language user requests—ranging from simple object/product names, mandatory H1 header titles, typography fonts styles to use, taglines phrases, to specific hex color codes, detailed brand briefs—into a **structured, detailed, and execution-ready English prompt**.\n\nYou must seamlessly integrate user-provided details (brand names, specific color codes, product features) while creatively \"gap-filling\" any missing aesthetic details to ensure a high-quality, cohesive visual output.\n\n\n## 2. Input Processing & Adaptation Strategy\n\nBefore generating the output, analyze the user's input against these three levels of granularity:\n\n* **Level 1: Sparse (e.g., \"a coffee poster\").**\n\n * *Action:* You must invent a cohesive brand identity, mood, and style. Infer a suitable context (e.g., a cozy morning or a high-energy workspace).\n\n* **Level 2: Hybrid (e.g., \"Retro sci-fi poster for a sleek energy drink\").**\n\n * *Action:* Adopt the requested style (\"Retro sci-fi\"). Create a visual scene that highlights the \"sleekness\" of the product. Invent a brand name if none is provided.\n\n* **Level 3: Specific (e.g., \"Rolex Submariner, underwater scene, emerald green and gold palette, Title: 'Deep Dive'\").**\n\n * *Action:* strictly adhere to the brand name, color palette, and specific product details provided. Do not deviate from these constraints.\n\n\n## 3. Output Structure Requirements\n\nYou must organize the final prompt into **five distinct dimensions**. Do not use bullet points within the sections; instead, write coherent, descriptive paragraphs for each dimension.\n\n\n### Dimension 1: Poster Content & Hero Object\n\n* **Goal:** Define the visual reality and the Product/Subject placement.\n\n* **Instruction:** clearly describe the main visual elements. If a product is mentioned, treat it as the \"Hero Object\"—describe its lighting, material qualities (e.g., condensation on a can, sheen on leather), and interaction with the environment.\n\n* **Example logic:** Instead of \"a shoe,\" write \"a floating high-top sneaker with reflective holographic panels, surrounded by shattered concrete debris suspended in mid-air.\"\n\n\n### Dimension 2: Aesthetic Style & Brand Identity\n\n* **Goal:** Define the artistic lens and color strategy.\n\n* **Instruction:** Describe the visual tone (e.g., cinematic, minimalist, brutalist, ethereal). **Crucial:** If the user provided brand colors, explicitly mandate them here. Describe the hex code colors into natural english, DO NOT output the actual hex code #. If no colors are provided, define a sophisticated palette that compliments the subject. Mention textures (e.g., matte finish, film grain, glossy plastic) and lighting style (e.g., volumetric god-rays, neon rim lighting).\n\n\n### Dimension 3: Poster Text\n\n* **Goal:** Define the exact strings to render.\n\n* **Instruction:** Provide **only** the exact text content to appear on the poster.\n\n 1. If the user provides a Brand Name/Title, use it exactly.\n\n 2. If the user provides *no* text, you **must** invent a short, punchy, thematic title or brand name that fits the vibe.\n\n 3. Maintain exact spelling and capitalization.\n\n\n### Dimension 4: Text Style and Position\n\n* **Goal:** Define typography and hierarchy.\n\n* **Instruction:**\n\n * **Font:** Describe the font family (e.g., bold sans-serif, elegant serif, handwritten marker, futuristic digital display).\n\n * **Attributes:** Specify material effects on the text (e.g., metallic gold, glowing neon, negative space cutout).\n\n * **Placement:** Describe the layout of the text relative to the image (e.g., bold header centered at the top, small legal text at the bottom, vertical tagline interlaced with the main subject).\n\n\n### Dimension 5: Layout\n\n* **Goal:** Define composition and flow.\n\n* **Instruction:** Describe how elements are arranged to guide the viewer's eye. Explain the relationship between the background and the foreground. Define the camera angle (e.g., low-angle hero shot, top-down flat lay, macro close-up). Ensure there is clear \"safe space\" for the text defined in Dimension 4 so it does not clash with the busy parts of the image.\n\n\n## 4. Strict Constraints\n\n1. **Language:** The final output must be in **English only**.\n\n2. **Purity:** Output **only** the structured prompt content. Do not include conversational fillers (e.g., \"Here is your prompt\"), explanations, or markdown code block fences (like ```).\n\n3. **Format:** Strictly follow the header structure shown in the \"Output Structure Requirements\"."
},
"_meta": {
"title": "Prompt + Google Gemini Prompt Enhancer"
}
},
"24": {
"class_type": "PreviewAny",
"inputs": {
"source": [
"23",
0
]
},
"_meta": {
"title": "Preview Prompt as Text"
}
},
"29:16": {
"class_type": "GetImageSize",
"inputs": {
"image": [
"14",
0
]
},
"_meta": {
"title": "Get Image Size"
}
},
"29:17": {
"class_type": "ResizeAndPadImage",
"inputs": {
"image": [
"29:30",
0
],
"interpolation": "area",
"padding_color": "black",
"target_height": [
"29:16",
1
],
"target_width": [
"29:16",
0
]
},
"_meta": {
"title": "Resize And Pad Image"
}
},
"29:29": {
"class_type": "RemBGSession+",
"inputs": {
"model": "u2net: general purpose",
"providers": "CPU"
},
"_meta": {
"title": "🔧 RemBG Session"
}
},
"29:30": {
"class_type": "ImageRemoveBackground+",
"inputs": {
"image": [
"15",
0
],
"rembg_session": [
"29:29",
0
]
},
"_meta": {
"title": "🔧 Image Remove Background"
}
},
"29:33": {
"class_type": "BatchImagesNode",
"inputs": {
"images.image0": [
"14",
0
],
"images.image1": [
"29:17",
0
]
},
"_meta": {
"title": "Batch Images"
}
}
})
# run() also passes api_key to the partner nodes in this workflow.
job = client.run(workflow, api_key=api_key)Questions & answers
High-resolution product images with clear backgrounds are ideal, as they integrate seamlessly into the AI-generated layouts.
Yes, you can tailor the text prompt to specify different themes, colors, and styles to match your brand's aesthetic.
Use the PreviewAny node to iteratively adjust and preview designs, ensuring alignment with your brand's visual identity before finalizing.
While optimized for product images, the workflow can be adapted for other types of images, though results may vary based on the input.