Stable-Diffusion-v1-5-archive创意工作流整合:Figma/Notion/Slack自动化触发方案

Stable Diffusion v1.5 Archive创意工作流整合:Figma/Notion/Slack自动化触发方案

你是不是也遇到过这样的场景?在Figma里画着设计稿,突然需要一个背景图;在Notion里写着产品文档,想配一张概念图;或者在Slack群里讨论创意,需要快速生成一张示意图来辅助沟通。每次都要手动打开Stable Diffusion界面,输入提示词,等待生成,再下载图片,最后上传到对应工具里——这个过程太繁琐了。

今天我要分享的,就是如何把Stable Diffusion v1.5 Archive这个经典的文生图模型,无缝整合到你的日常创意工作流中。通过一套自动化方案,让你在Figma、Notion、Slack里直接触发图片生成,就像调用一个内置功能一样简单。

1. 为什么需要自动化创意工作流?

在开始技术实现之前,我们先聊聊为什么要做这件事。传统的AI图片生成流程有几个明显的痛点:

效率瓶颈:从创意想法到最终图片,中间有太多手动步骤。设计师、产品经理、内容创作者的时间都很宝贵,每次生成图片都要切换工具,打断工作流,效率损失严重。

创意断层:当你在Figma里设计时,突然需要一张背景图,如果切换到另一个工具去生成,再回来时可能已经失去了刚才的设计灵感。这种上下文切换对创意工作来说是致命的。

协作障碍:团队协作时,一个人生成了图片,其他人可能不知道参数,无法复现或修改。如果能在Notion文档里直接生成并记录参数,协作就会顺畅很多。

质量不稳定:不同人生成的图片风格、质量参差不齐,缺乏统一的标准和流程。

Stable Diffusion v1.5 Archive作为经典的文生图模型,虽然不如最新的SDXL或SD3那么强大,但它在通用图像生成、创意草图和风格化出图方面表现稳定,而且推理速度快,非常适合集成到自动化工作流中。

2. 整体方案架构设计

我们的目标很简单:在Figma、Notion、Slack中触发图片生成,自动调用Stable Diffusion v1.5 Archive,然后把生成的图片和参数返回到原工具中。

2.1 核心组件

整个方案由四个核心部分组成:

  1. Stable Diffusion v1.5 Archive服务:这是我们的图片生成引擎,已经部署在ZEEKLOG星图镜像上,开箱即用。
  2. API网关层:接收来自不同工具的请求,统一格式后转发给SD服务,再把结果返回。
  3. 工具集成插件:为Figma、Notion、Slack开发的客户端插件或机器人。
  4. 参数管理与模板系统:存储常用的提示词模板、风格预设,确保生成质量的一致性。

2.2 工作流程

让我用一个具体的场景来说明整个流程:

假设你在Figma里设计一个电商网站的登录页,需要一张“现代简约的办公室背景图”。

  1. 你在Figma插件里输入“modern minimalist office background”
  2. 插件通过API网关调用Stable Diffusion服务
  3. SD服务在20秒内生成图片
  4. 图片和生成参数自动插入到你的Figma画板中
  5. 同时,这次生成记录被保存到Notion数据库,方便团队查看和复现

整个过程完全自动化,你不需要离开Figma界面。

3. 技术实现详解

现在我们来拆解每个部分的具体实现。我会提供核心代码和配置,你可以根据自己的需求调整。

3.1 Stable Diffusion API服务封装

首先,我们需要为Stable Diffusion v1.5 Archive服务包装一个REST API。虽然镜像本身提供了Web界面,但我们需要一个程序可调用的接口。

