{"id":2546,"date":"2026-09-23T06:12:09","date_gmt":"2026-09-22T21:12:09","guid":{"rendered":"https:\/\/localmodelwatch.tsuchitsuchi.com\/2026\/09\/23\/supra2-img-lightweight-104m-text-to-image-model\/"},"modified":"2026-10-01T08:13:06","modified_gmt":"2026-09-30T23:13:06","slug":"supra2-img-lightweight-104m-text-to-image-model","status":"publish","type":"post","link":"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/2026\/09\/23\/supra2-img-lightweight-104m-text-to-image-model\/","title":{"rendered":"Supra2-IMG Image Generation Model: Our Generated Images, File List"},"content":{"rendered":"<p><em>Sample outputs are available on the <a href=\"https:\/\/huggingface.co\/SupraLabs\/Supra2-IMG\">model card<\/a>.<\/em><\/p>\n<p><!-- lmw:facts --><\/p>\n<h2>At a Glance<\/h2>\n<div class=\"lmw-table-scroll\" tabindex=\"0\" style=\"overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%;\">\n<table style=\"width:max-content;min-width:100%;border-collapse:collapse;\">\n<thead>\n<tr>\n<th>Item<\/th>\n<th>Value<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Repository<\/td>\n<td><a href=\"https:\/\/huggingface.co\/SupraLabs\/Supra2-IMG\">SupraLabs\/Supra2-IMG<\/a><\/td>\n<\/tr>\n<tr>\n<td>Published<\/td>\n<td>2026-09-21<\/td>\n<\/tr>\n<tr>\n<td>License<\/td>\n<td>apache-2.0<\/td>\n<\/tr>\n<tr>\n<td>Source type<\/td>\n<td>Primary source (the publisher itself)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><em>Values determined by this site&#8217;s code when the information was collected. Dates are JST.<\/em><\/p>\n<p><!-- \/lmw:facts --><\/p>\n<p><!-- lmw:lab-summary --><\/p>\n<p><strong>What we checked ourselves<\/strong><\/p>\n<ul>\n<li>We generated images on our own server and show the first results unedited.<\/li>\n<\/ul>\n<p>Details and conditions are in \u201cOur Own Measurements\u201d below.<\/p>\n<p><!-- \/lmw:lab-summary --><\/p>\n<h2>Overview<\/h2>\n<p>SupraLabs has released &#8220;Supra2-IMG&#8221;, an extremely lightweight text-to-image generation model trained from scratch using high-quality synthetic datasets. This model is designed to provide state-of-the-art (SOTA) image quality for its scale, despite having a very small size of approximately 100M (100 million) parameters.<\/p>\n<h2>Specifications<\/h2>\n<p>The main specifications and architecture of the model are as follows:<\/p>\n<ul>\n<li>Architecture: Diffusion Transformer (DiT) \/ SupraDiT<\/li>\n<li>Parameter count: 104.1M<\/li>\n<li>Input: Text<\/li>\n<li>Output resolution: 256\u00b2<\/li>\n<li>Latent size: 32\u00b2<\/li>\n<li>Patch size: 2<\/li>\n<li>Text encoder: <a href=\"https:\/\/huggingface.co\/google\/flan-t5-base\">Flan-T5-Base<\/a> (frozen)<\/li>\n<li>VAE: <a href=\"https:\/\/huggingface.co\/stabilityai\/sd-vae-ft-mse\">SD-VAE-FT-MSE<\/a><\/li>\n<li>Recommended sampling settings:\n<ul>\n<li>CFG scale: 3.0 &#8211; Steps: 50 &#8211; Seed: 0<\/li>\n<\/ul>\n<\/li>\n<li>Model configuration details:\n<ul>\n<li><code>D_MODEL<\/code>: 576 &#8211; <code>DEPTH<\/code>: 14 &#8211; <code>N_HEADS<\/code>: 9 &#8211; <code>HEAD_DIM<\/code>: 64 &#8211; <code>MLP_RATIO<\/code>: 4.0 &#8211; <code>D_CTX<\/code>: 768 &#8211; <code>VAE_SCALE<\/code>: 0.18215<\/li>\n<\/ul>\n<\/li>\n<li>License: apache-2.0<\/li>\n<\/ul>\n<h2>Performance and Quality<\/h2>\n<p>Supra2-IMG was trained for 10 epochs using the &#8220;LucasFang\/FLUX-Reason-6M&#8221; dataset, which contains 5.6M (5.6 million) images. In the data preparation process, specific priorities are established for prompt selection in order to maximize the quality of the data used for training. Specifically, prompts are selected in the order of <code>caption_composition<\/code>, <code>caption_entity<\/code>, <code>caption_text<\/code>, <code>caption_style<\/code>, and <code>caption_imaginative<\/code>, functioning as a fallback when the preceding prompt is unavailable, thereby strictly managing pre-training to use only the highest quality data.<\/p>\n<p>Regarding the training environment, it is reported that training was completed in a total of 9 hours, including data preparation time, using a single Nvidia H100 SXM 80GB (Runpod Pod). Additionally, 2.5TB of disk space was used for the training.<\/p>\n<p>According to the model card, it achieves SOTA (State-of-the-art) quality at this extremely small parameter count of 104.1M. While specific numerical benchmark comparisons are not provided, it is emphasized that the combination of high-quality synthetic data and an efficient DiT architecture yields high generation capability relative to the model size.<\/p>\n<h2>Strengths and Use Cases<\/h2>\n<p>Supra2-IMG is a text-to-image (T2I) model whose greatest feature is achieving SOTA-class quality relative to its model size with an extremely small parameter count of just 104.1M. This is largely attributed to the rigorous preparation standards applied to the high-quality synthetic dataset containing 5.6M images, &#8220;LucasFang\/FLUX-Reason-6M&#8221;, during the training process.<\/p>\n<p>Specifically, a fallback method is adopted in the data preparation stage where the quality of prompts is evaluated in the order of <code>caption_composition<\/code>, <code>caption_entity<\/code>, <code>caption_text<\/code>, <code>caption_style<\/code>, and <code>caption_imaginative<\/code>, and the next prompt is used only if the quality of the previous stage is not met. Through this process, the model is trained exclusively on the highest quality data, which is expected to result in high-precision image generation even with limited computational resources and memory capacity.<\/p>\n<p>Generation is currently intended for English (en), and plans have been indicated to evolve into a next-generation model such as &#8220;Supra2.5-IMG&#8221; in the future. It will serve as a very strong option for engineers who value local execution and seek high-quality generation while remaining lightweight.<\/p>\n<p><!-- lmw:files --><\/p>\n<h2>Distributed Files<\/h2>\n<p><em>Weight files published in <a href=\"https:\/\/huggingface.co\/SupraLabs\/Supra2-IMG\/tree\/main\">SupraLabs\/Supra2-IMG<\/a>, listed by this site from the Hugging Face API. Sizes are the actual file sizes.<\/em><\/p>\n<div class=\"lmw-table-scroll\" tabindex=\"0\" style=\"overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%;\">\n<table style=\"width:max-content;min-width:100%;border-collapse:collapse;\">\n<thead>\n<tr>\n<th>File<\/th>\n<th>Size<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>model_final_ema.pt<\/code><\/td>\n<td>417MB<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><!-- \/lmw:files --><\/p>\n<h2>How to Get It<\/h2>\n<p>The model can be used via the inference script provided in the Hugging Face repository. The distribution format combines the script and the model weight file (<code>model_final_ema.pt<\/code>).<\/p>\n<p>First, run the following commands to create a working directory and obtain the inference script <code>inference.py<\/code>.<\/p>\n<pre><code class=\"language-bash\"># Create project directory\nmkdir Supra2-IMG\ncd Supra2-IMG\n\n# Download inference script\nwget https:\/\/huggingface.co\/SupraLabs\/Supra2-IMG\/resolve\/main\/inference.py\n<\/code><\/pre>\n<p>Next, you can start image generation using the <code>python inference.py<\/code> command. During execution, in addition to the <code>--prompt<\/code> argument describing what you want to generate, you can specify options such as <code>--seed<\/code> to ensure reproducibility, <code>--cfg<\/code> (recommended value: 3.0) to control generation quality, and <code>--steps<\/code> (recommended value: 50) to determine sampling precision. Additionally, <code>--n<\/code> to indicate the number of images to generate and <code>--out<\/code> to specify the output filename are also available.<\/p>\n<pre><code class=\"language-bash\">python inference.py --prompt &quot;a sea jellyfish floating in the pitch-black ocean depths&quot;  --seed 0  --cfg 3.0  --steps 50  --n 1  --out jellyfish.png\n<\/code><\/pre>\n<p>The execution logs display details such as the device being used, the loaded checkpoint, the model parameter count, the loading status of the text encoder (Flan-T5-Base), and the sampling process (Euler flow).<\/p>\n<p>Note that downloading this model does not require a license agreement (gated access) on Hugging Face.<\/p>\n<p><!-- lmw:runnability --><\/p>\n<h2>Can You Run It Locally?<\/h2>\n<p><strong>License \u2014 <code>apache-2.0<\/code> (Commercial use allowed):<\/strong> Permits commercial use, modification and redistribution. Redistribution requires including the license and stating changes; includes a patent grant.<\/p>\n<p><em>Compiled by this site&#8217;s code from the published formats and the license field. License summaries are not legal advice \u2014 check the publisher&#8217;s original terms before relying on them.<\/em><\/p>\n<p><!-- \/lmw:runnability --><\/p>\n<p><!-- lmw:lab --><\/p>\n<h2>Our Own Measurements<\/h2>\n<p>Values we measured ourselves on our server (no GPU) by actually reading and running this model&#8217;s files \u2014 not figures copied from the model card. How we measure, and the results for every model: <a href=\"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/observations-en\/\">Our Measurements<\/a>.<\/p>\n<h3>Images We Generated<\/h3>\n<p>Generated on our CPU-only server (Neoverse-N1, 3 threads) by running <a href=\"https:\/\/huggingface.co\/SupraLabs\/Supra2-IMG\">SupraLabs\/Supra2-IMG<\/a> (apache-2.0 license) with the publisher&#8217;s inference code (<a href=\"https:\/\/huggingface.co\/SupraLabs\/Supra2-IMG\">Supra2-IMG inference.py<\/a>, commit <code>10dec6e<\/code>), inside an isolated environment with no network access during generation: 256\u00d7256 pixels, 50 steps, guidance scale 3.0, seed 0, fixed prompts without people, logos or text, generated 2026-09-30 (JST). Not edited or selected \u2014 this is the first image for each prompt.<\/p>\n<p><img decoding=\"async\" alt=\"a red bicycle leaning against a white wall on a quiet street, soft morning light, photograph\" src=\"https:\/\/localmodelwatch.tsuchitsuchi.com\/wp-content\/uploads\/2026\/09\/lmw-lab-202609222108_hf_model-SupraLabs-Supra2-IMG-bicycle.webp\" \/><\/p>\n<p>Prompt: \u201ca red bicycle leaning against a white wall on a quiet street, soft morning light, photograph\u201d (46.0 s to generate)<\/p>\n<p><img decoding=\"async\" alt=\"a bowl of ramen with a soft-boiled egg and green onions on a wooden table, top view, photograph\" src=\"https:\/\/localmodelwatch.tsuchitsuchi.com\/wp-content\/uploads\/2026\/09\/lmw-lab-202609222108_hf_model-SupraLabs-Supra2-IMG-ramen.webp\" \/><\/p>\n<p>Prompt: \u201ca bowl of ramen with a soft-boiled egg and green onions on a wooden table, top view, photograph\u201d (46.0 s to generate)<\/p>\n<p><img decoding=\"async\" alt=\"a mountain lake at sunset with the mountains reflected in calm water, oil painting\" src=\"https:\/\/localmodelwatch.tsuchitsuchi.com\/wp-content\/uploads\/2026\/09\/lmw-lab-202609222108_hf_model-SupraLabs-Supra2-IMG-lake.webp\" \/><\/p>\n<p>Prompt: \u201ca mountain lake at sunset with the mountains reflected in calm water, oil painting\u201d (46.0 s to generate)<\/p>\n<h4>Setup and Run Steps (What We Actually Ran)<\/h4>\n<p>These are the exact commands we ran from one working folder on our server (Linux aarch64, Python 3.12.3). Because we run the publisher&#8217;s code in an isolated environment, steps 1 and 2 had network access and step 3 had none. We built the environment in step 1 once and reuse it.<\/p>\n<pre><code class=\"language-bash\"># 1. Build the environment (CPU PyTorch and dependencies)\npython3 -m venv venv\nvenv\/bin\/pip install --index-url https:\/\/download.pytorch.org\/whl\/cpu -c constraints.txt torch\nvenv\/bin\/pip install -c constraints.txt transformers diffusers safetensors huggingface-hub sentencepiece pillow numpy tqdm\n\n# 2. Download the publisher's code and the weights (pinned revisions)\nvenv\/bin\/hf download SupraLabs\/Supra2-IMG --revision 10dec6e4b4b5d1c44fd1d7d3fe5e50137333da5b --include inference.py --include model_final_ema.pt\nvenv\/bin\/hf download google\/flan-t5-base --revision 7bcac572ce56db69c1ea7c8af255c5d7c9672fc2 --include config.json --include generation_config.json --include model.safetensors --include special_tokens_map.json --include spiece.model --include tokenizer.json --include tokenizer_config.json\nvenv\/bin\/hf download stabilityai\/sd-vae-ft-mse --revision 31f26fdeee1355a5c34592e401dd41e45d25a493 --include config.json --include diffusion_pytorch_model.safetensors\n\n# 3. Generate\nvenv\/bin\/python supra2_img.py job.json out\n<\/code><\/pre>\n<p><code>constraints.txt<\/code> pins every dependency to the versions installed in our environment (<code>pip freeze<\/code>, full text below). On a machine with an NVIDIA GPU, replace the <code>--index-url<\/code> of the first <code>pip install<\/code> with the PyTorch index for your CUDA version.<\/p>\n<p>The generation script (<code>supra2_img.py<\/code>, written by us; it calls the publisher&#8217;s inference code in <code>inference.py: SupraDiT<\/code>). Comments are in Japanese as in our repository:<\/p>\n<pre><code class=\"language-python\">&quot;&quot;&quot;\nSupra2-IMG \u3067\u3001\u56fa\u5b9a\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u304b\u3089\u753b\u50cf\u3092\u4f5c\u308b(Local Model Watch \u306e\u5b9f\u6e2c\u3002\u8a18\u4e8b\u306b\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u5168\u6587\u3092\u8f09\u305b\u3066\u3044\u308b)\u3002\n\n    python supra2_img.py &lt;job.json&gt; &lt;\u51fa\u529b\u30d5\u30a9\u30eb\u30c0&gt;\n\n\u914d\u5e03\u5143\u306e inference.py \u304b\u3089 SupraDiT(\u30e2\u30c7\u30eb\u306e\u5b9a\u7fa9)\u3060\u3051\u3092\u8aad\u307f\u8fbc\u307f\u3001\u30b5\u30f3\u30d7\u30ea\u30f3\u30b0(Euler \u6cd5\u30fbCFG)\u306f\n\u914d\u5e03\u5143\u3068\u540c\u3058\u624b\u9806\u3092\u3053\u3053\u306b\u66f8\u304d\u76f4\u3057\u3066\u3044\u308b\u3002\u91cd\u307f\u306f\u5148\u306b hf download \u3067\u540c\u3058\u7248\u3092\u53d6\u3063\u3066\u304a\u304f(\u5f53\u30b5\u30a4\u30c8\u3067\u306f\n\u3053\u306e\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u7121\u3044\u74b0\u5883\u3067\u52d5\u304b\u3059\u306e\u3067\u3001\u3053\u3053\u3067\u306f\u53d6\u308a\u306b\u884c\u304b\u306a\u3044)\u3002\u91cd\u307f\u306f weights_only \u3067\u8aad\u3080\u3002\n\u51fa\u529b\u306f &lt;id&gt;.png \u3068 result.json(\u751f\u6210\u306b\u304b\u304b\u3063\u305f\u79d2\u6570\u306a\u3069)\u3002\n&quot;&quot;&quot;\nimport importlib.util\nimport json\nimport os\nimport sys\nimport time\n\ndef main() -&gt; int:\n    with open(sys.argv[1], encoding=&quot;utf-8&quot;) as f:\n        job = json.load(f)\n    out_dir = sys.argv[2]\n    os.makedirs(out_dir, exist_ok=True)\n    import numpy as np\n    import torch\n    from diffusers import AutoencoderKL\n    from huggingface_hub import hf_hub_download\n    from PIL import Image\n    from transformers import AutoTokenizer, T5EncoderModel\n\n    torch.set_num_threads(int(job[&quot;threads&quot;]))\n    run = job[&quot;runs&quot;][0]\n    model = run[&quot;model&quot;]\n    extra = {d[&quot;repo&quot;]: d for d in job[&quot;downloads&quot;]}\n    t5 = extra[&quot;google\/flan-t5-base&quot;]\n    vae_repo = extra[&quot;stabilityai\/sd-vae-ft-mse&quot;]\n\n    spec = importlib.util.spec_from_file_location(\n        &quot;supra_inference&quot;, hf_hub_download(model[&quot;repo&quot;], &quot;inference.py&quot;, revision=model[&quot;revision&quot;]))\n    supra = importlib.util.module_from_spec(spec)\n    spec.loader.exec_module(supra)\n\n    started = time.time()\n    net = supra.SupraDiT().eval()\n    state = torch.load(hf_hub_download(model[&quot;repo&quot;], &quot;model_final_ema.pt&quot;, revision=model[&quot;revision&quot;]),\n                       map_location=&quot;cpu&quot;, weights_only=True)\n    cfg_state = state.get(&quot;config&quot;, {}) if isinstance(state, dict) else {}\n    weights = state[&quot;ema&quot;] if &quot;ema&quot; in state else state.get(&quot;model&quot;, state)\n    net.load_state_dict(weights, strict=True)\n    ctx_len = int(cfg_state.get(&quot;ctx_len&quot;, supra.MAX_CTX_LEN))\n    tokenizer = AutoTokenizer.from_pretrained(t5[&quot;repo&quot;], revision=t5[&quot;revision&quot;])\n    text_model = T5EncoderModel.from_pretrained(t5[&quot;repo&quot;], revision=t5[&quot;revision&quot;]).eval()\n    vae = AutoencoderKL.from_pretrained(vae_repo[&quot;repo&quot;], revision=vae_repo[&quot;revision&quot;]).eval()\n    load_sec = round(time.time() - started, 1)\n\n    steps = int(job[&quot;steps&quot;])\n    cfg = float(job[&quot;cfg&quot;])\n    items = []\n    with torch.no_grad():\n        for item in run[&quot;items&quot;]:\n            t = time.time()\n            tok = tokenizer([item[&quot;prompt&quot;]], padding=&quot;max_length&quot;, truncation=True, max_length=ctx_len,\n                            return_tensors=&quot;pt&quot;)\n            ctx = text_model(**tok).last_hidden_state.float()\n            mask = tok[&quot;attention_mask&quot;].float()\n            if &quot;uncond_text&quot; in cfg_state:\n                u_ctx = cfg_state[&quot;uncond_text&quot;].float().unsqueeze(0)\n                u_mask = cfg_state[&quot;uncond_mask&quot;].float().unsqueeze(0)\n            else:\n                u_tok = tokenizer([&quot;&quot;], padding=&quot;max_length&quot;, truncation=True, max_length=ctx_len,\n                                  return_tensors=&quot;pt&quot;)\n                u_ctx = text_model(**u_tok).last_hidden_state.float()\n                u_mask = u_tok[&quot;attention_mask&quot;].float()\n            ctx_all, mask_all = torch.cat([ctx, u_ctx], 0), torch.cat([mask, u_mask], 0)\n            torch.manual_seed(int(job[&quot;seed&quot;]))\n            z = torch.randn(1, supra.LATENT_CH, supra.LATENT_SIZE, supra.LATENT_SIZE)\n            dt = 1.0 \/ steps\n            for i in range(steps):\n                tt = torch.full((1,), i * dt)\n                v_cond, v_uncond = net(torch.cat([z, z], 0), torch.cat([tt, tt], 0), ctx_all, mask_all).float().chunk(2, 0)\n                z = z + dt * (v_uncond + cfg * (v_cond - v_uncond))\n            image = vae.decode(z \/ supra.VAE_SCALE).sample\n            image = ((image.clamp(-1, 1) + 1) \/ 2 * 255).round().to(torch.uint8)[0].permute(1, 2, 0).numpy()\n            Image.fromarray(np.ascontiguousarray(image)).save(os.path.join(out_dir, item[&quot;id&quot;] + &quot;.png&quot;))\n            items.append({&quot;id&quot;: item[&quot;id&quot;], &quot;seconds&quot;: round(time.time() - t)})\n            print(f&quot;[generate] {item['id']}: {items[-1]['seconds']} s&quot;, flush=True)\n    with open(os.path.join(out_dir, &quot;result.json&quot;), &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:\n        json.dump({&quot;items&quot;: items, &quot;load_sec&quot;: load_sec, &quot;torch&quot;: torch.__version__}, f)\n    return 0\n\nif __name__ == &quot;__main__&quot;:\n    sys.exit(main())\n<\/code><\/pre>\n<p>The values in <code>job.json<\/code> that the script reads (as used):<\/p>\n<pre><code class=\"language-json\">{\n  &quot;runs&quot;: [\n    {\n      &quot;model&quot;: {\n        &quot;repo&quot;: &quot;SupraLabs\/Supra2-IMG&quot;,\n        &quot;revision&quot;: &quot;10dec6e4b4b5d1c44fd1d7d3fe5e50137333da5b&quot;\n      },\n      &quot;items&quot;: [\n        {\n          &quot;id&quot;: &quot;bicycle&quot;,\n          &quot;prompt&quot;: &quot;a red bicycle leaning against a white wall on a quiet street, soft morning light, photograph&quot;\n        },\n        {\n          &quot;id&quot;: &quot;ramen&quot;,\n          &quot;prompt&quot;: &quot;a bowl of ramen with a soft-boiled egg and green onions on a wooden table, top view, photograph&quot;\n        },\n        {\n          &quot;id&quot;: &quot;lake&quot;,\n          &quot;prompt&quot;: &quot;a mountain lake at sunset with the mountains reflected in calm water, oil painting&quot;\n        }\n      ]\n    }\n  ],\n  &quot;downloads&quot;: [\n    {\n      &quot;repo&quot;: &quot;SupraLabs\/Supra2-IMG&quot;,\n      &quot;revision&quot;: &quot;10dec6e4b4b5d1c44fd1d7d3fe5e50137333da5b&quot;,\n      &quot;files&quot;: [\n        &quot;inference.py&quot;,\n        &quot;model_final_ema.pt&quot;\n      ]\n    },\n    {\n      &quot;repo&quot;: &quot;google\/flan-t5-base&quot;,\n      &quot;revision&quot;: &quot;7bcac572ce56db69c1ea7c8af255c5d7c9672fc2&quot;,\n      &quot;files&quot;: [\n        &quot;config.json&quot;,\n        &quot;generation_config.json&quot;,\n        &quot;model.safetensors&quot;,\n        &quot;special_tokens_map.json&quot;,\n        &quot;spiece.model&quot;,\n        &quot;tokenizer.json&quot;,\n        &quot;tokenizer_config.json&quot;\n      ]\n    },\n    {\n      &quot;repo&quot;: &quot;stabilityai\/sd-vae-ft-mse&quot;,\n      &quot;revision&quot;: &quot;31f26fdeee1355a5c34592e401dd41e45d25a493&quot;,\n      &quot;files&quot;: [\n        &quot;config.json&quot;,\n        &quot;diffusion_pytorch_model.safetensors&quot;\n      ]\n    }\n  ],\n  &quot;seed&quot;: 0,\n  &quot;steps&quot;: 50,\n  &quot;cfg&quot;: 3.0,\n  &quot;threads&quot;: 3\n}\n<\/code><\/pre>\n<details>\n<summary>constraints.txt (full text)<\/summary>\n<pre><code>annotated-doc==0.0.5 anyio==4.15.1 certifi==2026.7.22 charset-normalizer==3.5.1 click==8.5.0 diffusers==0.40.0 filelock==3.32.3 fsspec==2026.7.0 h11==0.16.0 hf-xet==1.6.0 httpcore==1.0.9 httpx==0.28.1 huggingface_hub==1.33.0 idna==3.20 importlib_metadata==9.0.1 Jinja2==3.1.6 markdown-it-py==4.2.0 MarkupSafe==3.0.3 mdurl==0.1.2 mpmath==1.3.0 networkx==3.6.1 numpy==2.5.3 packaging==26.3 pillow==12.3.0 Pygments==2.21.0 PyYAML==6.0.3 regex==2026.9.29 requests==2.34.2 rich==15.0.0 safetensors==0.8.0 sentencepiece==0.2.2 setuptools==78.1.0 shellingham==1.5.4 sympy==1.14.0 tokenizers==0.23.2 torch==2.14.0+cpu tqdm==4.70.1 transformers==5.17.0 typer==0.27.2 typing_extensions==4.16.0 urllib3==2.8.0 zipp==4.1.0<\/code><\/pre>\n<\/details>\n<p><!-- \/lmw:lab --><\/p>\n<p><!-- lmw:same-task --><\/p>\n<h2>Other Models for the Same Task<\/h2>\n<p><em>Recent image generation models covered by Local Model Watch, newest first. Grouped by the task each publisher declares on Hugging Face (pipeline_tag); the smallest VRAM tier is this site&#8217;s estimate.<\/em><\/p>\n<ul>\n<li><a href=\"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/2026\/09\/30\/qi-2-1-anyangle-camera-control-lora\/\">QI_2.1_AnyAngle Camera Angle Control LoRA: 48GB+ VRAM, File List<\/a> (7.1B)<\/li>\n<li><a href=\"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/2026\/09\/23\/qwen-image-2-1-viggle-turbo-v0-1-preview\/\">Qwen-Image-2.1-viggle-turbo Image Generation Model: 48GB+ VRAM<\/a> (7.1B)<\/li>\n<li><a href=\"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/2026\/09\/20\/qwen-image-2-1-released\/\">Qwen-Image-2.1 Released: Open-Weight Image Gen &amp; Editing<\/a><\/li>\n<\/ul>\n<p><a href=\"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/models-by-task-en\/#task-image\">See all image generation models \u2192<\/a><\/p>\n<p><!-- \/lmw:same-task --><\/p>\n<h2>Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/huggingface.co\/SupraLabs\/Supra2-IMG\">https:\/\/huggingface.co\/SupraLabs\/Supra2-IMG<\/a><\/li>\n<\/ul>\n<p><!-- lmw:updates --><\/p>\n<h2>Update History<\/h2>\n<ul>\n<li>2026-09-24: Rebuilt the article: Added a &#8220;can you run it locally?&#8221; verdict from the distribution formats, converted builds, engine registries, license terms and measured compression<\/li>\n<li>2026-09-25: Changed the title to show what the article covers (VRAM requirements, file list, etc.).<\/li>\n<li>2026-09-30: Added our own measurements: images we generated.<\/li>\n<li>2026-09-30: Changed the title to show what the article covers (VRAM requirements, file list, etc.).<\/li>\n<\/ul>\n<p><!-- \/lmw:updates --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Discover Supra2-IMG, a lightweight 104M parameter text-to-image model trained from scratch on high-quality synthetic data.<\/p>\n","protected":false},"author":1,"featured_media":7684,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[203],"tags":[1833,2039,2041,2043,1547,753],"class_list":["post-2546","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-image-video-and-audio","tag-dit-en","tag-supra2-img-en","tag-supralabs-en","tag-text-to-image-en","tag-verified","tag--en"],"lang":"en","translations":{"en":2546,"ja":2544},"_links":{"self":[{"href":"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/wp-json\/wp\/v2\/posts\/2546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/wp-json\/wp\/v2\/comments?post=2546"}],"version-history":[{"count":24,"href":"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/wp-json\/wp\/v2\/posts\/2546\/revisions"}],"predecessor-version":[{"id":8513,"href":"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/wp-json\/wp\/v2\/posts\/2546\/revisions\/8513"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/wp-json\/wp\/v2\/media\/7684"}],"wp:attachment":[{"href":"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/wp-json\/wp\/v2\/media?parent=2546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/wp-json\/wp\/v2\/categories?post=2546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/localmodelwatch.tsuchitsuchi.com\/en\/wp-json\/wp\/v2\/tags?post=2546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}