
KOOK真实幻想艺术馆实战教程批量生成自动命名本地保存脚本1. 引言当艺术创作遇上效率瓶颈想象一下你正沉浸在KOOK真实幻想艺术馆那如卢浮宫般优雅的界面中灵感如泉涌。你输入一个绝妙的描述看着AI在短短几秒内为你绘制出一幅充满浪漫主义色彩的厚涂油画。画面很美你非常满意。然后呢你想再生成几张不同风格、不同构图的变体。于是你手动修改提示词调整参数点击生成等待保存再重复这个过程。三五张图后你开始感到一丝疲惫。如果是需要生成几十张、上百张图片用于一个完整的项目呢这种重复劳动不仅消磨创作热情更严重影响了效率。这正是许多AI艺术创作者面临的真实困境工具很强大界面很精美但批量处理能力不足。每次生成都需要手动操作、手动命名、手动保存整个过程繁琐且容易出错。今天我要分享的正是解决这个痛点的实战方案——一个专为KOOK真实幻想艺术馆打造的Python脚本它能帮你实现批量生成一次性输入多个提示词自动排队生成智能命名根据提示词内容自动生成有意义的文件名本地保存自动将作品保存到指定文件夹并按日期分类进度追踪实时显示生成进度失败自动重试无论你是需要为游戏项目生成大量概念图还是为设计作品集准备素材或是单纯想探索不同艺术风格这个脚本都能让你的创作流程变得高效而优雅。2. 环境准备与脚本部署2.1 确保基础环境就绪在开始之前你需要确保已经成功部署了KOOK真实幻想艺术馆。这个脚本是作为艺术馆的“效率增强插件”来使用的所以艺术馆本身必须能正常运行。如果你还没有部署可以参考艺术馆的官方文档快速搭建。这里假设你的艺术馆已经在本地或服务器上运行并且可以通过浏览器正常访问。2.2 安装必要的Python库我们的脚本需要一些额外的Python库支持。打开终端或命令提示符执行以下命令# 基础库通常艺术馆已包含 pip install requests pillow # 如果还没有安装确保有以下库 pip install streamlit # 艺术馆界面框架 pip install diffusers # 扩散模型核心 pip install torch # PyTorch深度学习框架这些库大多数在部署艺术馆时已经安装这里只是做个确认。如果遇到版本冲突可以尝试使用虚拟环境。2.3 获取脚本文件我将完整的脚本代码提供在下面。你可以创建一个新的Python文件比如命名为batch_art_generator.py然后将代码复制进去。#!/usr/bin/env python3 KOOK真实幻想艺术馆 - 批量生成与自动保存脚本 作者AI艺术效率优化师 版本1.0.0 功能批量生成AI艺术作品自动命名本地保存 import os import time import json import requests from datetime import datetime from pathlib import Path import hashlib import re class KookArtBatchGenerator: KOOK艺术馆批量生成器 def __init__(self, base_urlhttp://localhost:8501, output_dir./generated_art): 初始化批量生成器 参数: base_url: KOOK艺术馆的访问地址默认本地8501端口 output_dir: 作品保存目录 self.base_url base_url.rstrip(/) self.output_dir Path(output_dir) # 创建保存目录按日期分类 today datetime.now().strftime(%Y%m%d) self.today_dir self.output_dir / today self.today_dir.mkdir(parentsTrue, exist_okTrue) # 创建元数据文件 self.metadata_file self.today_dir / metadata.json self.metadata self._load_metadata() print(f KOOK艺术馆批量生成器已初始化) print(f 作品将保存到: {self.today_dir}) print(f 艺术馆地址: {self.base_url}) print(- * 50) def _load_metadata(self): 加载或创建元数据文件 if self.metadata_file.exists(): with open(self.metadata_file, r, encodingutf-8) as f: return json.load(f) return {generated_images: [], total_count: 0, failed_count: 0} def _save_metadata(self): 保存元数据到文件 with open(self.metadata_file, w, encodingutf-8) as f: json.dump(self.metadata, f, ensure_asciiFalse, indent2) def _generate_filename(self, prompt, index): 根据提示词生成有意义的文件名 参数: prompt: 艺术描述提示词 index: 图片序号 返回: 格式化的文件名 # 清理提示词中的特殊字符 clean_prompt re.sub(r[^\w\s-], , prompt) # 取前3个关键词如果有 words clean_prompt.split()[:3] keywords _.join(words) if words else art # 如果关键词太长截断 if len(keywords) 30: keywords keywords[:30] # 添加时间戳和序号 timestamp datetime.now().strftime(%H%M%S) filename f{index:03d}_{keywords}_{timestamp} # 确保文件名长度合理 if len(filename) 50: filename filename[:50] return f{filename}.png def _call_art_gallery(self, prompt, steps12, cfg_scale2.0, enginekook): 调用KOOK艺术馆生成接口 参数: prompt: 艺术描述 steps: 生成步数推荐10-15 cfg_scale: 提示词相关性推荐2.0 engine: 引擎选择kook或zimage 返回: 生成的图片数据或None try: # 构建API请求参数 # 注意实际API端点可能需要根据艺术馆的具体实现调整 api_endpoint f{self.base_url}/generate payload { prompt: prompt, steps: steps, cfg_scale: cfg_scale, engine: engine, width: 1024, height: 1024, seed: int(time.time() * 1000) % 1000000 # 随机种子 } # 发送请求 response requests.post( api_endpoint, jsonpayload, timeout300 # 5分钟超时 ) if response.status_code 200: return response.content else: print(f❌ 生成失败: HTTP {response.status_code}) return None except requests.exceptions.RequestException as e: print(f❌ 网络请求错误: {e}) return None except Exception as e: print(f❌ 生成过程出错: {e}) return None def generate_single(self, prompt, **kwargs): 生成单张艺术作品 参数: prompt: 艺术描述 **kwargs: 其他生成参数 返回: 生成的文件路径或None print(f\n 正在生成: {prompt[:50]}...) # 调用艺术馆 image_data self._call_art_gallery(prompt, **kwargs) if image_data: # 生成文件名 index self.metadata[total_count] 1 filename self._generate_filename(prompt, index) filepath self.today_dir / filename # 保存图片 with open(filepath, wb) as f: f.write(image_data) # 更新元数据 self.metadata[generated_images].append({ filename: filename, prompt: prompt, timestamp: datetime.now().isoformat(), parameters: kwargs }) self.metadata[total_count] 1 self._save_metadata() print(f✅ 已保存: {filename}) print(f 路径: {filepath}) return str(filepath) else: self.metadata[failed_count] 1 self._save_metadata() print(f❌ 生成失败已记录) return None def generate_batch(self, prompts, max_retries2, delay_between3): 批量生成多张艺术作品 参数: prompts: 提示词列表 max_retries: 失败重试次数 delay_between: 生成间隔秒 返回: 成功生成的文件路径列表 total len(prompts) successful [] print(f\n 开始批量生成 {total} 张艺术作品) print( * 50) for i, prompt in enumerate(prompts, 1): print(f\n 进度: {i}/{total}) print(f 提示词: {prompt}) # 尝试生成支持重试 for attempt in range(max_retries 1): if attempt 0: print(f 第 {attempt} 次重试...) result self.generate_single(prompt) if result: successful.append(result) break elif attempt max_retries: print(f❌ 多次尝试失败跳过此提示词) # 生成间隔避免过热 if i total: print(f⏳ 等待 {delay_between} 秒后继续...) time.sleep(delay_between) # 生成报告 print(\n * 50) print( 批量生成完成报告) print(f✅ 成功: {len(successful)}/{total}) print(f❌ 失败: {total - len(successful)}) print(f 保存目录: {self.today_dir}) if successful: print(\n 生成的作品:) for path in successful: print(f • {Path(path).name}) return successful def generate_from_file(self, filepath, **kwargs): 从文件读取提示词并批量生成 参数: filepath: 包含提示词的文件路径每行一个提示词 **kwargs: 生成参数 返回: 成功生成的文件路径列表 try: with open(filepath, r, encodingutf-8) as f: prompts [line.strip() for line in f if line.strip()] if not prompts: print(❌ 文件为空或没有有效的提示词) return [] print(f 从文件读取到 {len(prompts)} 个提示词) return self.generate_batch(prompts, **kwargs) except FileNotFoundError: print(f❌ 文件不存在: {filepath}) return [] except Exception as e: print(f❌ 读取文件失败: {e}) return [] def main(): 主函数演示脚本使用方法 # 初始化生成器 # 如果艺术馆运行在其他地址请修改base_url generator KookArtBatchGenerator( base_urlhttp://localhost:8501, # 默认本地地址 output_dir./my_art_collection # 保存目录 ) print(请选择生成模式:) print(1. 单次生成测试用) print(2. 批量生成手动输入) print(3. 从文件批量生成) print(4. 查看今日生成记录) choice input(\n请输入选择 (1-4): ).strip() if choice 1: # 单次生成测试 prompt input(请输入艺术描述: ).strip() if prompt: generator.generate_single(prompt) else: print(❌ 提示词不能为空) elif choice 2: # 批量生成 print(\n请输入提示词每行一个空行结束:) prompts [] while True: line input().strip() if not line: break prompts.append(line) if prompts: generator.generate_batch(prompts) else: print(❌ 没有输入提示词) elif choice 3: # 从文件生成 filepath input(请输入提示词文件路径: ).strip() if filepath: generator.generate_from_file(filepath) else: print(❌ 文件路径不能为空) elif choice 4: # 查看记录 metadata generator.metadata print(f\n 今日生成记录 ({datetime.now().strftime(%Y-%m-%d)})) print(f 总生成数: {metadata[total_count]}) print(f✅ 成功: {len(metadata[generated_images])}) print(f❌ 失败: {metadata[failed_count]}) if metadata[generated_images]: print(\n 作品列表:) for i, img in enumerate(metadata[generated_images], 1): print(f{i:3d}. {img[filename]}) print(f 提示词: {img[prompt][:60]}...) print(f 时间: {img[timestamp][11:19]}) else: print(❌ 无效选择) if __name__ __main__: main()2.4 配置脚本参数脚本中有几个关键参数需要根据你的实际情况调整# 最重要的配置艺术馆地址 generator KookArtBatchGenerator( base_urlhttp://localhost:8501, # 改成你的艺术馆地址 output_dir./my_art_collection # 作品保存目录 )base_url如果你的艺术馆运行在别的地址或端口需要修改这里output_dir生成的作品保存位置可以改成你喜欢的路径3. 脚本功能详解与使用指南3.1 核心功能模块解析这个脚本虽然代码量不大但包含了几个非常实用的功能模块让我们逐一了解智能命名系统脚本不是简单用数字1、2、3来命名文件而是从你的提示词中提取关键词。比如你输入“星空下的孤独城堡”它会生成类似“001_星空_孤独_城堡_143022.png”的文件名让你一眼就能看出图片内容。元数据管理每次生成都会自动记录详细信息到JSON文件中包括使用的提示词生成时间戳参数设置步数、CFG值等成功/失败统计容错与重试机制网络不稳定或艺术馆临时问题可能导致生成失败。脚本会自动重试默认2次确保重要任务不会因为偶然错误而中断。进度可视化批量生成时脚本会实时显示进度让你清楚知道已经完成了多少还有多少在等待。3.2 四种使用模式实战演示模式一单次生成测试当你想要测试脚本是否正常工作或者只想生成单张图片时可以使用这个模式。# 运行脚本 python batch_art_generator.py # 选择模式1 # 输入提示词比如月光下的神秘森林厚涂油画风格梦幻光影脚本会调用艺术馆生成图片并自动保存到按日期创建的文件夹中。模式二交互式批量生成这是最常用的模式适合临时有一批创意需要实现。# 运行脚本并选择模式2 python batch_art_generator.py # 然后逐行输入你的创意 # 清晨的海边浪花拍打礁石印象派风格 # 未来城市夜景霓虹灯光赛博朋克 # 中世纪骑士与龙史诗战斗场景浪漫主义 # 输入空行结束脚本会按顺序生成所有图片每张之间有几秒间隔避免服务器压力过大。模式三从文件批量生成当你有一个完整的项目需要生成大量图片时可以提前准备好提示词文件。首先创建一个文本文件比如project_prompts.txt# 游戏角色概念图 一位身穿银色盔甲的女骑士手持发光长剑站在废墟上厚涂油画 神秘的魔法师长袍上有星空图案手中凝聚能量梦幻光影 敏捷的精灵弓箭手森林背景月光洒在身上浪漫主义风格 # 场景概念图 被遗忘的古代神庙藤蔓缠绕阳光从裂缝照入史诗感 未来实验室全息屏幕机器人助手科技感 童话风格的小镇彩色房子会说话的小动物温馨治愈然后运行脚本python batch_art_generator.py # 选择模式3 # 输入文件路径project_prompts.txt脚本会自动读取文件中的所有提示词支持注释和空行然后开始批量生成。模式四查看生成记录想看看今天已经生成了哪些作品选择模式4脚本会显示完整的统计信息和作品列表。3.3 高级参数定制脚本支持一些高级参数调整你可以直接修改代码或扩展功能# 在generate_single或generate_batch方法中可以传递这些参数 generator.generate_single( prompt你的艺术描述, steps15, # 生成步数推荐10-15 cfg_scale2.0, # 提示词相关性推荐2.0 enginekook # 引擎选择kook或zimage ) # 批量生成时的额外控制 generator.generate_batch( promptsprompt_list, max_retries3, # 失败重试次数 delay_between5 # 生成间隔秒数 )4. 实际应用场景与技巧4.1 游戏开发快速生成概念图集假设你正在开发一款奇幻游戏需要为不同区域生成环境概念图。你可以这样组织# 创建一个专门的项目脚本 def generate_game_concepts(): generator KookArtBatchGenerator( base_urlhttp://localhost:8501, output_dir./game_project/concept_art ) # 森林区域 forest_prompts [ 神秘的古森林参天巨树阳光透过树叶厚涂油画, 森林中的精灵村落树屋发光蘑菇梦幻光影, 被遗忘的森林神庙石像藤蔓神秘氛围, 森林深处的湖泊倒影雾气宁静感 ] # 雪山区域 snow_prompts [ 巍峨的雪山冰川极光史诗感, 雪山中的温泉蒸汽松树宁静, 冰封的古城遗迹冰柱古老符文, 暴风雪中的登山者坚韧生存 ] print(开始生成森林概念图...) generator.generate_batch(forest_prompts) print(\n开始生成雪山概念图...) generator.generate_batch(snow_prompts) print(\n✅ 所有概念图生成完成) if __name__ __main__: generate_game_concepts()4.2 设计工作创建风格统一的素材库如果你是设计师需要为某个品牌项目创建一系列风格统一的图片def generate_brand_assets(brand_style, themes): 为品牌生成风格统一的素材 generator KookArtBatchGenerator( output_dirf./brand_projects/{brand_style} ) all_prompts [] for theme in themes: # 根据品牌风格和主题构建提示词 prompt f{theme}{brand_style}风格商业插画高质量 all_prompts.append(prompt) # 批量生成 results generator.generate_batch(all_prompts) # 生成使用报告 report f 品牌素材生成报告 品牌风格: {brand_style} 生成主题: {len(themes)}个 成功生成: {len(results)}张 文件位置: {generator.today_dir} 建议用途: - 社交媒体配图 - 网站背景 - 宣传物料 - PPT插图 print(report) # 保存报告 with open(generator.today_dir / 生成报告.txt, w, encodingutf-8) as f: f.write(report) # 使用示例 themes [团队合作, 创新思维, 客户服务, 技术领先, 未来愿景] generate_brand_assets(现代简约插画, themes)4.3 艺术探索系统化尝试不同风格想要系统探索某种艺术风格可以创建参数矩阵def explore_art_style(base_prompt, style_variations): 系统探索艺术风格 generator KookArtBatchGenerator( output_dirf./style_exploration/{base_prompt[:20]} ) prompts [] for style in style_variations: # 组合基础主题和不同风格 full_prompt f{base_prompt}{style}风格 prompts.append(full_prompt) # 还可以尝试不同的构图 prompts.append(f{base_prompt}特写镜头{style}风格) prompts.append(f{base_prompt}广角视角{style}风格) print(f开始探索 {len(prompts)} 种风格变体...) generator.generate_batch(prompts) print(f\n探索完成你可以在 {generator.today_dir} 查看所有作品) print(建议) print(1. 快速浏览所有图片标记喜欢的风格) print(2. 对比同一主题的不同风格表现) print(3. 记录下最有效的风格关键词) # 使用示例 base_theme 海边日落 styles [印象派, 浪漫主义, 现代艺术, 水墨画, 卡通, 写实] explore_art_style(base_theme, styles)4.4 实用技巧与注意事项技巧1提示词优化使用具体的形容词“璀璨的星空”比“星空”更好包含风格关键词“厚涂油画风格”、“梦幻光影”描述构图“特写镜头”、“广角视角”、“对称构图”指定色彩“金色调”、“冷色调”、“鲜艳色彩”技巧2批量生成策略先小批量测试3-5张确认效果后再大批量生成相似的提示词放在一起生成便于比较长时间批量生成时可以分批次进行避免内存累积技巧3文件管理脚本会自动按日期创建文件夹方便整理元数据文件记录了所有生成信息可用于后续分析建议定期备份重要的作品集注意事项确保艺术馆服务稳定运行大批量生成时注意间隔时间避免服务器压力过大生成的图片文件较大1024x1024确保磁盘空间充足如果生成失败检查网络连接和艺术馆日志5. 脚本扩展与自定义5.1 添加水印功能如果你需要为生成的作品添加版权信息或品牌水印可以扩展脚本from PIL import Image, ImageDraw, ImageFont class WatermarkedArtGenerator(KookArtBatchGenerator): 带水印的艺术生成器 def __init__(self, watermark_text© My Art, **kwargs): super().__init__(**kwargs) self.watermark_text watermark_text # 尝试加载字体 try: self.font ImageFont.truetype(arial.ttf, 20) except: self.font ImageFont.load_default() def _add_watermark(self, image_path): 为图片添加水印 try: img Image.open(image_path) # 创建水印层 watermark Image.new(RGBA, img.size, (0, 0, 0, 0)) draw ImageDraw.Draw(watermark) # 计算水印位置右下角 text_width, text_height draw.textsize(self.watermark_text, self.font) position (img.width - text_width - 20, img.height - text_height - 20) # 绘制水印半透明 draw.text(position, self.watermark_text, fontself.font, fill(255, 255, 255, 128)) # 合并图片 watermarked Image.alpha_composite( img.convert(RGBA), watermark ).convert(RGB) # 保存覆盖原文件或另存 watermarked.save(image_path) return True except Exception as e: print(f❌ 添加水印失败: {e}) return False def generate_single(self, prompt, **kwargs): 重写生成方法添加水印 result super().generate_single(prompt, **kwargs) if result and self.watermark_text: self._add_watermark(result) print(f 已添加水印: {self.watermark_text}) return result # 使用带水印的生成器 watermark_generator WatermarkedArtGenerator( base_urlhttp://localhost:8501, output_dir./watermarked_art, watermark_text© 2024 My Studio )5.2 集成到自动化工作流你可以把这个脚本集成到更大的自动化流程中比如def complete_art_workflow(theme, output_formatprint): 完整的艺术创作工作流 print(f 开始艺术创作工作流: {theme}) print( * 50) # 1. 生成概念草图 print(1. 生成概念草图...) sketch_generator KookArtBatchGenerator( output_dirf./workflow/{theme}/sketches ) sketch_prompts [ f{theme}概念草图快速构图黑白线条, f{theme}不同视角概念探索, f{theme}关键元素特写 ] sketches sketch_generator.generate_batch(sketch_prompts) # 2. 生成完整作品 print(\n2. 生成完整作品...) final_generator KookArtBatchGenerator( output_dirf./workflow/{theme}/final ) final_prompts [ f{theme}完整作品厚涂油画精细细节高清, f{theme}不同色彩方案, f{theme}{output_format}用途优化 ] finals final_generator.generate_batch(final_prompts) # 3. 生成变体 print(\n3. 生成风格变体...) variant_generator KookArtBatchGenerator( output_dirf./workflow/{theme}/variants ) styles [水彩, 数字绘画, 卡通, 写实] variant_prompts [f{theme}{style}风格 for style in styles] variants variant_generator.generate_batch(variant_prompts) # 4. 生成报告 print(\n4. 生成工作报告...) report generate_workflow_report(theme, sketches, finals, variants) print(f\n✅ 工作流完成) print(f 所有文件保存在: ./workflow/{theme}/) print(f 报告已生成) return report5.3 错误处理与日志增强为了更好的稳定性可以增强错误处理和日志记录import logging from logging.handlers import RotatingFileHandler class RobustArtGenerator(KookArtBatchGenerator): 增强版的稳定生成器 def __init__(self, **kwargs): super().__init__(**kwargs) # 设置日志 self.logger logging.getLogger(__name__) self.logger.setLevel(logging.INFO) # 文件日志自动轮转 file_handler RotatingFileHandler( art_generator.log, maxBytes10*1024*1024, # 10MB backupCount5 ) file_handler.setFormatter( logging.Formatter(%(asctime)s - %(levelname)s - %(message)s) ) self.logger.addHandler(file_handler) # 控制台日志 console_handler logging.StreamHandler() console_handler.setFormatter( logging.Formatter(%(levelname)s: %(message)s) ) self.logger.addHandler(console_handler) def generate_single(self, prompt, **kwargs): 增强的错误处理 self.logger.info(f开始生成: {prompt[:50]}...) try: result super().generate_single(prompt, **kwargs) if result: self.logger.info(f生成成功: {Path(result).name}) else: self.logger.warning(f生成失败: {prompt[:30]}...) return result except Exception as e: self.logger.error(f生成异常: {e}, exc_infoTrue) return None def generate_batch(self, prompts, **kwargs): 批量生成增强 self.logger.info(f开始批量生成 {len(prompts)} 张图片) start_time time.time() results super().generate_batch(prompts, **kwargs) elapsed time.time() - start_time self.logger.info( f批量生成完成: {len(results)}/{len(prompts)} 成功, f耗时: {elapsed:.1f}秒 ) return results6. 总结通过这个批量生成脚本我们成功地将KOOK真实幻想艺术馆从一个单次创作工具升级为了一个高效的生产力平台。让我们回顾一下这个方案的核心价值效率提升从手动一张张生成、命名、保存到全自动批量处理效率提升不是一点点。对于需要大量素材的项目这个脚本可以节省数小时甚至数天的时间。创作流程优化脚本让创作流程更加系统化。你可以提前规划好所有提示词然后让脚本自动执行期间你可以去做其他更有创意的工作。文件管理规范化自动按日期分类、智能命名、元数据记录这些功能让文件管理变得井井有条再也不需要为“那张图放哪了”而烦恼。可扩展性强脚本采用模块化设计你可以轻松添加新功能比如水印、格式转换、质量检查等打造属于自己的专属创作工具链。降低技术门槛即使你不是专业程序员也能通过简单的配置文件修改来使用这个脚本。四种使用模式覆盖了从测试到生产的各种场景。艺术创作的本质是表达和探索而不是重复劳动。技术应该服务于创意而不是成为创意的障碍。这个脚本正是基于这样的理念设计的——它处理繁琐的技术细节让你可以更专注于艺术本身。无论是游戏开发的概念设计还是商业项目的素材准备或是纯粹的个人艺术探索这个工具都能成为你的得力助手。它让KOOK真实幻想艺术馆的强大能力得以充分发挥让批量创作变得简单而优雅。记住最好的工具是那些能够融入你的工作流让你几乎感觉不到它们存在的工具。这个脚本正是如此——它安静地在后台工作而你只需要专注于创作。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。