{"id":13455982,"url":"https://github.com/gojasper/flash-diffusion","last_synced_at":"2025-03-24T09:31:16.010Z","repository":{"id":242820457,"uuid":"810375738","full_name":"gojasper/flash-diffusion","owner":"gojasper","description":"⚡ Flash Diffusion ⚡: Accelerating Any Conditional Diffusion Model for Few Steps Image Generation (AAAI 2025 Oral)","archived":false,"fork":false,"pushed_at":"2025-03-11T09:57:38.000Z","size":52852,"stargazers_count":553,"open_issues_count":15,"forks_count":40,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-03-11T10:43:40.526Z","etag":null,"topics":["diffusion-models","distillation","dit","inpainting","sdxl","super-resolution","text-to-image"],"latest_commit_sha":null,"homepage":"https://gojasper.github.io/flash-diffusion-project/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gojasper.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-04T15:14:40.000Z","updated_at":"2025-03-11T09:57:42.000Z","dependencies_parsed_at":"2024-10-28T23:31:16.344Z","dependency_job_id":"4874bae3-64be-43ac-a8b0-f5f3c076e591","html_url":"https://github.com/gojasper/flash-diffusion","commit_stats":null,"previous_names":["gojasper/flash-diffusion"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gojasper%2Fflash-diffusion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gojasper%2Fflash-diffusion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gojasper%2Fflash-diffusion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gojasper%2Fflash-diffusion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gojasper","download_url":"https://codeload.github.com/gojasper/flash-diffusion/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245243230,"owners_count":20583588,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["diffusion-models","distillation","dit","inpainting","sdxl","super-resolution","text-to-image"],"created_at":"2024-07-31T08:01:14.381Z","updated_at":"2025-03-24T09:31:16.002Z","avatar_url":"https://github.com/gojasper.png","language":"Python","funding_links":[],"categories":["Python","Accelerate"],"sub_categories":[],"readme":"# ⚡ Flash Diffusion ⚡ (AAAI 2025 Oral)\n\nThis repository is the official implementation of the paper [Flash Diffusion: Accelerating Any Conditional Diffusion Model for Few Steps Image Generation](http://arxiv.org/abs/2406.02347).\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"http://arxiv.org/abs/2406.02347\"\u003e\n\t    \u003cimg src='https://img.shields.io/badge/Paper-2406.02347-green' /\u003e\n\t\u003c/a\u003e\n    \u003ca href=\"https://gojasper.github.io/flash-diffusion-project/\"\u003e\n\t    \u003cimg src='https://img.shields.io/badge/Project-page-blue' /\u003e\n\t\u003c/a\u003e\n    \u003ca href='https://creativecommons.org/licenses/by-nd/4.0/legalcode'\u003e\n\t    \u003cimg src=\"https://img.shields.io/badge/Licence-CC.BY.NC-purple\" /\u003e\n\t\u003c/a\u003e\n    \u003cbr\u003e\n    \u003ca href=\"https://huggingface.co/spaces/jasperai/flash-diffusion\"\u003e\n\t    \u003cimg src='https://img.shields.io/badge/%F0%9F%A4%97%20Demo-FlashPixart-orange' /\u003e\n\t\u003c/a\u003e\n    \u003ca href=\"https://huggingface.co/spaces/jasperai/flash-sd3\"\u003e\n\t    \u003cimg src='https://img.shields.io/badge/%F0%9F%A4%97%20Demo-FlashSD3-orange' /\u003e\n\t\u003c/a\u003e\n    \u003ca href=\"https://huggingface.co/spaces/jasperai/flash-lora\"\u003e\n\t    \u003cimg src='https://img.shields.io/badge/%F0%9F%A4%97%20Demo-FlashLoRAs-orange' /\u003e\n\t\u003c/a\u003e\n        \u003cbr\u003e\n    \u003ca href=\"https://huggingface.co/jasperai/flash-sd\"\u003e\n\t    \u003cimg src='https://img.shields.io/badge/%F0%9F%A4%97%20Ckpt-FlashSD-yellow' /\u003e\n\t\u003c/a\u003e\n\t\u003ca href=\"https://huggingface.co/jasperai/flash-sdxl\"\u003e\n\t    \u003cimg src='https://img.shields.io/badge/%F0%9F%A4%97%20Ckpt-FlashSDXL-yellow' /\u003e\n\t\u003c/a\u003e\n\t\u003ca href=\"https://huggingface.co/jasperai/flash-pixart\"\u003e\n\t    \u003cimg src='https://img.shields.io/badge/%F0%9F%A4%97%20Ckpt-FlashPixart-yellow' /\u003e\n\t\u003c/a\u003e\n    \t\u003ca href=\"https://huggingface.co/jasperai/flash-sd3\"\u003e\n\t    \u003cimg src='https://img.shields.io/badge/%F0%9F%A4%97%20Ckpt-FlashSD3-yellow' /\u003e\n\t\u003c/a\u003e\n    \t\u003c/a\u003e\n    \t\u003ca href=\"https://huggingface.co/jasperai/flash-sdxl/tree/main/comfy\"\u003e\n\t    \u003cimg src='https://img.shields.io/badge/Comfy-FlashSDXL-black' /\u003e\n\t\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cfigure\u003e\n\t\u003cp align=\"center\"\u003e\n        \t\u003cimg style=\"width:600px;\" src=\"assets/flash_grid.jpg\"\u003e\n\t\t\t\u003cfigcaption\u003e\n\t\t\t\t\u003cp align=\"center\"\u003e\n\t\t\t\t\t\u003cb\u003eImages generated using 4 NFEs\u003c/b\u003e\n\t\t\t \t\u003c/p\u003e\n\t\t\t\u003c/figcaption\u003e\n\t \u003c/p\u003e\n\u003c/figure\u003e\n\n\n\nIn this paper, we propose an efficient, fast, versatile and LoRA-compatible distillation method to accelerate the generation of pre-trained diffusion models: *Flash Diffusion*. The method reaches state-of-the-art performances in terms of FID and CLIP-Score for few steps image generation on the COCO 2014 and COCO 2017 datasets, while requiring only **several GPU hours of training** and fewer trainable parameters than existing methods. In addition to its efficiency, the versatility of the method is also exposed across several tasks such as text-to-image, inpainting, face-swapping, super-resolution and using different diffusion models backbones either using a UNet-based denoisers (SD1.5, SDXL) or DiT (Pixart-α), as well as adapters. In all cases, the method allowed to reduce drastically the number of sampling steps while maintaining very high-quality image generation.\n\n## Quick access\n- [Method overview](#method)\n- [Results overview](#results)\n- [Installation 🛠️](#setup)\n- [Text2Image model distillation](#distilling-existing-t2i-models)\n- [Distilling a custom model 🚀](#example-of-a-distillation-training-with-a-custom-conditional-diffusion-model)\n- [Inference with 🤗 Hugging Face pipelines](#inference-with-a-huggingface-pipeline-)\n- [Using Flash with ComfyUI](#using-flash-in-comfyui)\n- [Flash for training-free LoRAs acceleration 🎨](#combining-flash-diffusion-with-existing-loras-)\n- [Citing this repository](#citation)\n\n## Method\n\nOur method aims to create a fast, reliable, and adaptable approach for various uses. We propose to train a student model to predict in a single step a denoised multiple-step teacher prediction of a corrupted input sample. Additionally, we sample timesteps from an adaptable distribution that shifts during training to help the student model target specific timesteps.\n\n\u003cp align=\"center\"\u003e\n        \u003cimg style=\"width:600px;\" src=\"assets/diagram_full.jpg\"\u003e\n\u003c/p\u003e\n\n\n## Results\n\n\u003cit\u003eFlash Diffusion\u003c/it\u003e is compatible with various backbones such as\n- [Flash Stable Diffusion 3](https://huggingface.co/jasperai/flash-sd3), distilled from a [Stable Diffusion 3 teacher](https://huggingface.co/stabilityai/stable-diffusion-3-medium)\n- [Flash SDXL](https://huggingface.co/jasperai/flash-sdxl), distilled from a [SDXL teacher](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0)\n- [Flash Pixart (DiT)](https://huggingface.co/jasperai/flash-pixart), distilled from a [Pixart-α teacher](https://huggingface.co/PixArt-alpha/PixArt-XL-2-1024-MS)\n- [Flash SD](https://huggingface.co/jasperai/flash-sd), distilled from a [SD1.5 teacher](https://huggingface.co/runwayml/stable-diffusion-v1-5)\n\nIt can also be used to accelerate existing LoRAs in a **training-free** manner. See this [section](#combining-flash-diffusion-with-existing-loras-) to know more.\n\n### Varying backbones for *Text-to-image*\n#### Flash Stable Diffusion 3 (MMDiT)\n\u003cfigure\u003e\n\t\u003cp align=\"center\"\u003e\n        \t\u003cimg style=\"width:600px;\" src=\"assets/flash_sd3.jpg\"\u003e\n\t\t\t\u003cfigcaption\u003e\n\t\t\t\t\u003cp align=\"center\"\u003e\n\t\t\t\t\t\u003cb\u003eImages generated using 4 NFEs\u003c/b\u003e\n\t\t\t \t\u003c/p\u003e\n\t\t\t\u003c/figcaption\u003e\n\t \u003c/p\u003e\n\u003c/figure\u003e\n\n#### Flash SDXL (UNet)\n\u003cfigure\u003e\n\t\u003cp align=\"center\"\u003e\n        \t\u003cimg style=\"width:600px;\" src=\"assets/flash_sdxl_grid.jpg\"\u003e\n\t\t\t\u003cfigcaption\u003e\n\t\t\t\t\u003cp align=\"center\"\u003e\n\t\t\t\t\t\u003cb\u003eImages generated using 4 NFEs\u003c/b\u003e\n\t\t\t \t\u003c/p\u003e\n\t\t\t\u003c/figcaption\u003e\n\t \u003c/p\u003e\n\u003c/figure\u003e\n\n#### Flash Pixart (DiT)\n\u003cfigure\u003e\n\t\u003cp align=\"center\"\u003e\n        \t\u003cimg style=\"width:600px;\" src=\"assets/flash_pixart_grid.jpg\"\u003e\n\t\t\t\u003cfigcaption\u003e\n\t\t\t\t\u003cp align=\"center\"\u003e\n\t\t\t\t\t\u003cb\u003eImages generated using 4 NFEs\u003c/b\u003e\n\t\t\t \t\u003c/p\u003e\n\t\t\t\u003c/figcaption\u003e\n\t \u003c/p\u003e\n\u003c/figure\u003e\n\n#### Flash SD\n\u003cfigure\u003e\n\t\u003cp align=\"center\"\u003e\n        \t\u003cimg style=\"width:600px;\" src=\"assets/flash_sd_grid.jpg\"\u003e\n\t\t\t\u003cfigcaption\u003e\n\t\t\t\t\u003cp align=\"center\"\u003e\n\t\t\t\t\t\u003cb\u003eImages generated using 4 NFEs\u003c/b\u003e\n\t\t\t \t\u003c/p\u003e\n\t\t\t\u003c/figcaption\u003e\n\t \u003c/p\u003e\n\u003c/figure\u003e\n\u003c/details\u003e\n\n### Varying Use-cases\n\u003cdetails\u003e\n    \u003csummary\u003e\u003cb\u003eImage-inpainting\u003c/b\u003e\u003c/summary\u003e\n    \u003cp align=\"center\"\u003e\n            \u003cimg style=\"width:600px;\" src=\"assets/inpainting_grid.png\"\u003e\n    \u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n    \u003csummary\u003e\u003cb\u003eImage-upscaling\u003c/b\u003e\u003c/summary\u003e\n    \u003cp align=\"center\"\u003e\n            \u003cimg style=\"width:600px;\" src=\"assets/upscaler_grid.png\"\u003e\n    \u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n    \u003csummary\u003e\u003cb\u003eFace-swapping\u003c/b\u003e\u003c/summary\u003e\n    \u003cp align=\"center\"\u003e\n            \u003cimg style=\"width:600px;\" src=\"assets/swap_grid.png\"\u003e\n    \u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n    \u003csummary\u003e\u003cb\u003eT2I-Adapters\u003c/b\u003e\u003c/summary\u003e\n    \u003cp align=\"center\"\u003e\n            \u003cimg style=\"width:600px;\" src=\"assets/adapters_grid.jpg\"\u003e\n    \u003c/p\u003e\n\u003c/details\u003e\n\n### Training Free LoRA Acceleration\n#### SDXL LoRAs\n\u003cfigure\u003e\n\t\u003cp align=\"center\"\u003e\n        \t\u003cimg style=\"width:600px;\" src=\"assets/flash_loras.jpg\"\u003e\n\t\t\t\u003cfigcaption\u003e\n\t\t\t\t\u003cp align=\"center\"\u003e\n\t\t\t\t\t\u003cb\u003eImages generated using 4 NFEs\u003c/b\u003e\n\t\t\t \t\u003c/p\u003e\n\t\t\t\u003c/figcaption\u003e\n\t \u003c/p\u003e\n\u003c/figure\u003e\n\u003c/details\u003e\n\n\n## Setup\nTo be up and running, you need first to create a virtual env with at least `python3.10` installed and activate it\n\n### With `venv`\n\n```bash\npython3.10 -m venv envs/flash_diffusion\nsource envs/flash_diffusion/bin/activate\n```\n\n### With `conda`\n\n```bash\nconda create -n flash_diffusion python=3.10\nconda activate flash_diffusion\n```\n\nThen install the required dependencies (if on GPU) and the repo in editable mode\n\n```bash\npip install --upgrade pip\npip install -r requirements.txt\npip install -e .\n```\n\n## Distilling existing T2I models\nThe main scripts to reproduce the main experiments of the paper are located in the `examples`. We provide 4 diffirent scripts:\n- `train_flash_sd3.py`: Distils [SD3 model](https://huggingface.co/stabilityai/stable-diffusion-3-medium)\n- `train_flash_sdxl.py`: Distils [SDXL model](https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0)\n- `train_flash_pixart`: Distils [Pixart-α model](https://huggingface.co/PixArt-alpha/PixArt-XL-2-1024-MS)\n- `train_flash_canny_adapter.py`: Distils a [T2I Canny Adapter](https://huggingface.co/TencentARC/t2i-adapter-canny-sdxl-1.0?library=true)\n- `train_flash_sd.py`: Distils [SD1.5 model](https://huggingface.co/runwayml/stable-diffusion-v1-5)\n\nIn `examples\\configs`, you will find the configuration `yaml` associated to each script. The only thing you need is to amend the `SHARDS_PATH_OR_URLS` section of the `yaml` so the model is trained on your own data. Please note that this package uses [`webdataset`](https://github.com/webdataset/webdataset) to handle the datastream and so the urls you use should be fomatted according to the  [`webdataset format`](https://github.com/webdataset/webdataset?tab=readme-ov-file#the-webdataset-format). In particular, for those 4 examples, each sample needs to be composed of a `jpg` file containing the image and a `json` file containing the caption under the key `caption` and the image aesthetics score `aesthetic_score`:\n\n```\nsample = {\n    \"jpg\": dummy_image,\n    \"json\": {\n        \"caption\": \"dummy caption\",\n        \"aesthetic_score\": 6.0\n    }\n}\n```\n\n\nThe scripts can then be launched by simply runing\n\n```bash\n# Set the number of gpus \u0026 nodes you want to use\nexport SLURM_NPROCS=1\nexport SLURM_NNODES=1\n\n# Distills SD1.5\npython3.10 examples/train_flash_sd.py\n\n# Distills SDXL1.0\npython3.10 examples/train_flash_sdxl.py\n\n# Distills Pixart-α\npython3.10 examples/train_flash_pixart.py\n\n# Distills T2I Canny adapter\npython3.10 examples/train_flash_canny_adapter.py\n```\n\n\n## Example of a distillation training with a custom conditional diffusion model\n\nThis package is also intended to support custom model distillation. \n\n```python\nfrom copy import deepcopy\nfrom flash.models.unets import DiffusersUNet2DCondWrapper\nfrom flash.models.vae import AutoencoderKLDiffusers, AutoencoderKLDiffusersConfig\nfrom flash.models.embedders import (\n    ClipEmbedder,\n    ClipEmbedderConfig,\n    ClipEmbedderWithProjection,\n    ConditionerWrapper,\n)\n\n# Create the VAE\nvae_config = AutoencoderKLDiffusersConfig(\n\t\"stabilityai/sdxl-vae\" # VAE for HF Hub\n) \nvae = AutoencoderKLDiffusers(config=vae_config)\n\n## Create the Conditioners ##\n# A Clip conditioner returning 2 types of conditioning\nembedder_1_config = ClipEmbedderConfig(\n    version=\"stabilityai/stable-diffusion-xl-base-1.0\", # from HF Hub\n    text_embedder_subfolder=\"text_encoder_2\",\n    tokenizer_subfolder=\"tokenizer_2\",\n    input_key=\"text\",\n    always_return_pooled=True, # Return a 1-dimensional tensor\n)\nembeddder_1 = ClipEmbedder(config=embedder_1_config)\n\n# Embedder acting on a lr image injected in the UNET via concatenation\nembedder_2_config = TorchNNEmbedderConfig(\n    nn_modules=[\"torch.nn.Conv2d\"],\n    nn_modules_kwargs=[\n       dict(\n          in_channels=3,\n\t  out_channels=6,\n          kernel_size=3,\n          padding=1,\n          stride=2,\n       ),\n    ],\n    input_key=\"downsampled_image\",\n    unconditional_conditioning_rate=request.param,\n)\nembedder_2 = TorchNNEmbedder(config=embedder_2_config)\n\nconditioner_wrapper = ConditionerWrapper(\n    conditioners=[embedder1, embedder2]\n)\n\n# Create the Teacher denoiser\nunet = DiffusersUNet2DCondWrapper(\n    in_channels=4 + 6,  # VAE channels + concat conditioning\n    out_channels=4,  # VAE channels\n    cross_attention_dim=1280,  # cross-attention conditioning\n    projection_class_embeddings_input_dim=1280,  # add conditioning\n    class_embed_type=\"projection\",\n)\n\n# Load the teacher weights\n...\n\n# Create the student denoiser\nstudent_denoiser = deepcopy(teacher_denoiser)\n```\n\n## Inference with a Hugging Face pipeline 🤗\n\n```python\nimport torch\nfrom diffusers import PixArtAlphaPipeline, Transformer2DModel, LCMScheduler\nfrom peft import PeftModel\n\n# Load LoRA\ntransformer = Transformer2DModel.from_pretrained(\n    \"PixArt-alpha/PixArt-XL-2-1024-MS\",\n    subfolder=\"transformer\",\n    torch_dtype=torch.float16\n)\ntransformer = PeftModel.from_pretrained(\n    transformer,\n    \"jasperai/flash-pixart\"\n)\n\n# Pipeline\npipe = PixArtAlphaPipeline.from_pretrained(\n    \"PixArt-alpha/PixArt-XL-2-1024-MS\",\n    transformer=transformer,\n    torch_dtype=torch.float16\n)\n\n# Scheduler\npipe.scheduler = LCMScheduler.from_pretrained(\n    \"PixArt-alpha/PixArt-XL-2-1024-MS\",\n    subfolder=\"scheduler\",\n    timestep_spacing=\"trailing\",\n)\n\npipe.to(\"cuda\")\n\nprompt = \"A raccoon reading a book in a lush forest.\"\n\nimage = pipe(prompt, num_inference_steps=4, guidance_scale=0).images[0]\n```\n\n## Using Flash in ComfyUI\n\nTo use FlashSDXL locally using Comfyui you need to :\n\n1) Make sure your comfyUI install is up to date\n2) Download the checkpoint from huggingface. In case you wonder how, go to \"Files and Version\" go to [`comfy`](https://huggingface.co/jasperai/flash-sdxl/tree/main/comfy) folder and hit the download button next to the `FlashSDXL.safetensors`\n3) Move the new checkpoint file to your local `comfyUI/models/loras/`. folder\nUse it as a LoRA on top of `sd_xl_base_1.0_0.9vae.safetensors`, a simple comfyui workflow.json is provided in this repo inc `examples/comfy`\n\n*Disclaimer : Model has been trained to work with a cfg scale of 1 and a lcm scheduler but parameters can be tweaked a bit.*\n\n\n## Combining Flash Diffusion with Existing LoRAs 🎨\n\nFlash Diffusion models can also be combined with existing LoRAs to unlock few steps generation in a **training free** manner. They can be integrated straight to Hugging Face pipelines. See an example below.\n\n```python\nfrom diffusers import DiffusionPipeline, LCMScheduler\nimport torch\n\nuser_lora_id = \"TheLastBen/Papercut_SDXL\"\ntrigger_word = \"papercut\"\n\nflash_lora_id = \"jasperai/flash-sdxl\"\n\n# Load Pipeline\npipe = DiffusionPipeline.from_pretrained(\n    \"stabilityai/stable-diffusion-xl-base-1.0\",\n    variant=\"fp16\"\n)\n\n# Set scheduler\npipe.scheduler = LCMScheduler.from_config(\n    pipe.scheduler.config\n)\n\n# Load LoRAs\npipe.load_lora_weights(flash_lora_id, adapter_name=\"flash\")\npipe.load_lora_weights(user_lora_id, adapter_name=\"lora\")\n\npipe.set_adapters([\"flash\", \"lora\"], adapter_weights=[1.0, 1.0])\npipe.to(device=\"cuda\", dtype=torch.float16)\n\nprompt = f\"{trigger_word} a cute corgi\"\n\nimage = pipe(\n    prompt,\n    num_inference_steps=4,\n    guidance_scale=0\n).images[0]\n```\n\n# License\nThis code is released under the [Creative Commons BY-NC 4.0 license](https://creativecommons.org/licenses/by-nc/4.0/legalcode.en).\n\n# Citation\nIf you find this work useful or use it in your research, please consider citing us\n\n```bibtex\n@inproceedings{chadebec2025flash,\n\ttitle={Flash Diffusion: Accelerating Any Conditional Diffusion Model for Few Steps Image Generation},\n\tauthor={Clement Chadebec and Onur Tasar and Eyal Benaroche and Benjamin Aubin},\n\tbooktitle={The 39th Annual AAAI Conference on Artificial Intelligence},\n\tyear={2025},\n\turl={https://openreview.net/forum?id=D8rQlCEKCT}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgojasper%2Fflash-diffusion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgojasper%2Fflash-diffusion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgojasper%2Fflash-diffusion/lists"}