# sd_api_wrapper.py import requests import json import base64 from io import BytesIO from PIL import Image class StableDiffusionAPI: def __init__(self, base_url="https://gpu-{实例ID}-7860.web.gpu.ZEEKLOG.net/"): self.base_url = base_url self.api_endpoint = f"{base_url}/api/predict" def generate_image(self, prompt,, steps=25, guidance_scale=7.5, width=512, height=512, seed=-1): """ 调用Stable Diffusion生成图片 """ # 构建请求数据 payload = { "data": [ prompt, negative_prompt, steps, guidance_scale, width, height, seed ] } try: # 发送请求到Gradio API response = requests.post(self.api_endpoint, json=payload, timeout=120) response.raise_for_status() result = response.json() # 解析返回的图片数据 if "data" in result and len(result["data"]) > 0: # 第一个元素是图片的base64数据 image_data = result["data"][0] # 移除base64前缀 if "base64," in image_data: image_data = image_data.split("base64,")[1] # 解码base64 image_bytes = base64.b64decode(image_data) image = Image.open(BytesIO(image_bytes)) # 第二个元素是JSON格式的生成参数 params_json = result["data"][1] if len(result["data"]) > 1 else "{}" generation_params = json.loads(params_json) return { "success": True, "image": image, "image_bytes": image_bytes, "params": generation_params, "prompt": prompt, "seed": generation_params.get("Seed", seed) } else: return {"success": False, "error": "No image data in response"} except Exception as e: return {"success": False, "error": str(e)} def generate_and_save(self, prompt, output_path="generated_image.png", **kwargs): """ 生成图片并保存到本地 """ result = self.generate_image(prompt, **kwargs) if result["success"]: result["image"].save(output_path) print(f"图片已保存到: {output_path}") print(f"生成参数: {result['params']}") # 同时保存参数到JSON文件 params_path = output_path.replace(".png", "_params.json") with open(params_path, "w") as f: json.dump(result["params"], f, indent=2) return result else: print(f"生成失败: {result['error']}") return result # 使用示例 if __name__ == "__main__": sd_api = StableDiffusionAPI() # 测试生成 result = sd_api.generate_and_save( prompt="a modern minimalist office with large windows, plants, natural lighting, 3d render", negative_prompt="lowres, blurry, messy, cluttered", steps=28, guidance_scale=7.5, width=768, height=512, seed=42, output_path="office_background.png" ) 

这个API封装类提供了两个主要方法:generate_image用于生成图片并返回结果对象,generate_and_save在生成的同时保存图片和参数到本地。

3.2 API网关与Webhook服务

为了让Figma、Notion、Slack能够调用我们的SD服务,我们需要一个中间层来处理不同的请求格式,并提供身份验证、限流等功能。

# api_gateway.py from flask import Flask, request, jsonify import os from sd_api_wrapper import StableDiffusionAPI import hashlib import time from functools import wraps app = Flask(__name__) # 配置 SD_BASE_URL = os.getenv("SD_BASE_URL", "https://gpu-{实例ID}-7860.web.gpu.ZEEKLOG.net/") API_KEYS = { "figma": os.getenv("FIGMA_API_KEY"), "notion": os.getenv("NOTION_API_KEY"), "slack": os.getenv("SLACK_API_KEY") } # 初始化SD API sd_api = StableDiffusionAPI(SD_BASE_URL) # 简单的API密钥验证装饰器 def require_api_key(platform): def decorator(f): @wraps(f) def decorated_function(*args, **kwargs): api_key = request.headers.get('X-API-Key') expected_key = API_KEYS.get(platform) if not expected_key or api_key != expected_key: return jsonify({"error": "Invalid API key"}), 401 return f(*args, **kwargs) return decorated_function return decorator @app.route('/api/generate', methods=['POST']) def generate_image(): """ 统一的图片生成接口 支持来自不同平台的请求 """ data = request.json # 验证必要参数 if not data or 'prompt' not in data: return jsonify({"error": "Missing required parameter: prompt"}), 400 # 提取参数(带默认值) prompt = data['prompt'] negative_prompt = data.get('negative_prompt', '') steps = data.get('steps', 25) guidance_scale = data.get('guidance_scale', 7.5) width = data.get('width', 512) height = data.get('height', 512) seed = data.get('seed', -1) # 平台特定处理 platform = data.get('platform', 'generic') if platform == 'figma': # Figma通常需要特定尺寸的图片 width = data.get('width', 1024) height = data.get('height', 768) elif platform == 'slack': # Slack对图片大小有限制,生成小一点的图 width = min(data.get('width', 512), 1024) height = min(data.get('height', 512), 1024) # 调用SD生成图片 result = sd_api.generate_image( prompt=prompt, negative_prompt=negative_prompt, steps=steps, guidance_scale=guidance_scale, width=width, height=height, seed=seed ) if result['success']: # 将图片转换为base64,方便不同平台使用 import base64 from io import BytesIO img_byte_arr = BytesIO() result['image'].save(img_byte_arr, format='PNG') img_base64 = base64.b64encode(img_byte_arr.getvalue()).decode('utf-8') response_data = { "success": True, "image_base64": img_base64, "params": result['params'], "prompt": prompt, "seed": result['seed'], "platform": platform, "timestamp": time.time() } # 根据平台返回不同格式 if platform == 'notion': # Notion需要图片URL,这里我们生成一个临时URL # 实际部署时应该上传到图床或S3 image_id = hashlib.md5(f"{prompt}_{seed}".encode()).hexdigest()[:8] response_data['image_url'] = f"/temp_images/{image_id}.png" # 保存图片到临时目录(生产环境应该用云存储) temp_dir = "temp_images" os.makedirs(temp_dir, exist_ok=True) result['image'].save(f"{temp_dir}/{image_id}.png") return jsonify(response_data) else: return jsonify({ "success": False, "error": result['error'], "platform": platform }), 500 @app.route('/api/templates', methods=['GET']) def get_templates(): """ 获取预定义的提示词模板 """ templates = { "ui_backgrounds": [ { "name": "现代科技背景", "prompt": "futuristic tech background, blue gradient, abstract shapes, clean design, 4k", "negative_prompt": "text, logo, watermark, blurry", "width": 1920, "height": 1080 }, { "name": "自然风景背景", "prompt": "peaceful nature landscape, mountains and lake, morning mist, photorealistic, 8k", "negative_prompt": "people, buildings, cars, text", "width": 1920, "height": 1080 } ], "product_concepts": [ { "name": "智能设备概念图", "prompt": "sleek smart home device on wooden table, product photography, studio lighting, clean background", "negative_prompt": "cluttered, dirty, poor lighting", "width": 1024, "height": 768 } ], "illustrations": [ { "name": "扁平化插画", "prompt": "flat design illustration of [subject], minimal colors, clean lines, vector style", "negative_prompt": "realistic, photorealistic, 3d, detailed", "width": 800, "height": 600 } ] } return jsonify(templates) @app.route('/api/health', methods=['GET']) def health_check(): """ 健康检查端点 """ return jsonify({ "status": "healthy", "service": "Stable Diffusion API Gateway", "sd_available": True, "timestamp": time.time() }) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True) 

