万象熔炉 | Anything XL实操分享如何用Streamlit保存历史生成记录你是不是也遇到过这样的烦恼用AI画图工具生成了一张特别满意的图片结果关掉网页就再也找不到了。或者想对比不同参数生成的效果却只能凭记忆去回想今天我要分享一个实用技巧如何为“万象熔炉 | Anything XL”这个本地图像生成工具添加历史记录保存功能。这个功能能让你的每一次创作都被妥善保存方便随时回顾、对比和复用。1. 为什么需要历史记录功能“万象熔炉 | Anything XL”是一个基于Stable Diffusion XL开发的本地图像生成工具。它最大的特点是纯本地运行不需要联网保护了你的隐私也没有使用次数限制。但默认情况下它每次生成的图片都只是临时显示刷新页面或者重新启动工具后之前生成的作品就消失了。这在实际使用中很不方便。比如参数对比你想测试不同提示词对生成效果的影响生成了10张图结果只能靠截图保存灵感存档突然生成了一个特别惊艳的图片想保存下来作为后续创作的参考批量管理为同一个项目生成了多张备选图需要统一管理和筛选有了历史记录功能这些问题都能轻松解决。你可以像浏览相册一样查看所有生成过的图片还能看到当时使用的具体参数真正做到“有迹可循”。2. 理解工具的基本工作原理在添加历史记录功能之前我们先简单了解一下“万象熔炉 | Anything XL”是怎么工作的。2.1 核心架构这个工具基于Streamlit框架搭建了一个可视化界面。Streamlit是一个专门为机器学习项目设计的Web应用框架最大的优点就是开发简单、部署方便。工具的核心是Stable Diffusion XL模型这是一个能生成高质量图片的AI模型。Anything XL是它的一个特定版本专门优化了二次元和通用风格的生成效果。2.2 工作流程当你使用这个工具时整个过程是这样的加载模型启动工具时它会自动加载预训练好的模型文件设置参数你在侧边栏调整各种参数比如提示词、图片大小、生成步数等生成图片点击生成按钮AI模型根据你的设置创作图片显示结果生成的图片显示在界面上默认情况下第4步只是把图片显示出来并没有保存到任何地方。我们的目标就是在这里加上保存功能。3. 添加历史记录功能的完整方案下面我分步骤讲解如何为这个工具添加历史记录功能。即使你不是专业程序员跟着步骤做也能完成。3.1 准备工作首先你需要找到工具的源代码文件。通常这个工具的主文件叫app.py或者main.py。用文本编辑器比如VS Code、Notepad等打开它。在文件开头部分你会看到一些导入语句像这样import streamlit as st import torch from diffusers import StableDiffusionXLPipeline我们需要添加几个新的库来支持历史记录功能import json import os from datetime import datetime from PIL import Image import base64 from io import BytesIO这些库的作用分别是json用来保存参数信息os用来操作文件和文件夹datetime用来记录生成时间PIL用来处理图片base64和BytesIO用来在网页上显示图片3.2 创建历史记录存储结构接下来我们需要决定历史记录怎么保存。有两种常见的方式方式一保存到本地文件适合个人使用数据完全掌握在自己手里。方式二保存到数据库适合多人使用或者数据量大的情况。考虑到这个工具是本地使用的我们选择第一种方式用JSON文件来保存记录。在代码中合适的位置比如在Streamlit界面设置之后添加以下代码# 创建保存历史记录的文件夹 HISTORY_DIR generation_history os.makedirs(HISTORY_DIR, exist_okTrue) # 历史记录文件路径 HISTORY_FILE os.path.join(HISTORY_DIR, history.json) # 图片保存文件夹 IMAGES_DIR os.path.join(HISTORY_DIR, images) os.makedirs(IMAGES_DIR, exist_okTrue)这段代码创建了两个文件夹一个用来保存历史记录信息一个用来保存生成的图片。3.3 修改图片生成函数找到生成图片的函数通常叫generate_image或类似的名字。在这个函数生成图片后我们需要添加保存逻辑。假设原来的生成代码是这样的def generate_image(prompt, negative_prompt, width, height, steps, cfg): # 原来的生成代码... image pipeline(prompt, negative_promptnegative_prompt, widthwidth, heightheight, num_inference_stepssteps, guidance_scalecfg).images[0] return image我们需要修改它让它在返回图片的同时也保存记录def generate_image(prompt, negative_prompt, width, height, steps, cfg): # 原来的生成代码... image pipeline(prompt, negative_promptnegative_prompt, widthwidth, heightheight, num_inference_stepssteps, guidance_scalecfg).images[0] # 新增保存历史记录 save_generation_history(image, prompt, negative_prompt, width, height, steps, cfg) return image3.4 实现保存函数现在来实现save_generation_history这个函数def save_generation_history(image, prompt, negative_prompt, width, height, steps, cfg): # 生成唯一ID和时间戳 from uuid import uuid4 record_id str(uuid4()) timestamp datetime.now().strftime(%Y-%m-%d %H:%M:%S) # 保存图片 image_filename f{record_id}.png image_path os.path.join(IMAGES_DIR, image_filename) image.save(image_path) # 创建记录信息 record { id: record_id, timestamp: timestamp, prompt: prompt, negative_prompt: negative_prompt, width: width, height: height, steps: steps, cfg: cfg, image_filename: image_filename } # 读取现有的历史记录 history [] if os.path.exists(HISTORY_FILE): with open(HISTORY_FILE, r, encodingutf-8) as f: history json.load(f) # 添加新记录最新的在最前面 history.insert(0, record) # 保存回文件 with open(HISTORY_FILE, w, encodingutf-8) as f: json.dump(history, f, ensure_asciiFalse, indent2) return record_id这个函数做了几件事为每次生成创建一个唯一ID记录生成时间把图片保存到本地把所有参数信息保存到JSON文件3.5 添加历史记录查看界面光保存还不够我们还需要一个界面来查看历史记录。在Streamlit界面中添加一个新的页面或板块。在合适的位置添加以下代码# 在侧边栏或主界面添加历史记录查看选项 if st.sidebar.checkbox(查看历史记录): st.header( 生成历史记录) # 读取历史记录 if os.path.exists(HISTORY_FILE): with open(HISTORY_FILE, r, encodingutf-8) as f: history json.load(f) if not history: st.info(还没有生成记录快去生成一些图片吧) else: # 显示记录数量 st.write(f共有 {len(history)} 条生成记录) # 每页显示的数量 records_per_page 5 total_pages (len(history) records_per_page - 1) // records_per_page # 分页控制 page_number st.number_input(页码, min_value1, max_valuetotal_pages, value1) # 计算当前页的记录 start_idx (page_number - 1) * records_per_page end_idx min(start_idx records_per_page, len(history)) # 显示当前页的记录 for i in range(start_idx, end_idx): record history[i] # 创建两列布局图片在左信息在右 col1, col2 st.columns([1, 2]) with col1: # 加载并显示图片 image_path os.path.join(IMAGES_DIR, record[image_filename]) if os.path.exists(image_path): image Image.open(image_path) st.image(image, captionf记录 {i1}, use_column_widthTrue) with col2: # 显示详细信息 st.subheader(f记录 {i1}) st.write(f**生成时间**{record[timestamp]}) st.write(f**提示词**{record[prompt]}) st.write(f**负面提示**{record[negative_prompt]}) st.write(f**分辨率**{record[width]}x{record[height]}) st.write(f**步数**{record[steps]}) st.write(f**CFG**{record[cfg]}) # 添加重新生成按钮 if st.button(f使用此参数重新生成, keyfregenerate_{record[id]}): # 这里可以设置重新生成的逻辑 st.session_state[prompt] record[prompt] st.session_state[negative_prompt] record[negative_prompt] st.session_state[width] record[width] st.session_state[height] record[height] st.session_state[steps] record[steps] st.session_state[cfg] record[cfg] st.success(参数已加载到生成界面) else: st.info(还没有生成记录快去生成一些图片吧)3.6 添加实用功能为了让历史记录功能更加实用我们可以添加一些额外功能搜索功能按提示词搜索历史记录# 在历史记录界面添加搜索框 search_term st.text_input(搜索提示词, ) if search_term: filtered_history [r for r in history if search_term.lower() in r[prompt].lower()] st.write(f找到 {len(filtered_history)} 条相关记录) # 显示筛选后的记录...批量导出导出选中的图片# 添加多选和导出功能 if st.checkbox(启用批量操作): selected_ids [] for record in history: if st.checkbox(f选择记录 {record[timestamp]}, keyfselect_{record[id]}): selected_ids.append(record[id]) if selected_ids and st.button(导出选中图片): # 创建临时文件夹存放导出的图片 export_dir exported_images os.makedirs(export_dir, exist_okTrue) for record_id in selected_ids: record next(r for r in history if r[id] record_id) src_path os.path.join(IMAGES_DIR, record[image_filename]) dst_path os.path.join(export_dir, f{record[timestamp]}_{record[id][:8]}.png) shutil.copy(src_path, dst_path) st.success(f已导出 {len(selected_ids)} 张图片到 {export_dir} 文件夹)参数统计分析你的使用习惯# 添加统计信息 if history: st.subheader( 生成统计) # 计算平均参数 avg_steps sum(r[steps] for r in history) / len(history) avg_cfg sum(r[cfg] for r in history) / len(history) col1, col2, col3 st.columns(3) with col1: st.metric(总生成次数, len(history)) with col2: st.metric(平均步数, f{avg_steps:.1f}) with col3: st.metric(平均CFG, f{avg_cfg:.1f}) # 显示最常用的提示词 from collections import Counter all_prompts [r[prompt] for r in history] word_counter Counter() for prompt in all_prompts: words prompt.lower().split() word_counter.update(words) common_words word_counter.most_common(10) st.write(**最常用的提示词**, , .join([word for word, count in common_words if len(word) 3]))4. 实际使用效果展示添加了历史记录功能后你的“万象熔炉 | Anything XL”工具会变成这样4.1 生成界面保持不变主生成界面和原来一样你仍然可以在侧边栏调整所有参数然后点击生成按钮。不同的是现在每次生成后系统会自动保存这次生成的所有信息。4.2 新增历史记录面板在侧边栏勾选“查看历史记录”后主界面会切换到一个新的面板。这里会按时间倒序显示你所有的生成记录。每条记录包括生成的图片缩略图生成的具体时间使用的提示词和负面提示词分辨率、步数、CFG等所有参数一个“重新生成”按钮可以一键加载该记录的所有参数4.3 实用功能体验快速找回满意作品之前生成了一张特别满意的二次元角色图但忘了具体参数。现在只需要在历史记录里翻一翻找到那张图所有参数一目了然。参数对比学习想了解CFG值对生成效果的影响生成一组不同CFG的图片后在历史记录里并排查看效果对比清清楚楚。批量管理项目为一个游戏角色设计了多套服装生成了几十张概念图。现在可以用搜索功能快速筛选或者批量导出给团队其他成员。5. 进阶优化建议如果你觉得基础功能还不够用这里有一些进阶优化建议5.1 添加标签系统为每条记录添加自定义标签方便分类管理# 在保存记录时添加标签字段 tags st.text_input(为本次生成添加标签用逗号分隔, ) record[tags] [tag.strip() for tag in tags.split(,) if tag.strip()] # 然后可以按标签筛选 selected_tag st.selectbox(按标签筛选, [所有] list(all_tags))5.2 添加评分功能为生成的图片打分方便后续筛选# 在历史记录界面添加评分 rating st.slider(评分, 1, 5, 3, keyfrating_{record[id]}) record[rating] rating # 可以按评分排序 sort_by st.selectbox(排序方式, [时间, 评分]) if sort_by 评分: history.sort(keylambda x: x.get(rating, 0), reverseTrue)5.3 云端备份可选如果你有多台设备可以考虑添加简单的云端备份# 使用Git来管理历史记录需要用户有GitHub账号 import git def backup_to_github(): repo git.Repo.init(HISTORY_DIR) repo.git.add(ATrue) repo.index.commit(fBackup {datetime.now().strftime(%Y-%m-%d %H:%M)}) # 推送到远程仓库...5.4 性能优化当历史记录很多时加载可能会变慢。可以添加分页加载和缓存# 使用Streamlit的缓存功能 st.cache_data(ttl3600) def load_history_data(): if os.path.exists(HISTORY_FILE): with open(HISTORY_FILE, r, encodingutf-8) as f: return json.load(f) return []6. 总结通过为“万象熔炉 | Anything XL”添加历史记录功能我们彻底解决了本地AI绘画工具的一个痛点生成记录的保存和管理。现在你可以永久保存所有生成的作品和参数随时回顾过去的创作灵感对比分析不同参数的效果差异批量管理大量生成结果快速复用成功的参数组合这个功能的实现并不复杂主要是利用Python的文件操作和JSON格式来保存数据再用Streamlit的界面组件来展示数据。即使你不是专业的开发者按照上面的步骤一步步来也能为自己的工具添加这个实用功能。最重要的是这个方案完全在本地运行你的所有生成记录都保存在自己的电脑上既安全又私密。你可以放心地探索各种创作可能因为每一次尝试都会被完整记录成为你创作历程的一部分。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。