MOSS-Image in ComfyUI: place text with boxes for social posts, posters, and thumbnails, tested with Traditional Chinese

Translated from the original Traditional Chinese version.

Summary

MOSS-Image draws the text you give it directly into the image, and its ComfyUI template lets you box out where the title, photo, and price go before generating. I tested this only with Traditional Chinese text. All six images made with boxes had correct characters, and a new random seed kept the layout, which is evidence that the model suits CJK text layout. I did not test English text.

Table of contents

MOSS-Image is an image model built for layout work. You run it in ComfyUI, type the words you want in the prompt, and the model draws them into the image, so a social post or event poster doesn’t need a separate pass in design software. These images usually have fixed spots for the title, product name, and price, and with a prompt alone the layout changes from one image to the next. The MOSS-Image template in ComfyUI lets you box out each piece of text and each photo on a canvas first, then generates the image to that layout.

I tested this only with Traditional Chinese text, using a cafe’s new product post, a market poster, and a tutorial video thumbnail. The Chinese characters came out at high quality, and a new random seed didn’t move the text. That is my evidence that MOSS-Image suits CJK text layout, and it covers Traditional Chinese only. I did not test English text. The only Latin characters in my images are short strings such as NT$ 150 and ComfyUI beside Chinese text, so these results say nothing about how the model sets an English headline.

My test system was Windows 11, an RTX 3070 with 8 GB, and ComfyUI 0.43.2, with the quantized MOSS-Image version that the official template uses by default. The shops and events in the images are fictional. I generated this post from five boxes. Its large text means “Autumn limited edition” and “Osmanthus oolong latte”:

A cream-colored portrait post. The top reads Autumn limited edition in Chinese, the middle is a photo of an osmanthus latte on a wooden table by a window, the lower part has the product name in large Chinese characters and a line saying 50 cups a day from 11/8, and NT$ 150 is in orange at the lower right

Prepare the model and templates

OpenMOSS released MOSS-Image in October 2026, and ComfyUI has supported it natively since 0.42.0. If you haven’t installed ComfyUI yet, you can follow the steps in installing ComfyUI with comfy-cli and having Claude Code generate images from a template. In Templates on the left side of ComfyUI, search for MOSS to find two templates. MOSS-Image: Layout-Guided Text to Image lets you box out text and objects on a canvas. MOSS-Image: Text to Image describes the whole image with a prompt only.

Both templates use the same set of models. You can download them from Comfy-Org/MOSS-Image on Hugging Face and place them in the matching folders under ComfyUI’s models folder:

Model File Folder Size
Diffusion model moss_image_sft_int8_convrot.safetensors diffusion_models 5.41 GB
Text encoder qwen3.5_9b_w4a8_gptq.safetensors text_encoders 7.34 GB
VAE flux2-vae_small.safetensors vae 0.25 GB

If other ComfyUI projects on your computer also use these models, you can let them read one shared model folder instead of downloading them again. The Layout-Guided template draws boxes with the Create Bounding Boxes node. That node’s editor appears only in the Nodes 2.0 interface, which is off by default in a new workspace. Go to the Comfy tab in Settings and turn on Modern Node Design (Nodes 2.0).

Choose an image size

Both templates set the image size in the Resolution Selector node. After you pick aspect_ratio and megapixels, the node shows the actual width and height below them. MOSS-Image’s official user guide recommends 1, 1.5, or 2 megapixels in total, with width and height as multiples of 16, and the sizes from Resolution Selector meet that. These are the settings for my three kinds of images:

Use Platform spec Aspect ratio Megapixels Output size
Instagram post Width 1080, aspect 1.91:1 to 3:4 3:4 1.5 1088 × 1456
Event poster No fixed spec 2:3 1.5 1024 × 1536
YouTube thumbnail 16:9, at least 640 wide 16:9 1.5 1664 × 944

Instagram’s photo resolution help page says posts are scaled to 1080 pixels wide and aren’t cropped when the aspect ratio is between 1.91:1 and 3:4. Resolution Selector has no 4:5 option, so choose 3:4 for a portrait post. The 1088 × 1456 output is slightly taller than 3:4, and cropping it to 1086 × 1448 gives exactly 3:4.

YouTube’s custom thumbnail help page asks for 16:9 and a width of at least 640 pixels, and recommends 3840 × 2160. At 16:9 and 1.5 megapixels, Resolution Selector gives 1664 × 944, which is slightly taller than 16:9. Cropping 8 pixels of height gives 1664 × 936.

Box out text and objects

Open the MOSS-Image: Layout-Guided Text to Image template. The Create Bounding Boxes node has a canvas, and each box you drag on it becomes one region of the image. A text box holds the words to draw, an object box describes the thing to draw, and the model places them where you put the boxes.