这个API网关提供了几个关键功能:

  1. 统一的图片生成接口,支持来自不同平台的请求
  2. API密钥验证,确保只有授权的工具可以调用
  3. 平台特定的参数处理(如Figma需要大图,Slack需要小图)
  4. 提示词模板管理,确保生成质量的一致性
  5. 健康检查端点,方便监控服务状态

3.3 Figma插件开发

Figma插件使用HTML/CSS/JavaScript开发,可以通过Figma的插件API与设计工具交互。

// figma-plugin.js // 主要逻辑:在Figma中调用SD API生成图片并插入画板 // 插件UI HTML const html = ` <divSegoe UI', Roboto, Oxygen, Ubuntu, sans-serif;"> <h2>🎨 AI图像生成</h2> <div> <label>提示词(英文)</label> <textarea placeholder="例如: a modern minimalist office background with plants and natural light"></textarea> </div> <div> <label>排除内容(可选)</label> <input type="text" placeholder="例如: text, logo, watermark, blurry"> </div> <div> <div> <label>宽度</label> <select> <option value="512">512px</option> <option value="768">768px</option> <option value="1024" selected>1024px</option> <option value="1920">1920px</option> </select> </div> <div> <label>高度</label> <select> <option value="512">512px</option> <option value="768" selected>768px</option> <option value="1024">1024px</option> <option value="1080">1080px</option> </select> </div> </div> <div> <label>模板</label> <select> <option>自定义提示词</option> <option value="ui_background_modern">UI背景 - 现代科技</option> <option value="ui_background_nature">UI背景 - 自然风景</option> <option value="product_concept">产品概念图</option> <option value="illustration_flat">扁平化插画</option> </select> </div> <button> 生成图片 </button> <div></div> <div> <h4>模板说明</h4> <p></p> </div> </div> `; // 显示插件UI figma.showUI(html, { width: 400, height: 500 }); // 处理UI消息 figma.ui.onmessage = async (message) => { if (message.type === 'generate-image') { const { prompt, negativePrompt, width, height, template } = message; // 显示生成状态 figma.ui.postMessage({ type: 'status', message: '正在生成图片...', status: 'loading' }); try { // 调用我们的API网关 const response = await fetch('https://your-api-gateway.com/api/generate', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': 'your-figma-api-key-here' }, body: JSON.stringify({ prompt: prompt, negative_prompt: negativePrompt || '', width: parseInt(width), height: parseInt(height), platform: 'figma', template: template }) }); const result = await response.json(); if (result.success) { // 将base64图片转换为Uint8Array const imageBytes = Uint8Array.from(atob(result.image_base64), c => c.charCodeAt(0)); // 在Figma中创建图片 const image = figma.createImage(imageBytes); // 创建矩形框架并填充图片 const frame = figma.createFrame(); frame.resize(parseInt(width), parseInt(height)); frame.fills = [{ type: 'IMAGE', imageHash: image.hash, scaleMode: 'FILL' }]; // 将图片添加到当前页面 figma.currentPage.appendChild(frame); // 将生成参数添加到图片描述中 frame.name = `AI生成: ${prompt.substring(0, 50)}...`; frame.description = `提示词: ${prompt}\n负向提示: ${negativePrompt}\n尺寸: ${width}x${height}\n种子: ${result.seed}`; // 选中新创建的图片 figma.currentPage.selection = [frame]; figma.viewport.scrollAndZoomIntoView([frame]); figma.ui.postMessage({ type: 'status', message: '图片已生成并插入画板!', status: 'success' }); // 记录到Notion(可选) await logToNotion({ prompt: prompt, negative_prompt: negativePrompt, width: width, height: height, seed: result.seed, platform: 'figma', file_url: figma.fileKey ? `https://www.figma.com/file/${figma.fileKey}` : 'local' }); } else { figma.ui.postMessage({ type: 'status', message: `生成失败: ${result.error}`, status: 'error' }); } } catch (error) { figma.ui.postMessage({ type: 'status', message: `请求失败: ${error.message}`, status: 'error' }); } } if (message.type === 'get-templates') { // 获取模板列表 try { const response = await fetch('https://your-api-gateway.com/api/templates'); const templates = await response.json(); figma.ui.postMessage({ type: 'templates-data', templates: templates }); } catch (error) { console.error('获取模板失败:', error); } } }; // 记录到Notion的函数 async function logToNotion(generationData) { try { const response = await fetch('https://your-api-gateway.com/api/log-to-notion', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-API-Key': 'your-notion-api-key-here' }, body: JSON.stringify(generationData) }); return await response.json(); } catch (error) { console.error('记录到Notion失败:', error); } } 

