圣女司幼幽-造相Z-Turbo Gradio界面定制指南添加历史记录、风格预设与批量生成功能1. 引言从基础使用到个性化定制如果你已经成功部署了圣女司幼幽-造相Z-Turbo模型并且体验过它生成精美图片的能力那么恭喜你你已经迈出了第一步。但你可能也发现了基础的Gradio界面虽然能用但在实际创作中效率上还有提升空间。想象一下这些场景你精心调整了一组参数生成了满意的图片但关掉页面后这些设置就找不回来了。每次想生成特定风格的图片都要重新输入复杂的提示词和调整参数。需要为同一个角色生成多张不同姿势或表情的图片只能一张一张手动操作。这些痛点正是我们今天要解决的问题。本文将带你一步步改造那个基础的Gradio界面为它添加上历史记录、风格预设和批量生成这三个实用功能。改造完成后你的创作流程会变得更加顺畅高效。2. 改造前的准备工作2.1 理解现有的界面结构在开始动手之前我们先来看看默认的Gradio界面是什么样子的。通常一个基础的文生图界面会包含以下几个核心部分提示词输入框让你输入想要生成图片的描述参数调节滑块控制图片质量、风格强度等生成按钮点击后开始生成图片图片展示区域显示生成的结果我们的目标是在这个基础上增加新的功能模块同时保持界面的整洁和易用性。2.2 需要安装的额外工具为了保存历史记录和预设我们需要用到一些简单的文件操作。Python自带的json模块就足够用了它能把我们的数据比如历史记录、预设配置保存成文件下次打开还能读取出来。如果你对代码结构还不熟悉不用担心我会用最直白的方式解释每一部分的作用。3. 第一步为界面添加历史记录功能历史记录功能的核心是把你每次生成图片时用的参数和结果保存下来方便你随时查看和再次使用。3.1 设计历史记录的保存方式我们用一个简单的列表来保存每次的操作记录每条记录包含使用的提示词主要的参数设置比如采样步数、引导系数等生成图片的时间图片的保存路径或者直接保存图片数据这里有个小技巧我们不在界面上直接显示图片文件而是保存生成图片时的参数。当你想重新生成某张图片时只需要点击历史记录系统就会自动填充当时的参数然后重新生成一次。这样既节省了存储空间又能保证图片质量因为是用最新模型重新生成的。3.2 实现历史记录界面组件在Gradio中我们可以用gr.DataFrame组件来显示历史记录表格用gr.Button来添加清空历史的功能。代码结构大致如下import gradio as gr import json import os from datetime import datetime # 历史记录文件路径 HISTORY_FILE generation_history.json def load_history(): 加载历史记录 if os.path.exists(HISTORY_FILE): with open(HISTORY_FILE, r, encodingutf-8) as f: return json.load(f) return [] def save_history(history): 保存历史记录 with open(HISTORY_FILE, w, encodingutf-8) as f: json.dump(history, f, ensure_asciiFalse, indent2) def add_to_history(prompt, params, image_path): 添加新的生成记录 history load_history() new_record { id: len(history) 1, timestamp: datetime.now().strftime(%Y-%m-%d %H:%M:%S), prompt: prompt, params: params, image_path: image_path } history.append(new_record) # 只保留最近50条记录避免文件过大 if len(history) 50: history history[-50:] save_history(history) return history def clear_history(): 清空历史记录 if os.path.exists(HISTORY_FILE): os.remove(HISTORY_FILE) return []3.3 将历史记录集成到主界面现在我们需要修改原来的生成函数让它在每次生成图片后自动保存记录def generate_image_with_history(prompt, steps, guidance_scale, *other_params): 带历史记录的生成函数 # 这里是调用模型生成图片的代码 # image your_model.generate(prompt, stepssteps, guidance_scaleguidance_scale, ...) # image_path save_image(image) # 假设我们已经得到了image_path image_path fgenerated_{datetime.now().strftime(%Y%m%d_%H%M%S)}.png # 保存参数 params { steps: steps, guidance_scale: guidance_scale, # ... 其他参数 } # 添加到历史记录 history add_to_history(prompt, params, image_path) # 返回图片和历史记录 return image_path, history然后在界面布局中添加历史记录显示区域with gr.Blocks() as demo: with gr.Row(): # 左侧原有的输入区域 with gr.Column(): prompt_input gr.Textbox(label提示词, lines3) generate_btn gr.Button(生成图片, variantprimary) output_image gr.Image(label生成结果) # 右侧历史记录区域 with gr.Column(): history_df gr.DataFrame( label生成历史, headers[ID, 时间, 提示词, 参数], interactiveFalse ) clear_btn gr.Button(清空历史, variantsecondary) # 设置事件处理 generate_btn.click( fngenerate_image_with_history, inputs[prompt_input, ...], # 你的所有输入参数 outputs[output_image, history_df] ) clear_btn.click( fnclear_history, outputs[history_df] )这样每次生成图片后右侧的历史记录表格就会自动更新。点击某条记录虽然不能直接加载图片因为我们只保存了参数但你可以手动复制参数重新生成。4. 第二步创建可复用的风格预设风格预设功能让你可以保存常用的参数组合一键应用特别适合那些需要反复生成同风格图片的场景。4.1 设计预设管理系统我们可以设计几种不同类型的预设角色预设专门生成圣女司幼幽不同服装、姿态的预设风格预设比如水墨风、油画风、赛博朋克风等场景预设不同的背景和环境设置预设的保存格式和历史记录类似但更注重可重复使用性。4.2 实现预设的保存和加载PRESET_FILE style_presets.json def load_presets(): 加载风格预设 if os.path.exists(PRESET_FILE): with open(PRESET_FILE, r, encodingutf-8) as f: return json.load(f) return { default_presets: [ { name: 水墨古风, prompt_suffix: 水墨画风格淡雅色调留白意境, params: {steps: 30, guidance_scale: 7.5} }, { name: 华丽宫廷, prompt_suffix: 华丽宫廷风金色装饰精致细节, params: {steps: 40, guidance_scale: 8.0} } ] } def save_preset(name, prompt_suffix, params): 保存新的预设 presets load_presets() new_preset { name: name, prompt_suffix: prompt_suffix, params: params } # 添加到用户预设列表 if user_presets not in presets: presets[user_presets] [] presets[user_presets].append(new_preset) with open(PRESET_FILE, w, encodingutf-8) as f: json.dump(presets, f, ensure_asciiFalse, indent2) return presets4.3 创建预设管理界面在Gradio中我们可以用下拉选择框来展示预设列表def apply_preset(preset_name, current_prompt, current_params): 应用选中的预设 presets load_presets() # 在所有预设中查找 all_presets presets.get(default_presets, []) presets.get(user_presets, []) for preset in all_presets: if preset[name] preset_name: # 应用预设参数 new_params current_params.copy() new_params.update(preset[params]) # 在现有提示词后添加预设后缀 if preset.get(prompt_suffix): new_prompt current_prompt preset[prompt_suffix] else: new_prompt current_prompt return new_prompt, new_params return current_prompt, current_params # 在界面中添加预设选择 with gr.Blocks() as demo: # ... 其他组件 with gr.Row(): preset_dropdown gr.Dropdown( label风格预设, choices[无] [p[name] for p in load_presets()[default_presets]], value无 ) apply_preset_btn gr.Button(应用预设, variantsecondary) # 预设应用逻辑 apply_preset_btn.click( fnapply_preset, inputs[preset_dropdown, prompt_input, params_state], outputs[prompt_input, params_state] )你还可以添加一个保存当前为预设的功能把当前的参数设置保存为新的预设def save_current_as_preset(preset_name, prompt, params): 将当前设置保存为预设 # 提取提示词中的风格部分作为后缀 # 这里可以根据你的需求调整逻辑 prompt_suffix extract_style_from_prompt(prompt) save_preset(preset_name, prompt_suffix, params) # 更新下拉框的选项 presets load_presets() all_preset_names [无] [p[name] for p in presets[default_presets]] [p[name] for p in presets.get(user_presets, [])] return f预设 {preset_name} 已保存, all_preset_names # 在界面中添加保存预设的功能 preset_name_input gr.Textbox(label预设名称) save_preset_btn gr.Button(保存为预设) save_status gr.Textbox(label保存状态, interactiveFalse) save_preset_btn.click( fnsave_current_as_preset, inputs[preset_name_input, prompt_input, params_state], outputs[save_status, preset_dropdown] )5. 第三步实现批量图片生成批量生成功能对于需要大量图片的场景特别有用比如生成角色的一系列表情、不同角度的视图等。5.1 设计批量生成的工作流程批量生成的核心思路是准备多组参数然后依次生成图片。我们需要考虑输入方式如何让用户方便地输入多组参数生成控制控制同时生成的数量避免资源过载结果管理如何组织和展示批量生成的结果5.2 创建批量生成界面我们可以设计一个简单的批量生成界面让用户输入多行提示词每行对应一张图片def batch_generate(prompts_text, base_params): 批量生成图片 # 按行分割提示词 prompts [p.strip() for p in prompts_text.split(\n) if p.strip()] results [] image_paths [] for i, prompt in enumerate(prompts): try: # 调用生成函数 # image your_model.generate(prompt, **base_params) # image_path save_image(image, fbatch_{i1}) # 模拟生成过程 print(f正在生成第 {i1}/{len(prompts)} 张: {prompt[:50]}...) # 这里应该是实际的生成代码 # 为了示例我们模拟一个路径 image_path fbatch_output_{i1}.png results.append({ index: i1, prompt: prompt, status: 成功, path: image_path }) image_paths.append(image_path) # 添加到历史记录 add_to_history(prompt, base_params, image_path) except Exception as e: results.append({ index: i1, prompt: prompt, status: f失败: {str(e)}, path: }) return results, image_paths # 批量生成界面 with gr.Tab(批量生成): with gr.Row(): with gr.Column(): batch_prompts gr.Textbox( label批量提示词每行一个, lines10, placeholder请输入多个提示词每行一个\n例如\n圣女司幼幽在竹林练剑\n圣女司幼幽月下独酌\n圣女司幼幽战场英姿 ) batch_params gr.JSON( label生成参数, value{steps: 30, guidance_scale: 7.5} ) batch_btn gr.Button(开始批量生成, variantprimary) with gr.Column(): batch_results gr.DataFrame( label生成结果, headers[序号, 提示词, 状态, 文件路径] ) batch_gallery gr.Gallery( label生成图片预览, columns3, heightauto ) batch_btn.click( fnbatch_generate, inputs[batch_prompts, batch_params], outputs[batch_results, batch_gallery] )5.3 添加批量生成的高级功能为了让批量生成更加强大我们可以添加一些高级功能def generate_variations(base_prompt, variation_count, variation_params): 生成一个提示词的多个变体 variations [] # 这里可以定义一些变体规则 # 例如添加不同的场景、表情、动作等 scenes [在竹林, 在月下, 在雪山, 在宫殿, 在战场] expressions [微笑, 沉思, 坚定, 忧伤, 威严] actions [练剑, 抚琴, 读书, 赏花, 远眺] for i in range(variation_count): # 随机组合变体元素或者让用户选择 scene scenes[i % len(scenes)] expression expressions[i % len(expressions)] action actions[i % len(actions)] variation f{base_prompt}{scene}表情{expression}正在{action} variations.append(variation) return \n.join(variations) # 在界面中添加变体生成功能 with gr.Accordion(高级选项, openFalse): base_prompt_input gr.Textbox(label基础提示词) variation_count gr.Slider(minimum1, maximum10, value3, step1, label变体数量) generate_variations_btn gr.Button(生成变体提示词) generate_variations_btn.click( fngenerate_variations, inputs[base_prompt_input, variation_count, batch_params], outputs[batch_prompts] )6. 完整界面整合与优化现在我们把所有功能整合到一个完整的界面中import gradio as gr import json import os from datetime import datetime class ImageGeneratorApp: def __init__(self): self.history_file generation_history.json self.preset_file style_presets.json def create_interface(self): with gr.Blocks(title圣女司幼幽-造相Z-Turbo 增强版, themegr.themes.Soft()) as demo: gr.Markdown(# 圣女司幼幽-造相Z-Turbo 增强版) gr.Markdown(### 支持历史记录、风格预设和批量生成功能) # 状态存储 current_params gr.State({ steps: 30, guidance_scale: 7.5, seed: -1 }) with gr.Tabs(): # 标签页1单张生成 with gr.Tab(单张生成): with gr.Row(): with gr.Column(scale2): # 提示词输入 prompt_input gr.Textbox( label提示词, lines4, placeholder描述你想要生成的画面..., value圣女司幼幽身着墨绿暗纹收腰长裙裙摆垂坠带细碎银饰流苏 ) # 风格预设 with gr.Row(): preset_dropdown gr.Dropdown( label快速风格预设, choicesself.get_preset_choices(), value无 ) apply_preset_btn gr.Button(应用, sizesm) # 参数调节 with gr.Accordion(高级参数, openFalse): steps_slider gr.Slider( minimum20, maximum50, value30, step1, label采样步数数值越高细节越好但速度越慢 ) guidance_slider gr.Slider( minimum5.0, maximum10.0, value7.5, step0.5, label引导系数数值越高越贴近提示词 ) seed_input gr.Number( label随机种子-1为随机, value-1 ) # 生成按钮 generate_btn gr.Button(生成图片, variantprimary, sizelg) with gr.Column(scale1): # 图片显示 output_image gr.Image( label生成结果, height400 ) # 保存按钮 save_btn gr.Button(保存当前为预设, variantsecondary) save_name gr.Textbox(label预设名称, placeholder输入预设名称) save_status gr.Textbox(label, interactiveFalse) # 标签页2批量生成 with gr.Tab(批量生成): with gr.Row(): with gr.Column(): batch_prompts gr.Textbox( label批量提示词列表, lines12, placeholder每行一个提示词将依次生成... ) with gr.Row(): batch_steps gr.Slider( minimum20, maximum50, value30, step1, label采样步数 ) batch_guidance gr.Slider( minimum5.0, maximum10.0, value7.5, step0.5, label引导系数 ) batch_btn gr.Button(开始批量生成, variantprimary) with gr.Column(): batch_results gr.DataFrame( label生成进度, headers[序号, 提示词, 状态], height300 ) batch_gallery gr.Gallery( label生成结果预览, columns3, height400 ) # 标签页3历史记录 with gr.Tab(历史记录): with gr.Row(): history_df gr.DataFrame( label生成历史, headers[时间, 提示词, 参数, 操作], height500 ) with gr.Row(): clear_history_btn gr.Button(清空历史记录, variantstop) refresh_btn gr.Button(刷新列表, variantsecondary) # 事件处理 generate_btn.click( fnself.generate_single_image, inputs[prompt_input, steps_slider, guidance_slider, seed_input], outputs[output_image, history_df] ) apply_preset_btn.click( fnself.apply_preset, inputs[preset_dropdown, prompt_input, current_params], outputs[prompt_input, current_params] ) save_btn.click( fnself.save_preset, inputs[save_name, prompt_input, current_params], outputs[save_status, preset_dropdown] ) batch_btn.click( fnself.batch_generate, inputs[batch_prompts, batch_steps, batch_guidance], outputs[batch_results, batch_gallery, history_df] ) clear_history_btn.click( fnself.clear_history, outputs[history_df] ) refresh_btn.click( fnself.load_history_data, outputs[history_df] ) return demo # 这里省略具体的函数实现上面已经展示过 def generate_single_image(self, prompt, steps, guidance, seed): # 实际调用模型生成图片 pass def apply_preset(self, preset_name, current_prompt, current_params): # 应用预设 pass def save_preset(self, name, prompt, params): # 保存预设 pass def batch_generate(self, prompts_text, steps, guidance): # 批量生成 pass def clear_history(self): # 清空历史 pass def load_history_data(self): # 加载历史数据 pass def get_preset_choices(self): # 获取预设列表 return [无, 水墨古风, 华丽宫廷, 战场英姿, 月下仙子] # 启动应用 app ImageGeneratorApp() demo app.create_interface() demo.launch(shareTrue)7. 总结打造你的专属创作工具通过上面的步骤我们成功地将一个基础的Gradio界面改造成了一个功能丰富的创作工具。让我们回顾一下新增的功能7.1 核心功能总结历史记录功能自动保存每次生成的操作记录方便回溯和复用。你不再需要担心忘记之前用了什么参数所有记录都一目了然。风格预设系统一键应用常用风格大幅提升重复性工作的效率。无论是固定的角色设定还是特定的艺术风格都可以保存为预设快速调用。批量生成能力同时处理多个生成任务适合需要大量图片的场景。你可以为同一个角色生成系列图片或者测试不同提示词的效果。7.2 使用建议与技巧历史记录的妙用当你生成了一张特别满意的图片时可以在历史记录中标记它或者把参数保存为预设这样下次就能快速复现同样的效果。预设的分类管理建议为预设建立分类比如按角色、按风格、按场景等。预设名称要清晰易懂比如司幼幽-水墨风、司幼幽-战场装束等。批量生成的效率技巧在批量生成时可以先用小尺寸、低步数快速测试多组提示词找到效果好的几组后再用高质量参数重新生成。资源管理历史记录和预设都是保存在本地文件中的定期清理不需要的记录可以保持界面整洁。批量生成大量图片时注意磁盘空间的使用情况。7.3 进一步优化方向如果你还想继续增强这个工具可以考虑图片管理功能添加图片分类、标签、搜索功能方便管理大量生成结果。参数优化建议根据生成结果系统自动推荐参数调整方向。提示词模板库收集和分享优秀的提示词模板。云端同步将历史记录和预设同步到云端多设备间共享。这个定制化的界面不仅提升了你的创作效率更重要的是它变成了一个真正属于你的工具。你可以根据自己的使用习惯继续调整和优化添加更多实用功能。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。