Match the canvas to the aspect ratio

After you choose 3:4 in Resolution Selector, set width and height on the Create Bounding Boxes node to the same size so the canvas becomes 3:4. These two inputs are wired to Resolution Selector by default, so you have to disconnect them before you can type in them:

  1. Drag a link out of the width input on the Create Bounding Boxes node and release it on an empty part of the canvas. When the node search dialog appears, press Esc to close it. The link is now removed.
  2. Remove the height link the same way.
  3. In the width and height fields that appear, enter the size shown in Resolution Selector, which is 1088 and 1456 in this example.

Once the canvas is 3:4, boxes you already drew scale to fit. If you change the aspect ratio later, change these two fields as well.

If you skip this, the canvas stays a 1024 × 1024 square, the box positions are calculated on that square, and generation applies them to a 1088 × 1456 image, so all the boxes crowd into roughly the top 70% of the image. I boxed out the five regions of the opening post on a square canvas and generated. The left image below has an unrequested collage of drink photos at the bottom, and on the right image the product name and date turned into garbled characters:

Two cafe posts generated with width and height still wired to Resolution Selector. On the left, the product name and price crowd the middle and an unrequested collage of drink photos fills the bottom. On the right, the product name and date are broken apart and overlapping, garbled characters

Draw the boxes and fill them in

Click Clear all at the upper right of the editor to delete the template’s sample boxes, then drag on the canvas to draw each box. A new box is an object box by default. For text, switch the box to the text type and enter the words to draw in its Text field. In the description field, write the size, color, typeface, and position of the text. An object box needs only a description. Following the official user guide, I wrote the descriptions in English and kept the words to draw in Chinese.

These are the five boxes for the cafe post. The Text column shows the exact Chinese strings I entered. The English in parentheses is for your reference and wasn’t sent to the model:

Box Type Text Description
01 Text 秋季限定 (Autumn limited edition) At the top center, medium-size dark brown rounded sans-serif characters on the cream background, clearly readable
02 Object None A tall glass of osmanthus oolong latte with visible milk and tea layers, a few golden osmanthus petals scattered on the wooden table, soft window light
03 Text 桂花烏龍拿鐵 (Osmanthus oolong latte) Large bold dark brown sans-serif product name, centered, the largest text on the post
04 Text 11/8 起每日限量 50 杯 (50 cups a day from 11/8) One line of small dark brown sans-serif text centered under the product name
05 Text NT$ 150 Price in bold amber sans-serif at the bottom right corner

Next, write a description of the whole image in the prompt field of the MOSS-Image Layout Prompt node. I used this one:

1Warm autumn Instagram post for a cafe: a glass of osmanthus oolong latte on a wooden table with fallen osmanthus petals, soft morning window light, cream and amber palette, clean layout with generous margins.

The character_boxes field on the same node is set to 2 by default, which treats box 2 as a character. This image has no character, so clear the field. Here is the finished setup. My ComfyUI runs in Traditional Chinese, so the screenshot shows Chinese labels. From left to right, the nodes are Resolution Selector, Create Bounding Boxes, and MOSS-Image Layout Prompt:

Create Bounding Boxes with width and height typed in as 1088 and 1456. The canvas is 3:4 portrait with five boxes for the title, drink photo, product name, date, and price. The MOSS-Image Layout Prompt node on the right has the description of the whole image filled in
On the Text to Image (MOSS-Image) node, enable_prompt_enhancer expands the prompt into a detailed English description before generation. It is off by default in this template, and a note in the template says that turning it on rewrites the content of the boxes, so leave it off. Another note at the lower right of the screen says “Prompt upsampler is on”, which doesn’t match the actual default, and you can ignore it. Click Run to generate the post shown at the top.

The resulting posts, posters, and thumbnails

The same boxes with two random seeds gave almost identical positions, sizes, and colors for the text. Only the glass, the window view, and the osmanthus decorations in the photo changed:

Two cafe posts generated from boxes. The title, photo, product name, date, and price sit in almost the same places, and only the photo content and decorations differ
The event poster has boxes for the title, date, location, illustration, and a free admission label. Both images had correct text, in almost the same positions:

Two handmade market posters generated from boxes, with the title, date, location, illustration, and the free admission label at the bottom in the same places
The YouTube thumbnail has three boxes: a two-line title, a yellow subtitle, and a laptop. Both images had correct text, and the title and subtitle were in almost the same positions. The laptop’s size and angle differ. The title means “Understand ComfyUI in 3 minutes” and the subtitle means “Beginner install guide”:

Two YouTube thumbnails generated from boxes. On a dark blue background, the left side has a bold white title with the word ComfyUI and a yellow Chinese subtitle, and the right side has a laptop whose screen shows connected nodes