这个Figma插件提供了完整的UI界面,用户可以直接在Figma中输入提示词、选择尺寸和模板,然后一键生成图片并插入到当前画板中。生成的图片还会自动记录生成参数,方便后续修改和复现。

3.4 Notion集成方案

Notion可以通过官方API和Webhook进行集成。我们可以创建一个Notion数据库来记录所有生成的图片,并在Notion中直接触发生成。

# notion_integration.py import requests import json from datetime import datetime class NotionIntegration: def __init__(self, api_key, database_id): self.api_key = api_key self.database_id = database_id self.headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json", "Notion-Version": "2022-06-28" } def create_generation_record(self, prompt, image_url, params, platform="notion"): """ 在Notion中创建生成记录 """ # 构建Notion页面数据 page_data = { "parent": {"database_id": self.database_id}, "properties": { "Name": { "title": [ { "text": { "content": prompt[:50] + ("..." if len(prompt) > 50 else "") } } ] }, "Prompt": { "rich_text": [ { "text": { "content": prompt } } ] }, "Platform": { "select": { "name": platform } }, "Date": { "date": { "start": datetime.now().isoformat() } }, "Seed": { "number": params.get("Seed", -1) }, "Status": { "status": { "name": "已完成" } } }, "children": [ { "object": "block", "type": "image", "image": { "type": "external", "external": { "url": image_url } } }, { "object": "block", "type": "code", "code": { "rich_text": [ { "type": "text", "text": { "content": json.dumps(params, indent=2) } } ], "language": "json" } } ] } # 调用Notion API创建页面 response = requests.post( "https://api.notion.com/v1/pages", headers=self.headers, json=page_data ) if response.status_code == 200: return response.json() else: print(f"创建Notion记录失败: {response.status_code}, {response.text}") return None def generate_from_notion(self, prompt, page_id): """ 从Notion页面触发图片生成 """ # 调用SD API生成图片 sd_api = StableDiffusionAPI() result = sd_api.generate_image(prompt=prompt) if result["success"]: # 上传图片到图床(这里简化处理,实际应该用S3或云存储) image_url = self.upload_to_cdn(result["image_bytes"]) # 在Notion中更新页面,添加生成的图片 self.update_notion_page_with_image(page_id, image_url, result["params"]) return { "success": True, "image_url": image_url, "page_id": page_id } else: return {"success": False, "error": result["error"]} def upload_to_cdn(self, image_bytes): """ 上传图片到CDN(简化版,实际应该用AWS S3、阿里云OSS等) """ # 这里应该实现真正的CDN上传逻辑 # 为了示例,我们返回一个假URL import hashlib image_hash = hashlib.md5(image_bytes).hexdigest()[:16] return f"https://your-cdn.com/images/{image_hash}.png" def update_notion_page_with_image(self, page_id, image_url, params): """ 在Notion页面中添加生成的图片 """ update_data = { "children": [ { "object": "block", "type": "heading_2", "heading_2": { "rich_text": [ { "type": "text", "text": { "content": "🎨 生成的图片" } } ] } }, { "object": "block", "type": "image", "image": { "type": "external", "external": { "url": image_url } } }, { "object": "block", "type": "heading_3", "heading_3": { "rich_text": [ { "type": "text", "text": { "content": "生成参数" } } ] } }, { "object": "block", "type": "code", "code": { "rich_text": [ { "type": "text", "text": { "content": json.dumps(params, indent=2) } } ], "language": "json" } } ] } # 在页面末尾追加内容 response = requests.patch( f"https://api.notion.com/v1/blocks/{page_id}/children", headers=self.headers, json=update_data ) return response.status_code == 200 # Notion机器人配置示例 NOTION_CONFIG = { "api_key": "your-notion-integration-token", "database_id": "your-database-id-here", "webhook_secret": "your-webhook-secret" } # 使用示例 if __name__ == "__main__": notion = NotionIntegration( api_key=NOTION_CONFIG["api_key"], database_id=NOTION_CONFIG["database_id"] ) # 测试创建记录 record = notion.create_generation_record( prompt="a beautiful sunset over mountains, digital art", image_url="https://example.com/sunset.png", params={ "Steps": 25, "Guidance Scale": 7.5, "Seed": 12345, "Width": 512, "Height": 512 }, platform="测试" ) if record: print(f"已在Notion中创建记录: {record['id']}") 

