qwen-image / index.html
chengzeyi's picture
Add UTM attribution to outbound wavespeed.ai links
43198da
Raw
History Blame Contribute Delete
13.6 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Qwen-Image — text-to-image foundation model</title>
<meta name="description" content="Reference for Qwen-Image, Alibaba&#x27;s open text-to-image foundation model, with emphasis on in-image text rendering. Includes diffusers and hosted API usage." />
<link rel="canonical" href="https://wavespeed.ai/models/wavespeed-ai/qwen-image/text-to-image?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=qwen_image" />
<meta property="og:type" content="website" />
<meta property="og:title" content="Qwen-Image — text-to-image foundation model" />
<meta property="og:description" content="Reference for Qwen-Image, Alibaba&#x27;s open text-to-image foundation model, with emphasis on in-image text rendering. Includes diffusers and hosted API usage." />
<meta property="og:url" content="https://wavespeed.ai/models/wavespeed-ai/qwen-image/text-to-image" />
<meta property="og:image" content="https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-Image/merge3.jpg" />
<meta name="twitter:card" content="summary_large_image" />
<link rel="stylesheet" href="style.css" />
</head>
<body>
<header class="site-header">
<div class="wrap">
<a class="brand" href="https://wavespeed.ai?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=qwen_image" target="_blank" rel="noopener">
<span class="brand-mark" aria-hidden="true"></span>
<span>WaveSpeed AI</span>
</a>
<nav class="header-nav">
<a class="jump opt" href="#overview">Overview</a>
<a class="jump opt" href="#strengths">What it does well</a>
<a class="jump" href="#run">Run it</a>
<a class="jump opt" href="#local">Local</a>
<a class="jump" href="#resources">Resources</a>
<a href="https://wavespeed.ai/models/wavespeed-ai/qwen-image/text-to-image?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=qwen_image" target="_blank" rel="noopener">wavespeed.ai &#8599;</a>
</nav>
</div>
</header>
<main class="wrap">
<div class="hero">
<p class="eyebrow">Alibaba Cloud · Qwen Team</p>
<h1>Qwen-Image</h1>
<p class="lede">An open image generation foundation model in the Qwen series. Its distinguishing strength is rendering legible text inside the image — including Chinese — rather than the smeared glyphs most diffusion models produce.</p>
<ul class="meta">
<li><b>Developer</b> Alibaba Cloud Qwen Team</li>
<li><b>Task</b> text-to-image</li>
<li><b>License</b> Apache-2.0</li>
<li><b>Weights</b> open</li>
</ul>
</div>
<section id="overview">
<h2>Overview</h2>
<p class="section-note">Qwen-Image is a general-purpose text-to-image model that also handles editing and several image-understanding tasks. The authors' benchmark summary is reproduced below.</p>
<div class="figure-single">
<figure>
<img src="https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-Image/merge3.jpg" alt="Grid of Qwen-Image sample outputs" loading="lazy" />
<figcaption>Sample outputs from the official release.</figcaption>
</figure>
</div>
</section>
<section id="bench">
<h2>Reported benchmarks</h2>
<p class="section-note">Published by the Qwen team with the model release. These are the authors' own figures and have not been independently reproduced here.</p>
<div class="figure-single">
<figure>
<img src="https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-Image/bench.png" alt="Qwen-Image benchmark chart" loading="lazy" />
<figcaption>Benchmark summary from the Qwen-Image model card.</figcaption>
</figure>
</div>
</section>
<section id="strengths">
<h2>What it does well</h2>
<div class="grid">
<div class="card">
<h3>Text inside the image</h3>
<p>Typography is generated as part of the scene, holding layout and letterforms together for both alphabetic scripts and Chinese — the capability the model is built around.</p>
</div>
<div class="card">
<h3>Style range</h3>
<p>Photographic, painterly, anime and flat-design outputs all come from the same checkpoint, steered by prompt rather than by LoRA.</p>
</div>
<div class="card">
<h3>Editing operations</h3>
<p>Style transfer, object insertion and removal, detail enhancement and text replacement inside an existing image.</p>
</div>
<div class="card">
<h3>Understanding tasks</h3>
<p>Detection, segmentation, depth and edge estimation, novel view synthesis and super-resolution, framed as conditional generation.</p>
</div>
</div>
</section>
<section id="showcase">
<h2>Showcase</h2>
<div class="figure-grid">
<figure>
<img src="https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-Image/s1.jpg" alt="Text rendering examples" loading="lazy" />
<figcaption><b>Text rendering.</b> Signage and dense copy integrated into the scene.</figcaption>
</figure>
<figure>
<img src="https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-Image/s2.jpg" alt="Artistic style examples" loading="lazy" />
<figcaption><b>Styles.</b> Photoreal through to illustrative, one checkpoint.</figcaption>
</figure>
<figure>
<img src="https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-Image/s3.jpg" alt="Image editing examples" loading="lazy" />
<figcaption><b>Editing.</b> Insertion, removal and in-image text edits.</figcaption>
</figure>
<figure>
<img src="https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-Image/s4.jpg" alt="Image understanding examples" loading="lazy" />
<figcaption><b>Understanding.</b> Depth, edges, segmentation and view synthesis.</figcaption>
</figure>
</div>
</section>
<section id="run">
<h2>Run it</h2>
<p class="section-note">The hosted endpoint runs the same weights without a local GPU.</p>
<div class="code">
<div class="code-tabs" role="tablist">
<button type="button" role="tab" aria-selected="true" data-panel="run-0">cURL</button>
<button type="button" role="tab" aria-selected="false" data-panel="run-1">Python</button>
<button type="button" role="tab" aria-selected="false" data-panel="run-2">JavaScript</button>
</div>
<pre id="run-0" role="tabpanel"><code># 1. submit the job
curl -X POST &quot;https://api.wavespeed.ai/api/v3/wavespeed-ai/qwen-image/text-to-image&quot; \
-H &quot;Authorization: Bearer $WAVESPEED_API_KEY&quot; \
-H &quot;Content-Type: application/json&quot; \
-d &#x27;{
&quot;prompt&quot;: &quot;A chalkboard outside a coffee shop reading \&quot;Qwen Coffee \u2014 $2 a cup\&quot;, warm morning light, shallow depth of field&quot;,
&quot;size&quot;: &quot;1328*1328&quot;,
&quot;enable_sync_mode&quot;: false
}&#x27;
# -&gt; {&quot;code&quot;: 200, &quot;data&quot;: {&quot;id&quot;: &quot;&lt;request-id&gt;&quot;, &quot;status&quot;: &quot;created&quot;, ...}}
# 2. poll until status is &quot;completed&quot;
curl &quot;https://api.wavespeed.ai/api/v3/predictions/&lt;request-id&gt;/result&quot; \
-H &quot;Authorization: Bearer $WAVESPEED_API_KEY&quot;
# -&gt; {&quot;code&quot;: 200, &quot;data&quot;: {&quot;status&quot;: &quot;completed&quot;, &quot;outputs&quot;: [&quot;https://...&quot;]}}</code></pre>
<pre id="run-1" role="tabpanel" hidden><code>import os, time, requests
API = &quot;https://api.wavespeed.ai/api/v3&quot;
KEY = os.environ[&quot;WAVESPEED_API_KEY&quot;]
HEADERS = {&quot;Authorization&quot;: f&quot;Bearer {KEY}&quot;}
# submit
res = requests.post(
f&quot;{API}/wavespeed-ai/qwen-image/text-to-image&quot;,
headers={**HEADERS, &quot;Content-Type&quot;: &quot;application/json&quot;},
json={
&quot;prompt&quot;: &quot;A chalkboard outside a coffee shop reading \&quot;Qwen Coffee \u2014 $2 a cup\&quot;, warm morning light, shallow depth of field&quot;,
&quot;size&quot;: &quot;1328*1328&quot;,
&quot;enable_sync_mode&quot;: false
},
timeout=30,
)
res.raise_for_status()
request_id = res.json()[&quot;data&quot;][&quot;id&quot;]
# poll
while True:
data = requests.get(
f&quot;{API}/predictions/{request_id}/result&quot;,
headers=HEADERS,
timeout=30,
).json()[&quot;data&quot;]
if data[&quot;status&quot;] == &quot;completed&quot;:
print(data[&quot;outputs&quot;][0])
break
if data[&quot;status&quot;] == &quot;failed&quot;:
raise RuntimeError(data.get(&quot;error&quot;, &quot;generation failed&quot;))
time.sleep(1.5)</code></pre>
<pre id="run-2" role="tabpanel" hidden><code>const API = &quot;https://api.wavespeed.ai/api/v3&quot;;
const KEY = process.env.WAVESPEED_API_KEY;
const headers = { Authorization: `Bearer ${KEY}` };
// submit
const submit = await fetch(`${API}/wavespeed-ai/qwen-image/text-to-image`, {
method: &quot;POST&quot;,
headers: { ...headers, &quot;Content-Type&quot;: &quot;application/json&quot; },
body: JSON.stringify({
&quot;prompt&quot;: &quot;A chalkboard outside a coffee shop reading \&quot;Qwen Coffee \u2014 $2 a cup\&quot;, warm morning light, shallow depth of field&quot;,
&quot;size&quot;: &quot;1328*1328&quot;,
&quot;enable_sync_mode&quot;: false
}),
});
const { data: { id } } = await submit.json();
// poll
for (;;) {
const res = await fetch(`${API}/predictions/${id}/result`, { headers });
const { data } = await res.json();
if (data.status === &quot;completed&quot;) {
console.log(data.outputs[0]);
break;
}
if (data.status === &quot;failed&quot;) throw new Error(data.error ?? &quot;generation failed&quot;);
await new Promise((r) =&gt; setTimeout(r, 1500));
}</code></pre>
</div>
<div class="callout"><p>Requests are asynchronous: <code>POST</code> returns a request id, then you poll <code>/predictions/&lt;id&gt;/result</code> until <code>status</code> is <code>completed</code>. Set <code>enable_sync_mode: true</code> to have the call block and return outputs directly.</p><p>API keys are created in the <a href="https://wavespeed.ai/dashboard?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=qwen_image" target="_blank" rel="noopener">WaveSpeed dashboard</a>.</p></div>
<div class="btn-row">
<a class="btn" href="https://wavespeed.ai/models/wavespeed-ai/qwen-image/text-to-image?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=qwen_image" target="_blank" rel="noopener">Open on WaveSpeed</a>
<a class="btn secondary" href="https://wavespeed.ai/docs?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=qwen_image" target="_blank" rel="noopener">API reference</a>
</div>
</section>
<section id="local">
<h2>Running locally</h2>
<p class="section-note">Weights are Apache-2.0 and load through <code>diffusers</code>.</p>
<div class="code">
<div class="code-tabs" role="tablist">
<button type="button" role="tab" aria-selected="true" data-panel="local-0">Python</button>
</div>
<pre id="local-0" role="tabpanel"><code>import torch
from diffusers import DiffusionPipeline
pipe = DiffusionPipeline.from_pretrained(
&quot;Qwen/Qwen-Image&quot;,
torch_dtype=torch.bfloat16,
).to(&quot;cuda&quot;)
# The Qwen team recommends appending a quality suffix to the prompt.
magic = {&quot;en&quot;: &quot;Ultra HD, 4K, cinematic composition.&quot;, &quot;zh&quot;: &quot;超清,4K,电影级构图&quot;}
image = pipe(
prompt=&#x27;A chalkboard reading &quot;Qwen Coffee — $2 a cup&quot;. &#x27; + magic[&quot;en&quot;],
negative_prompt=&quot; &quot;,
width=1664,
height=928, # 1:1 1328x1328 · 16:9 1664x928 · 4:3 1472x1140
num_inference_steps=50,
true_cfg_scale=4.0,
generator=torch.Generator(device=&quot;cuda&quot;).manual_seed(42),
).images[0]
image.save(&quot;out.png&quot;)</code></pre>
</div>
</section>
<section id="resources">
<h2>Resources</h2>
<ul class="links">
<li><a href="https://huggingface.co/Qwen/Qwen-Image" target="_blank" rel="noopener"><span>Qwen/Qwen-Image weights</span><span class="host">huggingface.co</span></a></li>
<li><a href="https://github.com/QwenLM/Qwen-Image" target="_blank" rel="noopener"><span>Qwen-Image on GitHub</span><span class="host">github.com</span></a></li>
<li><a href="https://wavespeed.ai/models/wavespeed-ai/qwen-image/text-to-image?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=qwen_image" target="_blank" rel="noopener"><span>Hosted endpoint</span><span class="host">wavespeed.ai</span></a></li>
<li><a href="https://huggingface.co/spaces/wavespeed/qwen-edit-image" target="_blank" rel="noopener"><span>Editing variant</span><span class="host">huggingface.co</span></a></li>
</ul>
</section>
</main>
<footer class="site-footer">
<div class="wrap">
<p>This page is a model reference maintained by WaveSpeed AI. The model itself is developed and released by its respective authors; trademarks belong to them. WaveSpeed AI provides hosted inference for it.</p>
<div class="footer-links">
<a href="https://wavespeed.ai?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=qwen_image" target="_blank" rel="noopener">WaveSpeed AI</a>
<a href="https://wavespeed.ai/docs?utm_source=huggingface&amp;utm_medium=space&amp;utm_campaign=qwen_image" target="_blank" rel="noopener">Docs</a>
<a href="https://huggingface.co/wavespeed" target="_blank" rel="noopener">Hugging Face</a>
</div>
</div>
</footer>
<script src="tabs.js"></script>
</body>
</html>