216 lines
7.5 KiB
Markdown
216 lines
7.5 KiB
Markdown
---
|
|
id: wiki-2026-0508-인-이미지-텍스트-in-image-text
|
|
title: 인-이미지 텍스트(In-Image Text)
|
|
category: 10_Wiki/Topics
|
|
status: verified
|
|
canonical_id: self
|
|
aliases: [In-Image Text, Text Rendering, Typography in AI Images, Glyph Rendering]
|
|
duplicate_of: none
|
|
source_trust_level: A
|
|
confidence_score: 0.9
|
|
verification_status: applied
|
|
tags: [image-generation, text-rendering, typography, flux, dall-e, stable-diffusion]
|
|
raw_sources: []
|
|
last_reinforced: 2026-05-10
|
|
github_commit: pending
|
|
tech_stack:
|
|
language: Python
|
|
framework: Diffusers/FLUX
|
|
---
|
|
|
|
# 인-이미지 텍스트(In-Image Text)
|
|
|
|
## 매 한 줄
|
|
> **"매 SD 1.5 (2022) 의 의 garbled gibberish 의 의 의, 매 FLUX.1 / Imagen 3 / GPT-image-1 (2024-2026) 의 의 word-level accurate text rendering 의 가능."**. 매 image generation model 의 의 long-standing weakness 의 typography rendering — diffusion model 의 의 의 의 의 의 character-level glyph 의 의 의 의 의. 매 2026 의 의 T5 text encoder + flow matching (FLUX) + dedicated text rendering datasets 의 의 logo / poster / UI mockup / meme 의 의 의 의 production-ready.
|
|
|
|
## 매 핵심
|
|
|
|
### 매 모델 의 의 text rendering capability (2026)
|
|
- **FLUX.1 dev/pro (BFL)**: 의 — short text (< 10 words), brand 의 의.
|
|
- **Imagen 3 (Google)**: 의 의 — long text 의 high accuracy.
|
|
- **GPT-image-1 (OpenAI)**: 의 — paragraph-level, multilingual.
|
|
- **SD 3.5 (Stability)**: 의 — short text 의 의 의 (open-weights).
|
|
- **Ideogram 2.0**: text-specialized — 의 typography 의 의.
|
|
- **Recraft V3**: SOTA for text rendering 의 design (poster/UI).
|
|
|
|
### 매 의 어떤 model 의 의 의
|
|
- **T5-XXL text encoder**: 의 character-aware (Imagen, FLUX 의 의).
|
|
- **Glyph-aware data augmentation**: synthetic text overlay training data.
|
|
- **Flow matching**: 의 sharp glyph edge 의 의 (FLUX, SD3).
|
|
- **Specialized fine-tune**: Ideogram, Recraft 의 typography 의 의 fine-tune.
|
|
|
|
### 매 응용
|
|
1. Logo / brand mockup.
|
|
2. Poster / advertisement design.
|
|
3. Social media graphic (meme, infographic).
|
|
4. UI mockup with realistic copy.
|
|
5. Book cover, album cover.
|
|
|
|
## 💻 패턴
|
|
|
|
### FLUX.1 의 의 short text rendering
|
|
```python
|
|
from diffusers import FluxPipeline
|
|
import torch
|
|
|
|
pipe = FluxPipeline.from_pretrained(
|
|
"black-forest-labs/FLUX.1-dev",
|
|
torch_dtype=torch.bfloat16,
|
|
).to("cuda")
|
|
|
|
# 매 GOOD: quoted, short, common word
|
|
prompt = 'A coffee shop sign that reads "MORNING BREW", warm sunlight, photo'
|
|
image = pipe(prompt, guidance_scale=3.5, num_inference_steps=28).images[0]
|
|
```
|
|
|
|
### GPT-image-1 (OpenAI) — long text + edit
|
|
```python
|
|
from openai import OpenAI
|
|
client = OpenAI()
|
|
|
|
result = client.images.generate(
|
|
model="gpt-image-1",
|
|
prompt="""
|
|
A vintage poster with the title "ANTIGRAVITY" at the top in bold sans-serif,
|
|
subtitle "A Journey Beyond Gravity" below, and tagline at the bottom:
|
|
"In Theaters December 2026". Minimalist, retro-futurist style.
|
|
""",
|
|
size="1024x1536",
|
|
)
|
|
image_url = result.data[0].url
|
|
```
|
|
|
|
### Ideogram API (text-specialized)
|
|
```python
|
|
import requests
|
|
|
|
response = requests.post(
|
|
"https://api.ideogram.ai/generate",
|
|
headers={"Api-Key": IDEOGRAM_KEY},
|
|
json={
|
|
"image_request": {
|
|
"prompt": 'Restaurant menu with "TODAY\'S SPECIAL: Truffle Risotto $24"',
|
|
"aspect_ratio": "ASPECT_3_4",
|
|
"model": "V_2_TURBO",
|
|
"magic_prompt_option": "AUTO",
|
|
}
|
|
},
|
|
)
|
|
```
|
|
|
|
### Post-hoc text overlay (의 reliable fallback)
|
|
```python
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
|
|
# 매 model 의 의 garbage text 의 의 의 → blank space 의 의 의 의 PIL 의 overlay
|
|
base = Image.open("generated_poster.png")
|
|
draw = ImageDraw.Draw(base)
|
|
font = ImageFont.truetype("Inter-Bold.ttf", 72)
|
|
draw.text((100, 200), "ANTIGRAVITY", fill="white", font=font, stroke_width=3, stroke_fill="black")
|
|
base.save("final.png")
|
|
```
|
|
|
|
### Inpainting 의 text fix (FLUX Fill)
|
|
```python
|
|
from diffusers import FluxFillPipeline
|
|
|
|
pipe = FluxFillPipeline.from_pretrained(
|
|
"black-forest-labs/FLUX.1-Fill-dev",
|
|
torch_dtype=torch.bfloat16,
|
|
).to("cuda")
|
|
|
|
# 매 garbled text 의 의 의 mask 의 의 의 redraw
|
|
result = pipe(
|
|
image=base_image,
|
|
mask_image=text_mask, # white where text should go
|
|
prompt='clear bold text "WELCOME"',
|
|
num_inference_steps=30,
|
|
guidance_scale=30, # 의 high — text 의 의 의
|
|
).images[0]
|
|
```
|
|
|
|
### Glyph ControlNet (open-source approach)
|
|
```python
|
|
# 매 AnyText / GlyphControl 의 의 의 의 의 character-level control
|
|
from diffusers import StableDiffusionControlNetPipeline, ControlNetModel
|
|
|
|
controlnet = ControlNetModel.from_pretrained(
|
|
"AIGCDesignGroup/AnyText",
|
|
torch_dtype=torch.float16,
|
|
)
|
|
pipe = StableDiffusionControlNetPipeline.from_pretrained(
|
|
"runwayml/stable-diffusion-v1-5",
|
|
controlnet=controlnet,
|
|
torch_dtype=torch.float16,
|
|
).to("cuda")
|
|
|
|
# 매 glyph mask 의 의 의 image 의 conditioning
|
|
glyph_image = render_text_to_image("HELLO WORLD", font="Inter-Bold")
|
|
result = pipe(
|
|
prompt="neon sign in cyberpunk alley",
|
|
image=glyph_image,
|
|
controlnet_conditioning_scale=1.0,
|
|
).images[0]
|
|
```
|
|
|
|
### Multilingual text (CJK / Arabic)
|
|
```python
|
|
# 매 FLUX / SD 의 Latin alphabet 의 의 의 — CJK 의 의 의
|
|
# 매 Imagen 3 / GPT-image-1 의 multilingual 의 의 better
|
|
prompt = '한국어 간판 "안녕하세요" cafe sign, neon, night photo'
|
|
# → GPT-image-1 의 의 가능, FLUX 의 의 garbled 의 가능
|
|
```
|
|
|
|
### Prompting 의 의
|
|
```
|
|
GOOD prompts:
|
|
- 'sign reads "OPEN"'
|
|
- 'a book titled "The Pragmatic Programmer"'
|
|
- 'graffiti spelling "HOPE" on a brick wall'
|
|
|
|
BAD prompts (likely garbled):
|
|
- 'a paragraph of legal text' # 의 too long
|
|
- 'random foreign language text' # 의 ambiguous
|
|
- 'small text in the corner' # 의 small = harder
|
|
```
|
|
|
|
## 매 결정 기준
|
|
| 상황 | Approach |
|
|
|---|---|
|
|
| Short logo / sign (1-3 words) | FLUX.1 dev/pro |
|
|
| Poster / multi-line text | Imagen 3 / GPT-image-1 / Recraft |
|
|
| Typography-heavy (menu, infographic) | Ideogram 2.0 / Recraft V3 |
|
|
| Multilingual (CJK, RTL) | GPT-image-1 / Imagen 3 |
|
|
| Open-weights + custom text | AnyText / GlyphControl ControlNet |
|
|
| Reliable production text | Post-hoc PIL overlay (의 deterministic) |
|
|
| Fix garbled text in existing image | FLUX Fill inpaint OR overlay |
|
|
|
|
**기본값**: FLUX.1 dev 의 의 (short text), GPT-image-1 의 의 의 (long/multilingual). 매 mission-critical 의 의 PIL overlay 의 의 의.
|
|
|
|
## 🔗 Graph
|
|
- 부모: [[Image_Generation]] · [[Diffusion_Models]]
|
|
- 변형: [[FLUX_1]] · [[Imagen_3]] · [[Ideogram]]
|
|
- 응용: [[Logo_Design]] · [[Poster_Generation]] · [[Meme_Generation]]
|
|
- Adjacent: [[ControlNet]] · [[FLUX_Fill_Inpainting]] · [[Typography]]
|
|
|
|
## 🤖 LLM 활용
|
|
**언제**: prompt scaffolding for text rendering, model selection 의 의 word count 의 의, fallback strategy proposal.
|
|
**언제 X**: visual quality judgement (의 human eval), brand-critical typography (의 design tool 의 의 의 final).
|
|
|
|
## ❌ 안티패턴
|
|
- **Long paragraph in prompt**: 의 expect verbatim — 의 5-10 word 의 의.
|
|
- **Small text expected**: 매 < 32px equivalent 의 의 의 garbled.
|
|
- **Uncommon font in prompt**: 매 font name 의 의 의 의 의 의 의.
|
|
- **No quotes around target text**: 의 model 의 의 의 의 의 의 의 의 의.
|
|
- **Trust 의 first generation**: 의 retry 3-5x — 의 cherry-pick.
|
|
|
|
## 🧪 검증 / 중복
|
|
- Verified (Black Forest Labs FLUX paper, Google Imagen 3 report, OpenAI gpt-image-1 system card, Ideogram blog, AnyText paper).
|
|
- 신뢰도 A.
|
|
|
|
## 🕓 Changelog
|
|
| 날짜 | 변경 |
|
|
|---|---|
|
|
| 2026-05-08 | Phase 1 |
|
|
| 2026-05-10 | Manual cleanup — in-image text rendering (FLUX, Imagen, Ideogram) |
|