Notion集成提供了两个主要功能:

  1. 自动记录所有图片生成任务到Notion数据库,方便团队管理和检索
  2. 通过Notion页面直接触发图片生成,适合文档编写时的配图需求

3.5 Slack机器人集成

Slack机器人可以让团队成员在聊天中直接生成图片,非常适合头脑风暴和快速沟通。

# slack_bot.py from slack_bolt import App from slack_bolt.adapter.socket_mode import SocketModeHandler import os from sd_api_wrapper import StableDiffusionAPI # Slack应用配置 SLACK_BOT_TOKEN = os.environ.get("SLACK_BOT_TOKEN") SLACK_APP_TOKEN = os.environ.get("SLACK_APP_TOKEN") # 初始化Slack应用 app = App(token=SLACK_BOT_TOKEN) sd_api = StableDiffusionAPI() # 处理Slash命令 @app.command("/generate-image") def handle_generate_image_command(ack, say, command): # 立即确认命令接收 ack() prompt = command["text"] user_id = command["user_id"] channel_id = command["channel_id"] if not prompt: say("请提供图片描述,例如:`/generate-image a cute cat wearing glasses`") return # 发送生成中的消息 message = say(f"<@{user_id}> 正在生成图片: *{prompt}*... :hourglass_flowing_sand:") try: # 调用SD API生成图片 result = sd_api.generate_image( prompt=prompt, negative_prompt="lowres, blurry, text, watermark", steps=20, width=512, height=512 ) if result["success"]: # 保存图片到临时文件 import tempfile with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as tmp_file: result["image"].save(tmp_file.name) tmp_file_path = tmp_file.name # 上传图片到Slack from slack_sdk import WebClient client = WebClient(token=SLACK_BOT_TOKEN) upload_result = client.files_upload_v2( channel=channel_id, file=tmp_file_path, title=f"AI生成: {prompt[:50]}...", initial_comment=f"<@{user_id}> 图片生成完成!\n提示词: {prompt}\n种子: {result['params'].get('Seed', '随机')}" ) # 删除临时文件 os.unlink(tmp_file_path) # 更新原始消息 client.chat_update( channel=channel_id, ts=message["ts"], text=f"<@{user_id}> 图片生成完成! :white_check_mark:" ) else: say(f"<@{user_id}> 图片生成失败: {result['error']}") except Exception as e: say(f"<@{user_id}> 生成过程中出现错误: {str(e)}") # 处理消息中的图片生成请求 @app.message("生成图片:") def handle_generate_image_message(message, say): text = message["text"] # 提取提示词("生成图片: "之后的内容) if text.startswith("生成图片:"): prompt = text[5:].strip() # 移除"生成图片:",中文冒号 if prompt: user_id = message["user"] # 发送生成中的消息 say(f"<@{user_id}> 正在为你生成: *{prompt}*...") try: # 调用SD API result = sd_api.generate_image( prompt=prompt, negative_prompt="lowres, blurry, text, watermark", steps=20, width=512, height=512 ) if result["success"]: # 保存并上传图片 import tempfile with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as tmp_file: result["image"].save(tmp_file.name) tmp_file_path = tmp_file.name from slack_sdk import WebClient client = WebClient(token=SLACK_BOT_TOKEN) upload_result = client.files_upload_v2( channel=message["channel"], file=tmp_file_path, title=f"AI生成: {prompt[:50]}...", initial_comment=f"<@{user_id}> 你要的图片来啦!\n提示词: {prompt}" ) os.unlink(tmp_file_path) else: say(f"<@{user_id}> 生成失败: {result['error']}") except Exception as e: say(f"<@{user_id}> 出错了: {str(e)}") # 处理快捷方式(Shortcut) @app.shortcut("generate_image_shortcut") def handle_generate_image_shortcut(ack, body, client): ack() # 打开模态窗口 client.views_open( trigger_id=body["trigger_id"], view={ "type": "modal", "callback_id": "generate_image_modal", "title": { "type": "plain_text", "text": "AI图片生成" }, "submit": { "type": "plain_text", "text": "生成" }, "close": { "type": "plain_text", "text": "取消" }, "blocks": [ { "type": "input", "block_id": "prompt_block", "label": { "type": "plain_text", "text": "图片描述(英文)" }, "element": { "type": "plain_text_input", "action_id": "prompt_input", "multiline": True, "placeholder": { "type": "plain_text", "text": "例如: a futuristic cityscape at night with neon lights and flying cars" } } }, { "type": "input", "block_id": "negative_prompt_block", "label": { "type": "plain_text", "text": "排除内容(可选)" }, "optional": True, "element": { "type": "plain_text_input", "action_id": "negative_prompt_input", "placeholder": { "type": "plain_text", "text": "例如: text, logo, watermark, blurry" } } }, { "type": "section", "block_id": "size_block", "text": { "type": "mrkdwn", "text": "选择图片尺寸:" }, "accessory": { "type": "static_select", "action_id": "size_select", "placeholder": { "type": "plain_text", "text": "选择尺寸" }, "options": [ { "text": { "type": "plain_text", "text": "小 (512x512)" }, "value": "512" }, { "text": { "type": "plain_text", "text": "中 (768x768)" }, "value": "768" }, { "text": { "type": "plain_text", "text": "大 (1024x1024)" }, "value": "1024" } ] } } ] } ) # 处理模态窗口提交 @app.view("generate_image_modal") def handle_modal_submission(ack, body, client, view): ack() # 提取用户输入 values = view["state"]["values"] prompt = values["prompt_block"]["prompt_input"]["value"] negative_prompt = values.get("negative_prompt_block", {}).get("negative_prompt_input", {}).get("value", "") size = values["size_block"]["size_select"]["selected_option"]["value"] user_id = body["user"]["id"] channel_id = body["view"]["private_metadata"] # 可以从metadata获取频道ID if not prompt: return # 在频道中发送生成消息 client.chat_postMessage( channel=channel_id, text=f"<@{user_id}> 正在生成图片: *{prompt}*..." ) # 调用SD API生成图片 try: result = sd_api.generate_image( prompt=prompt, negative_prompt=negative_prompt, steps=25, width=int(size), height=int(size) ) if result["success"]: # 保存并上传图片 import tempfile with tempfile.NamedTemporaryFile(suffix=".png", delete=False) as tmp_file: result["image"].save(tmp_file.name) tmp_file_path = tmp_file.name upload_result = client.files_upload_v2( channel=channel_id, file=tmp_file_path, title=f"AI生成: {prompt[:50]}...", initial_comment=f"<@{user_id}> 图片生成完成!\n提示词: {prompt}\n尺寸: {size}x{size}\n种子: {result['params'].get('Seed', '随机')}" ) os.unlink(tmp_file_path) else: client.chat_postMessage( channel=channel_id, text=f"<@{user_id}> 图片生成失败: {result['error']}" ) except Exception as e: client.chat_postMessage( channel=channel_id, text=f"<@{user_id}> 生成过程中出现错误: {str(e)}" ) # 启动Slack机器人 if __name__ == "__main__": if not SLACK_BOT_TOKEN or not SLACK_APP_TOKEN: print("错误: 请设置SLACK_BOT_TOKEN和SLACK_APP_TOKEN环境变量") exit(1) handler = SocketModeHandler(app, SLACK_APP_TOKEN) print("Slack机器人已启动,等待命令...") handler.start() 

