
Add a built-in “Download All” button to the gr.Gallery
快速结论:这是 Gradio 社区提出的功能请求,而非报错。用户在使用 gr.Gallery 展示批量生成图片或文件时,需要逐个点击下载,体验繁琐。开发者希望 Gradio 原生添加一个“Download All”按钮,支持一键打包下载。当前可优先通过自定义 Python 函数 + gr.Button 实现替代方案。
问题场景
用户在使用 Gradio 的 gr.Gallery 组件展示多张生成的图片或文件(例如批量生成 10+ 图片)时,必须手动点击每个文件单独下载,操作重复且耗时。此场景常见于 AI 绘画、图像批量处理后需要导出的 WebUI 应用。
报错原文
This is a feature request, not an error report. The core request:
Add a built-in "Download All" button to the gr.Gallery component with a configurable boolean parameter (e.g., allow_download_all=True).
原因分析
Gradio 的 gr.Gallery 组件设计上缺少原生的一键批量下载功能。开发者只能通过创建自定义 Python 函数和独立的 gr.Button 来实现 zip 打包下载,逻辑分散且不够整洁。社区希望将下载功能直接集成到组件内部,提升用户体验。
环境排查
- Gradio 版本:任意使用
gr.Gallery组件的版本(建议升级到最新版以获取可能的新功能)。 - Python 标准库:
zipfile模块(用于自定义替代方案)。 - 前端框架:Svelte(Gradio 底层用于构建 UI,该功能需修改 Svelte 前端逻辑)。
解决步骤
- 等待官方实现:该功能已作为 Issue 提出,社区成员表示将开始添加
allow_download_all参数并实现 zip 逻辑(见 Issue 评论)。可关注 Gradio 后续版本更新。 - 临时替代方案(功能已被确认实现前):
a. 在 Python 后端编写自定义函数,接收画廊输出,使用zipfile库将图片打包为.zip文件。
b. 在 Gradio 界面中单独添加一个gr.Button,点击后调用该函数并返回gr.File对象供用户下载。
c. 示例代码架构(源自 Issue 描述):def zip_gallery(images): import zipfile, io, os zip_buffer = io.BytesIO() with zipfile.ZipFile(zip_buffer, 'w') as zf: for i, img in enumerate(images): # 将图片写入 zip pass return zip_buffer with gr.Blocks() as demo: gallery = gr.Gallery() download_btn = gr.Button("Download All") download_btn.click(zip_gallery, gallery, gr.File()) - 贡献代码:如果你是开发者,可参考该 Issue 的实现方向,在 Gradio 仓库中为
gr.Gallery添加allow_download_all参数,并修改 Svelte 前端以支持打包下载按钮。
验证方法
在 Gradio 应用中,使用 gr.Gallery(allow_download_all=True) 创建画廊组件,观察 UI 中是否出现原生的“Download All”按钮。点击后应自动打包当前所有图片为 .zip 文件并触发下载。对于自定义替代方案,点击单独的下载按钮后应成功下载包含所有 gallery 内容的 zip 包。

![[Bug]: presentation parsing bug](https://www.chat-gpts.plus/wp-content/uploads/2026/07/13060-7fd73526-768x403.jpg)
![[BUG] CREW getting stuck on any task as "THINKING" and gets FREEZE](https://www.chat-gpts.plus/wp-content/uploads/2026/07/2997-78573581-768x403.jpg)
