import gradio as gr from tiny_image_gen.catalog import STYLE_PRESETS, default_prompt, style_choices from tiny_image_gen.service import TinyImageService service = TinyImageService() def update_style(style_name: str): return STYLE_PRESETS[style_name].hint def run_generation(prompt: str, style_name: str, negative_prompt: str, steps: int, guidance: float, seed: int): return service.generate( prompt=prompt, style_name=style_name, negative_prompt=negative_prompt, steps=steps, guidance=guidance, seed=seed, ) with gr.Blocks(title="Tiny Text To Image CPU") as demo: gr.Markdown( """ # Tiny Text To Image CPU Small text-to-image generation running on a free CPU Space. - Model: `segmind/tiny-sd` - Separate Space - CPU-friendly defaults - Single-image generation """ ) with gr.Row(): with gr.Column(): prompt = gr.Textbox( label="Prompt", value=default_prompt(), lines=6, ) style = gr.Dropdown( label="Style", choices=style_choices(), value="Cinematic", ) style_hint = gr.Textbox( label="Style Hint", value=STYLE_PRESETS["Cinematic"].hint, interactive=False, lines=3, ) negative_prompt = gr.Textbox( label="Negative Prompt", value="blurry, low quality, distorted, deformed, extra fingers, watermark, text", lines=3, ) steps = gr.Slider( label="Steps", minimum=4, maximum=20, value=10, step=1, ) guidance = gr.Slider( label="Guidance Scale", minimum=1.0, maximum=10.0, value=6.0, step=0.5, ) seed = gr.Number( label="Seed", value=42, precision=0, ) generate = gr.Button("Generate Image", variant="primary") with gr.Column(): image = gr.Image(label="Image", type="pil") status = gr.Textbox(label="Status", value=service.describe()) info = gr.Textbox( label="Info", value="This Space uses a compact diffusion model, so quality is lower than large GPU models but it fits free CPU hardware better.", lines=6, ) style.change( fn=update_style, inputs=style, outputs=style_hint, ) generate.click( fn=run_generation, inputs=[prompt, style, negative_prompt, steps, guidance, seed], outputs=[image, status, info], ) if __name__ == "__main__": demo.launch()