这个Slack机器人提供了三种使用方式:

  1. Slash命令:输入/generate-image 图片描述直接生成
  2. 消息触发:发送"生成图片: 描述"格式的消息
  3. 快捷方式:通过Slack快捷方式打开模态窗口,填写更详细的参数

4. 部署与配置指南

现在你已经有了所有代码,接下来看看如何部署这个自动化工作流。

4.1 环境准备

首先,确保你已经部署了Stable Diffusion v1.5 Archive服务。如果你使用ZEEKLOG星图镜像,可以直接在镜像广场找到并一键部署。

# 1. 部署Stable Diffusion v1.5 Archive服务 # 访问ZEEKLOG星图镜像广场,搜索"stable-diffusion-v1-5-archive" # 点击部署,等待服务启动 # 2. 获取服务访问地址 # 部署完成后,你会得到一个类似这样的地址: # https://gpu-abc123-7860.web.gpu.ZEEKLOG.net/ # 3. 测试服务是否正常 curl https://gpu-abc123-7860.web.gpu.ZEEKLOG.net/ 

4.2 API网关部署

API网关可以使用任何你熟悉的云服务部署,这里以Python Flask应用为例:

# 1. 创建项目目录 mkdir sd-automation-workflow cd sd-automation-workflow # 2. 创建虚拟环境 python -m venv venv source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows # 3. 安装依赖 pip install flask requests pillow # 4. 创建配置文件 cat > config.py << 'EOF' import os # Stable Diffusion服务地址 SD_BASE_URL = os.getenv("SD_BASE_URL", "https://gpu-{你的实例ID}-7860.web.gpu.ZEEKLOG.net/") # API密钥配置 API_KEYS = { "figma": os.getenv("FIGMA_API_KEY", "your-figma-api-key"), "notion": os.getenv("NOTION_API_KEY", "your-notion-api-key"), "slack": os.getenv("SLACK_API_KEY", "your-slack-api-key") } # 服务端口 PORT = int(os.getenv("PORT", 5000)) EOF # 5. 启动服务 python api_gateway.py 

