huaban / app.py
Ivjnus's picture
Upload app.py with huggingface_hub
97a71bd verified
Raw History Blame Contribute Delete
2.63 kB
import os
# 防御:某些容器 no_proxy 里有 [::1] 这种括号 IPv6,httpx 解析直接炸
for _v in ("no_proxy", "NO_PROXY"):
_val = os.environ.get(_v, "")
if "[" in _val:
os.environ[_v] = ",".join(p for p in _val.split(",") if "[" not in p)
import spaces
import torch
import gradio as gr
from diffusers import QwenImage21Pipeline
# Qwen-Image-2.1:7B 视觉生成 + 大文本编码器,bf16 约 32GB,48GB ZeroGPU 可跑
pipe = QwenImage21Pipeline.from_pretrained(
"Qwen/Qwen-Image-2.1",
torch_dtype=torch.bfloat16,
)
pipe.to("cuda")
ASPECT_RATIOS = {
"1:1": (1024, 1024),
"4:3": (1200, 896),
"3:4": (896, 1200),
"3:2": (1264, 848),
"2:3": (848, 1264),
"16:9": (1376, 768),
"9:16": (768, 1376),
}
@spaces.GPU(duration=120)
def generate(prompt, ref_image, aspect_ratio, steps, seed):
width, height = ASPECT_RATIOS[aspect_ratio]
generator = None
if seed is not None and int(seed) >= 0:
generator = torch.Generator(device="cuda").manual_seed(int(seed))
kwargs = dict(
prompt=prompt,
num_inference_steps=int(steps),
generator=generator,
)
if ref_image is not None:
# 有参考图:按提示词改图,尺寸跟随原图
kwargs["image"] = ref_image
else:
# 纯文生图
kwargs["width"] = width
kwargs["height"] = height
image = pipe(**kwargs).images[0]
return image
with gr.Blocks(title="主人 Qwen-Image-2.1 画坊") as demo:
gr.Markdown(
"# 🎨 主人 Qwen-Image-2.1 画坊\n"
"Qwen-Image-2.1 开源权重(7B),中文提示词、中文文字渲染效果极佳。\n"
"跑在 Hugging Face ZeroGPU 免费档上。"
)
prompt = gr.Textbox(label="画面描述(中文英文都行)",
placeholder="月下喝茶的汉服小猫,水墨画风\n(上传参考图后,这里写改图指令,如:把背景换成雪山)",
lines=3)
ref_image = gr.Image(label="参考图(可选,不传就是纯文生图;传了就按上面的描述改这张图)",
type="pil")
with gr.Row():
aspect = gr.Dropdown(list(ASPECT_RATIOS.keys()), value="1:1", label="画幅")
steps = gr.Slider(10, 50, value=30, step=1, label="步数(越多越细,也越慢)")
seed = gr.Number(value=-1, label="种子(-1=随机)", precision=0)
btn = gr.Button("画!", variant="primary")
out = gr.Image(label="成品")
btn.click(generate, inputs=[prompt, ref_image, aspect, steps, seed], outputs=out)
demo.launch()