Describe the layout with a prompt only

The MOSS-Image: Text to Image template doesn’t use boxes. You write the words and their positions into the prompt. This template has enable_prompt_enhancer on by default, and the expanded English description keeps the text you put in 「」 corner brackets, so you can write the prompt directly in Chinese. This is the prompt I used for the cafe post, exactly as I entered it:

1咖啡店的 Instagram 新品貼文,3:4 直式。上方寫「秋季限定」,中間是一杯桂花烏龍拿鐵的照片,下方大字寫品名「桂花烏龍拿鐵」,品名下面寫「11/8 起每日限量 50 杯」,右下角寫價格「NT$ 150」。暖色、溫暖的秋天氛圍,版面乾淨。

In English, it asks for a cafe’s Instagram new product post in 3:4 portrait, with “Autumn limited edition” at the top, a photo of an osmanthus oolong latte in the middle, the product name in large text below it, the line about 50 cups a day under the name, and the price NT$ 150 at the lower right, in warm colors with an autumn mood and a clean layout. The English is only a reference. I did not run it.

I generated one image for each of two random seeds. Both followed the prompt’s top-to-bottom order, but the photo, typeface, and price position differ between them. The left image has a full-bleed photo with the text on bands above and below it, and the last character of the product name came out as the Japanese form, 鉄 instead of 鐵. The right image has the photo in a rounded card, and its product name is correct:

Two cafe posts with the layout described by a prompt. The left has a full-bleed photo and a Japanese character form in the product name. The right has the photo in a rounded card and a correct product name. The price position and typeface differ between them
Both event posters had the correct title, date, location, and free admission label, and the illustrations and title colors differ. On the right image, a stall sign in the illustration has the Simplified Chinese word 艺术 (“art”) and other garbled characters that the prompt didn’t ask for:

Two handmade market posters with the layout described by a prompt. The title, date, location, and free admission label are all correct, and a stall sign in the right illustration has Simplified Chinese characters and garbled text
Both YouTube thumbnails also had correct text, but the titles are arranged differently. The upper image enlarges the 3 into a number spanning two lines, with the rest of the title to its right. The lower image puts “3 minutes” on one line. On both, the right edge of the image cuts off part of the laptop:

Two YouTube thumbnails with the layout described by a prompt, with correct text. The upper one has a large 3 spanning two lines and the lower one has the 3 minutes phrase on a single line. The right edge cuts off part of the laptop in both

Test notes

Every text string in these tests was Traditional Chinese, sometimes with short Latin strings or numbers beside it. I did not test English, Simplified Chinese, Japanese, or Korean as the requested text.

Both templates used the default sampling settings (25 steps, CFG 2.5, er_sde, simple), with random seeds 20261103 and 20261104. The Layout-Guided template has enable_prompt_enhancer off and SLG (Skip Layer Guidance), a sampling setting, on by default. The Text to Image template has enable_prompt_enhancer on by default, and its times include the prompt expansion. The first image of each batch has to load the model and took about 130 to 160 seconds. The times below don’t include that image:

Image Method Time per image Text
Cafe post Boxes 50 s Both correct
Event poster Boxes 48 to 49 s Both correct
YouTube thumbnail Boxes 48 to 50 s Both correct
Cafe post, width and height wired Boxes 49 s Layout crowded to the top, second image has garbled name and date
Cafe post Prompt 61 s First image has 鉄 instead of 鐵, second correct
Event poster Prompt 61 to 67 s Main text correct, second image has Simplified and garbled signs
YouTube thumbnail Prompt 58 s Both correct

While generating the images above, total graphics card memory use peaked at 7.3 to 7.8 GB, and the idle desktop alone takes about 1.2 GB. I measured system memory in a 1024 × 1024 test. Generation used about 12 GB more than when ComfyUI had just finished starting, or about 14.5 GB more with enable_prompt_enhancer on.

Summary

In the Layout-Guided template, all six images made with boxes had correct Traditional Chinese titles, product names, dates, and prices, and a new random seed left the layout almost unchanged, which is my evidence that MOSS-Image suits CJK text layout. Before you draw boxes, disconnect the width and height of Create Bounding Boxes and enter the image size, or the boxes fill only about the top 70% of the image. With a prompt alone, the composition and typeface change from image to image, a Japanese form and stray Simplified characters appeared, and English text remains untested.

Where to go next

PreviousMigrate a Minecraft Spigot server to Paper: steps that keep the world and plugin data intactGamesNextComfyUI shared models: let multiple ComfyUI installs read one model folder and stop downloading duplicatesAI
Ted Liou

Ted Liou

Software engineer writing about Unity and AI development. Available for consulting.