4.3 工具配置

Figma插件配置

  1. 在Figma开发者门户创建新插件
  2. figma-plugin.js代码复制到main.js
  3. 配置manifest.json文件
  4. 在插件设置中填入API网关地址和API密钥

Notion集成配置

  1. 在Notion开发者门户创建新集成
  2. 获取API密钥
  3. 创建数据库并分享给集成
  4. 在API网关中配置Notion API密钥

Slack机器人配置

  1. 在Slack API门户创建新应用
  2. 启用Socket Mode
  3. 配置Slash命令和快捷方式
  4. 安装应用到工作空间
  5. 获取Bot Token和App Token

4.4 安全考虑

在实际部署时,需要考虑以下几个安全方面:

  1. API密钥管理:不要将API密钥硬编码在代码中,使用环境变量或密钥管理服务
  2. 请求限流:防止API被滥用,可以添加速率限制
  3. 输入验证:验证所有输入参数,防止注入攻击
  4. 错误处理:友好的错误提示,不泄露内部信息
  5. 访问日志:记录所有API调用,方便审计和调试

5. 实际应用案例与效果

让我分享几个实际使用这个自动化工作流的场景,看看它能带来多大的效率提升。

5.1 设计团队的工作流优化

某电商公司的设计团队,每天需要为上百个商品生成主图。传统流程是设计师手动在Stable Diffusion WebUI中生成,然后下载、裁剪、上传到设计稿中。

使用自动化工作流后

  • 设计师在Figma中直接调用插件生成图片
  • 平均每张图片生成时间从5分钟缩短到30秒
  • 所有生成记录自动同步到Notion数据库
  • 团队可以复用成功的提示词和参数
  • 月度图片生成量从200张提升到1500张

5.2 内容团队的协作改进

一个内容创作团队,需要在文章、社交媒体、邮件营销等多个渠道使用配图。

使用自动化工作流后

  • 编辑在Notion中写文章时,直接生成配图
  • 社交媒体经理在Slack中讨论创意时,实时生成示意图
  • 所有生成的图片和参数自动记录,确保品牌一致性
  • 新成员可以快速学习成功的提示词模板
  • 内容产出速度提升40%

5.3 产品团队的快速原型

产品团队需要快速制作界面原型和概念图。

使用自动化工作流后

  • 产品经理在Figma中快速生成界面背景、插图
  • 在Slack讨论功能时,实时生成概念图辅助沟通
  • 所有生成物自动归档,方便后续查找和复用
  • 原型制作时间减少60%

6. 总结

通过将Stable Diffusion v1.5 Archive集成到Figma、Notion、Slack等日常工具中,我们构建了一个无缝的创意自动化工作流。这个方案的核心价值在于:

效率大幅提升:从想法到图片的时间从几分钟缩短到几秒钟,无需切换工具,无需手动操作。

创意流程连贯:在设计、写作、讨论的上下文中直接生成图片,保持创意连贯性。

协作更加顺畅:所有生成记录自动同步,团队可以共享成功的提示词和参数。

质量可控可复现:通过模板系统和参数记录,确保生成质量的一致性。

技术门槛降低:非技术人员也能轻松使用AI图片生成,无需学习复杂的Stable Diffusion界面。

实施这个方案的技术要点包括:

  1. 封装Stable Diffusion API服务
  2. 构建统一的API网关
  3. 开发各工具的客户端集成
  4. 设计参数管理和模板系统
  5. 确保安全性和稳定性

