$npx -y skills add Supreme-Ultimate/novel-to-script-team --skill image-to-prompt-skill从图片中提取视觉描述,生成可用于文生图的提示词。
| 1 | # image-to-prompt-skill |
| 2 | |
| 3 | ## 功能 |
| 4 | |
| 5 | 从图片中提取视觉描述,生成可用于文生图的提示词。 |
| 6 | |
| 7 | ## 使用场景 |
| 8 | |
| 9 | 1. **参考图分析**:分析参考图片,生成风格一致的提示词 |
| 10 | 2. **风格迁移**:从现有图片提取风格特征,应用到新场景 |
| 11 | 3. **提示词优化**:对比生成图片与目标效果,优化提示词 |
| 12 | 4. **资产复用**:从历史项目图片中提取提示词,复用到新项目 |
| 13 | |
| 14 | ## 输入 |
| 15 | |
| 16 | - **图片文件路径**:本地图片文件(PNG、JPG、WEBP 等) |
| 17 | - **分析维度**(可选): |
| 18 | - `full`:完整分析(默认,包含所有元素) |
| 19 | - `character`:聚焦人物(外观、服装、表情、姿态) |
| 20 | - `scene`:聚焦场景(环境、光线、氛围、道具) |
| 21 | - `composition`:聚焦构图(景别、角度、运镜、色彩) |
| 22 | |
| 23 | ## 输出 |
| 24 | |
| 25 | - **提示词文件**:`outputs/{剧本名}/reverse-prompts/{图片名}-prompt.md` |
| 26 | - **内容包含**: |
| 27 | - 原图路径 |
| 28 | - 分析维度 |
| 29 | - 提示词(叙事描述式) |
| 30 | - 关键元素清单(人物、场景、构图、色彩、光影、氛围) |
| 31 | |
| 32 | ## 执行流程 |
| 33 | |
| 34 | 1. **读取图片**:加载本地图片文件 |
| 35 | 2. **编码图片**:将图片编码为 base64 格式 |
| 36 | 3. **调用 API**:使用 gemini-3.1-pro-preview 模型分析图片 |
| 37 | 4. **提取元素**:根据分析维度提取关键视觉元素 |
| 38 | 5. **生成提示词**:将视觉元素转化为叙事描述式提示词 |
| 39 | 6. **输出文件**:保存提示词到指定路径 |
| 40 | |
| 41 | ## API 调用示例 |
| 42 | |
| 43 | ```python |
| 44 | from openai import OpenAI |
| 45 | import base64 |
| 46 | import os |
| 47 | |
| 48 | # 初始化客户端 |
| 49 | client = OpenAI( |
| 50 | api_key="your-api-key", |
| 51 | base_url=os.environ["NANO_BANANA_BASE_URL"] |
| 52 | ) |
| 53 | |
| 54 | # 读取并编码图片 |
| 55 | with open("image.jpg", "rb") as f: |
| 56 | image_data = base64.b64encode(f.read()).decode("utf-8") |
| 57 | |
| 58 | # 调用 API |
| 59 | response = client.chat.completions.create( |
| 60 | model="gemini-3.1-pro-preview", |
| 61 | messages=[{ |
| 62 | "role": "user", |
| 63 | "content": [ |
| 64 | { |
| 65 | "type": "image_url", |
| 66 | "image_url": { |
| 67 | "url": f"data:image/jpeg;base64,{image_data}" |
| 68 | } |
| 69 | }, |
| 70 | { |
| 71 | "type": "text", |
| 72 | "text": "请详细描述这张图片的视觉元素,包括人物、场景、构图、色彩、光影、氛围等,生成可用于文生图的提示词。" |
| 73 | } |
| 74 | ] |
| 75 | }] |
| 76 | ) |
| 77 | |
| 78 | prompt = response.choices[0].message.content |
| 79 | print(prompt) |
| 80 | ``` |
| 81 | |
| 82 | ## 提示词生成原则 |
| 83 | |
| 84 | 1. **叙事描述式**:使用完整句子描述,避免关键词堆叠 |
| 85 | - ❌ 错误:`男性,黑色西装,严肃表情,办公室背景` |
| 86 | - ✅ 正确:`一位身穿黑色西装的中年男性站在现代办公室中,表情严肃,目光锐利,背景是落地窗和城市天际线。` |
| 87 | |
| 88 | 2. **元素完整**:覆盖 26 元素框架(参见 `references/20-frame-description-elements.md`) |
| 89 | - 人物:外观、服装、表情、姿态、动作 |
| 90 | - 场景:环境、道具、空间关系 |
| 91 | - 构图:景别、角度、视角 |
| 92 | - 色彩:主色调、色彩对比、色彩情绪 |
| 93 | - 光影:光源、明暗对比、光影氛围 |
| 94 | - 氛围:情绪基调、叙事意图 |
| 95 | |
| 96 | 3. **可复现性**:描述足够精确,能够生成相似的图片 |
| 97 | - 包含具体的细节(如"深蓝色西装"而非"西装") |
| 98 | - 包含空间关系(如"站在窗前"而非"站着") |
| 99 | - 包含情绪线索(如"严肃的表情"而非"表情") |
| 100 | |
| 101 | 4. **风格一致**:保持与项目整体风格一致 |
| 102 | - 参考项目已有的角色和场景提示词 |
| 103 | - 保持相同的描述风格和细节层次 |
| 104 | |
| 105 | 5. **可编辑性**:提示词结构清晰,便于后续修改和优化 |
| 106 | - 使用段落分隔不同元素 |
| 107 | - 使用清晰的标记(如"人物:"、"场景:") |
| 108 | |
| 109 | ## 分析维度说明 |
| 110 | |
| 111 | ### full(完整分析) |
| 112 | |
| 113 | 提取所有视觉元素,生成完整的提示词。适用于: |
| 114 | - 需要完整复现图片的场景 |
| 115 | - 参考图分析 |
| 116 | - 风格迁移 |
| 117 | |
| 118 | **输出示例**: |
| 119 | ```markdown |
| 120 | ## 提示词 |
| 121 | |
| 122 | 一位身穿深蓝色西装的中年男性站在现代办公室的落地窗前,表情严肃,目光锐利。他的右手插在口袋里,左手自然垂放,身体微微侧向窗外。背景是城市天际线,高楼林立,天空呈现出黄昏时分的暖橙色调。办公室内部光线柔和,来自顶部的筒灯和窗外的自然光形成明暗对比,营造出一种冷静、专业的氛围。 |
| 123 | |
| 124 | ## 关键元素 |
| 125 | |
| 126 | **人物**: |
| 127 | - 外观:中年男性,短发,五官立体 |
| 128 | - 服装:深蓝色西装,白色衬衫,深色领带 |
| 129 | - 表情:严肃,目光锐利 |
| 130 | - 姿态:站立,右手插口袋,左手垂放,身体微侧 |
| 131 | |
| 132 | **场景**: |
| 133 | - 环境:现代办公室,落地窗,城市天际线 |
| 134 | - 道具:无明显道具 |
| 135 | - 空间关系:人物站在窗前,背景是城市 |
| 136 | |
| 137 | **构图**: |
| 138 | - 景别:中景 |
| 139 | - 角度:平视 |
| 140 | - 视角:正面偏侧 |
| 141 | |
| 142 | **色彩**: |
| 143 | - 主色调:深蓝、暖橙、灰白 |
| 144 | - 色彩对比:冷暖对比(室内冷色 vs 窗外暖色) |
| 145 | - 色彩情绪:冷静、专业 |
| 146 | |
| 147 | **光影**: |
| 148 | - 光源:顶部筒灯 + 窗外自然光 |
| 149 | - 明暗对比:中等对比 |
| 150 | - 光影氛围:柔和、专业 |
| 151 | |
| 152 | **氛围**: |
| 153 | - 情绪基调:冷静、严肃、专业 |
| 154 | - 叙事意图:展现人物的权威感和决断力 |
| 155 | ``` |
| 156 | |
| 157 | ### character(聚焦人物) |
| 158 | |
| 159 | 重点提取人物相关元素,适用于: |
| 160 | - 角色设定图生成 |
| 161 | - 人物提示词优化 |
| 162 | - 角色一致性参考 |
| 163 | |
| 164 | **输出示例**: |
| 165 | ```markdown |
| 166 | ## 提示词 |
| 167 | |
| 168 | 一位中年男性,短发,五官立体,表情严肃,目光锐利。他身穿深蓝色西装,内搭白色衬衫和深色领带,右手插在口袋里,左手自然垂放,身体微微侧向一侧,展现出冷静、专业的气质。 |
| 169 | |
| 170 | ## 关键元素 |
| 171 | |
| 172 | **人物**: |
| 173 | - 外观:中年男性,短发,五官立体 |
| 174 | - 服装:深蓝色西装,白色衬衫,深色领带 |
| 175 | - 表情:严肃,目光锐利 |
| 176 | - 姿态:站立,右手插口袋,左手垂放,身体微侧 |
| 177 | - 气质:冷静、专业、权威 |
| 178 | ``` |
| 179 | |
| 180 | ### scene(聚焦场景) |
| 181 | |
| 182 | 重点提取场景相关元素,适用于: |
| 183 | - 场景设定图生成 |
| 184 | - 环境提示词优化 |
| 185 | - 场景一致性参考 |
| 186 | |
| 187 | **输出示例**: |
| 188 | ```markdown |
| 189 | ## 提示词 |
| 190 | |
| 191 | 现代办公室,落地窗前,背景是城市天际线,高楼林立。天空呈现出黄昏时分的暖橙色调,与室内的冷色调形成对比。办公室内部光线柔和,来自顶部的筒灯和窗外的自然光交织,营造出专业、冷静的氛围。 |
| 192 | |
| 193 | ## 关键元素 |
| 194 | |
| 195 | **场景**: |
| 196 | - 环境:现代办公室,落地窗,城市天际线 |
| 197 | - 道具:无明显道具 |
| 198 | - 空间关系:室内空间,窗外城市景观 |
| 199 | - 光线:顶部筒灯 + 窗外自然光 |
| 200 | - 氛围:专业、冷静、现代 |
| 201 | ``` |
| 202 | |
| 203 | ### composition(聚焦构图) |
| 204 | |
| 205 | 重点提取构图相关元素,适用于: |
| 206 | - 分镜参考 |
| 207 | - 镜头设计 |
| 208 | - 构图优化 |
| 209 | |
| 210 | **输出示例**: |
| 211 | ```markdown |
| 212 | ## 提示词 |
| 213 | |
| 214 | 中景,平视角度,正面偏侧视角。人物位于画面中心偏右,背景是落地窗和城市天际线。色彩以深蓝、暖橙、灰白为主,形成冷暖对比。光线来自顶部和窗外,明暗对比适中,营造出专业、冷静的视觉氛围。 |
| 215 | |
| 216 | ## 关键元素 |
| 217 | |
| 218 | **构图**: |
| 219 | - 景别:中景 |
| 220 | - 角度:平视 |
| 221 | - 视角:正面偏侧 |
| 222 | - 人物位置:画面中心偏右 |
| 223 | - 背景:落地窗 + 城市天际线 |
| 224 | |
| 225 | **色彩**: |
| 226 | - 主色调:深蓝、暖橙、灰白 |
| 227 | - 色彩对比:冷暖对比 |
| 228 | - 色彩情绪:冷静、专业 |
| 229 | |
| 230 | **光影**: |
| 231 | - 光源:顶部筒灯 + 窗外自然光 |
| 232 | - 明暗对比:中等对比 |
| 233 | - 光影氛围:柔和、专业 |
| 234 | ``` |
| 235 | |
| 236 | ## 注意事项 |
| 237 | |
| 238 | 1. **图片格式**:支持 PNG、JPG、JPEG、WEBP、GIF 等常见格式 |
| 239 | 2. **图片大小**:建议不超过 10MB,过大的图片可能导致 API 调用失败 |
| 240 | 3. **API 配置**:必须在 `.env` 或环境变量中配置 `NANO_BANANA_API_KEY` 和 `NANO_BANANA_BASE_URL` |
| 241 | 4. **敏感内容**:避免分析包含敏感内容的图片 |
| 242 | 5. **版权问题**:确保图片来源合法,避免侵权 |
| 243 | |
| 244 | ## 与其他 Agent 的协作 |
| 245 | |
| 246 | - **art-designer**:将反推的提示词集成到角色或场景提示词中 |
| 247 | - **image-generator**:使用反推的提示词生成新图片,验证提示词质量 |
| 248 | - **storyboard-artist**:参考反推的提示词优化分镜描述 |
| 249 | - **visual-storyteller**:使用反推的提示词作为视觉化参考 |
| 250 | |
| 251 | ## 参考文档 |
| 252 | |
| 253 | - `references/20-frame-description-elements.md`:帧图描述 26 元素清单 |
| 254 | - `references/11a-seedance-prompt-methodology.md`:Seedance 提示词方法论 |
| 255 | - `references/11b-image-motion-prompt.md`:图像与动态提示词方法论 |