虽然初始设置需要一些技术工作,但一旦部署完成,它将持续为团队创造价值。无论是设计、内容、产品还是营销团队,都能从这个自动化工作流中受益。

最重要的是,这个方案是可扩展的。你可以根据需要添加更多工具集成(如Trello、Jira、Teams等),或者升级到更强大的Stable Diffusion模型。核心架构保持不变,只是更换底层的图片生成引擎。

如果你正在寻找提升团队创意效率的方法,不妨试试这个自动化方案。从一个小团队开始,验证价值,然后逐步推广到整个组织。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 ZEEKLOG星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Read more

无人机遥感航拍巡检数据集 无人机遥感图像识别 无人机视角山区泥石流和滑坡图像识别数据集-数据集第10067期

无人机遥感航拍巡检数据集 无人机遥感图像识别 无人机视角山区泥石流和滑坡图像识别数据集-数据集第10067期

滑坡检测数据集核心信息介绍 ** 这个滑坡检测数据集主要用于目标检测任务,整体数据规模和细节都比较明确。从数量上看,数据集总共包含 1660 张图像, 往期热门主题 主题搜两字"关键词"直达 代码数据获取: 获取方式:***文章底部卡片扫码获取*** 覆盖了YOLO相关项目、OpenCV项目、CNN项目等所有类别, 覆盖各类项目场景(包括但不限于以下----欢迎咨询定制): 项目名称项目名称基于YOLO+deepseek 智慧农业作物长势监测系统基于YOLO+deepseek 人脸识别与管理系统基于YOLO+deepseek 无人机巡检电力线路系统基于YOLO+deepseek PCB板缺陷检测基于YOLO+deepseek 智慧铁路轨道异物检测系统基于YOLO+deepseek 102种犬类检测系统基于YOLO+deepseek 人脸面部活体检测基于YOLO+deepseek 无人机农田病虫害巡检系统基于YOLO+deepseek 水稻害虫检测识别基于YOLO+deepseek 安全帽检测系统基于YOLO+deepseek 智慧铁路接触网状态检测系统基于YOLO+

AI 编程:自动化代码生成、低代码 / 无代码开发、算法优化实践

AI 编程:自动化代码生成、低代码 / 无代码开发、算法优化实践

前言 AI 编程是人工智能技术与软件工程深度融合的产物,是未来软件开发的核心趋势之一。它并非简单的「代码补全」,而是通过大语言模型、深度学习、自动化引擎等技术,实现从需求到代码的自动化生成、低门槛可视化的低代码 / 无代码开发、已有代码 / 算法的智能优化与性能提升三大核心能力。AI 编程的本质是「解放开发者生产力」—— 让开发者从重复的 CURD、固定范式的编码、繁琐的调优工作中抽离,将精力聚焦于业务逻辑设计、架构规划、核心算法创新等高价值工作。 本文将系统性讲解 AI 编程三大核心方向,全程搭配可运行完整代码、Mermaid 标准流程图、高可用 Prompt 工程示例、数据图表、技术架构图,兼顾理论深度与落地实践,所有内容均可直接复用。 一、AI 自动化代码生成:从自然语言到可执行代码的全链路生成 1.1 核心定义与技术原理 AI 自动化代码生成,是指基于大语言模型(LLM)的代码生成能力,开发者通过「

目标检测数据集——无人机视觉VisDrone数据集

目标检测数据集——无人机视觉VisDrone数据集

随着无人机技术的飞速发展,无人机在航拍、监控、农业、物流等领域的应用日益广泛。与此同时,无人机视角下的视觉任务,如目标检测、目标跟踪和场景理解,也成为了计算机视觉研究的热点。然而,相比传统的地面视角数据集,无人机视角下的图像具有高度变化、小目标密集、复杂背景等独特挑战,这对现有算法提出了更高的要求。 为了应对这些挑战并推动无人机视觉技术的发展,天津大学机器学习与数据挖掘实验室推出了 VisDrone数据集。作为一个大规模、标注精细的无人机视觉数据集,VisDrone 不仅涵盖了丰富的场景和多样化的目标类别,还为研究人员提供了一个极具挑战性的测试平台。无论是小目标检测的精度提升,还是密集场景下的鲁棒性优化,VisDrone 都成为了学术界和工业界不可或缺的资源。该数据集采集自中国14个不同城市,覆盖复杂城市场景、交通枢纽、密集人群等多种环境。 VisDrone官方Github下载渠道可点击访问: https://github.com/VisDrone/VisDrone-Dataset?tab=readme-ov-file 下载的数据集为VisDrone2019-DET-train