SmartShoot Pro — 智能摄影参数助手
技能概述
SmartShoot Pro 是一个完整的摄影决策助手。给定拍摄条件,它能:
- 地理编码:城市名 → 精确经纬度(Nominatim OSM,无需API Key)
- 天文计算:精确计算当地黄金时刻/蓝调时刻/日出日落(SunCalc公式)
- 天气获取:OpenWeatherMap(有Key)或 wttr.in(无Key回退)
- 智能推荐:90款相机 × 9种主体 × 8种光线 = 72场景推荐矩阵
- 双输出:文字分析 + HTML可视化报告(每次必须同时生成)
触发条件
以下任意情况触发本技能:
- 用户输入含"测试:"前缀,如
测试:北京 尼康Z30 18-140 风景 - 用户询问拍摄参数、最佳拍摄时间、相机设置建议
- 用户提供:地点 + 相机 + 镜头 + 拍摄主体(四要素齐全时)
- 用户询问某地点的黄金时刻/日出日落时间
使用方式
标准输入格式
测试:[日期] [地点] [相机型号] [镜头焦距] [拍摄主体]
示例
测试:2026年6月24日 北京通州 尼康Z30 18-140mm 风景
测试:东京新宿 索尼α7RV 24-70mm f/2.8 人像
测试:西藏拉萨 富士X-T5 16-80mm 星空
执行流程
Step 1:解析输入
提取以下字段(缺失时询问用户):
- location:拍摄地点(支持中/英/日文)
- camera:相机型号 → 在cameras.md数据库中查找
- lens:镜头规格(焦距/光圈/是否有OIS)
- subject:拍摄主体(见主体类型表)
- date:拍摄日期(默认今天)
Step 2:地理编码
调用 Nominatim OSM API(不需要API Key,完全免费):
GET https://nominatim.openstreetmap.org/search
?q={location}
&format=json
&limit=1
Headers: Accept-Language: zh-CN
User-Agent: SmartShootPro/2.0
提取 lat(纬度)和 lon(经度)。
Step 3:天文计算(SunCalc公式)
使用以下JavaScript(在HTML中通过CDN加载):
<script src="https://cdnjs.cloudflare.com/ajax/libs/suncalc/1.9.0/suncalc.min.js"></script>
计算节点:
const times = SunCalc.getTimes(date, lat, lng);
// 关键节点:
// times.nightEnd 天文黎明
// times.nauticalDawn 蓝调开始
// times.dawn 民用黎明
// times.sunrise 日出
// times.goldenHourEnd 黄金时刻结束(AM)
// times.solarNoon 正午
// times.goldenHour 黄金时刻开始(PM)
// times.sunset 日落
// times.dusk 民用黄昏
// times.nauticalDusk 蓝调结束
// times.night 天文黄昏
Step 4:天气获取
优先:OpenWeatherMap(用户提供API Key时)
GET https://api.openweathermap.org/data/2.5/weather
?lat={lat}&lon={lng}&appid={KEY}&units=metric&lang=zh_cn
回退:wttr.in(无需任何Key)
GET https://wttr.in/{lat},{lng}?format=j1
提取:温度、湿度、云量(%)、风速(km/h)、能见度(km)、天气描述
Step 5:光线判断
当前时间 vs SunCalc计算结果 → 8种光线类型:
- astro 天文夜晚(nightEnd前 / night后)
- blue_morn 清晨蓝调(nauticalDawn~dawn)
- golden_morn 清晨黄金(sunrise~goldenHourEnd)⭐
- daylight 日间漫射(goldenHourEnd~goldenHour中段)
- harsh 强直射光(接近solarNoon前后各2小时)
- golden_eve 傍晚黄金(goldenHour~sunset)⭐
- blue_eve 傍晚蓝调(sunset~nauticalDusk)
- night 暗夜(nauticalDusk~night)
Step 6:推荐引擎
根据 subject × lightType 查询推荐矩阵(见 data/recommendation_matrix.md),
结合相机参数做个性化调整:
- 全局快门(α9III):提示 ISO≥250,强调闪光同步优势
- 无IBIS:警告长焦需三脚架,星空/夜景必须三脚架
- 无EVF:提示强光下使用遮光罩
- 500法则:星空快门 = Math.floor(500 / (lensFL * cropFactor))秒
- 低动态范围(<13stops):建议包围曝光HDR
Step 7:评分计算
光线评分 = 按光线类型查表(golden=95, blue=85, daylight=70, harsh=45, astro=90)
天气评分 = max(0, 100 - cloudPercent)
器材评分 = 基础20 + IBIS?(20:0) + burst>10?(15:5) + dr>14?(25:15) + maxISO>25600?(20:10)
能见度评分 = min(100, visibilityKm * 10)
Step 8:生成输出(⚠️ 双输出规则,缺一不可)
A. 文字分析(Markdown格式,直接输出到对话):
- 光线时间线(ASCII可视化)
- 相机参数表
- 场景拍摄建议(至少4条)
- 滤镜推荐
- 注意事项
- 四维评分
B. HTML报告文件(⚠️ 必须生成,写入用户桌面或当前目录):
- 文件名:smartshoot-result-{地点}-{YYYYMMDD}.html
- 包含:Canvas太阳时间线、参数卡片、场景指南、一日计划、评分进度条
- 自包含单文件,使用Tailwind CSS CDN,无需服务端
- HTML模板见本文件末尾 ## HTML输出模板
主体类型表
| 代码 | 中文 | 英文 | 最佳光线 |
|---|---|---|---|
| portrait | 人像 | Portrait | golden_morn / golden_eve |
| landscape | 风景 | Landscape | golden_morn / golden_eve / blue_eve |
| sports | 运动 | Sports | daylight / golden |
| wildlife | 野生动物 | Wildlife | golden_morn |
| street | 街拍 | Street | daylight / night |
| astro | 星空 | Astrophotography | astro |
| product | 产品 | Product | daylight |
| macro | 微距 | Macro | daylight |
| video | 视频 | Video | golden / daylight |
关键摄影知识(内联,不依赖本地文件)
曝光三角
- 光圈:f/1.4大光圈=浅景深+进光多;f/16小光圈=深景深+星芒
- 快门:运动冻结≥1/1000s;流水拉丝1~5s;星空用500法则
- ISO:使用相机原生ISO,噪点最低
区域曝光法(Zone System)
- Zone 0(纯黑) ~ Zone X(纯白),Zone V = 18%中灰 = 测光基准
- ETTR:直方图向右靠拢不溢出,最大化阴影信息
500法则
星空最大快门(秒) = 500 ÷ (镜头焦距mm × 裁切系数)
示例:18mm × 1.5(APS-C) = 27mm等效 → 500÷27 ≈ 18秒
光线时段
- 黄金时刻:日出后/日落前1小时,暖橙低角度光
- 蓝调时刻:日出前/日落后约20分钟,蓝紫天空与人造光平衡
- 强光:正午前后各2小时,避免人像和风景
- 蓝调建筑摄影:室内外光比最均衡,最佳城市夜景时段
滤镜系统
- CPL偏振镜:消除水面/玻璃反光,增强蓝天,风景必备
- GND渐变灰:平衡天空与地面曝光差
- ND减光:ND64=6档;ND1000=10档;慢门长曝
- 黑柔:散射高光,电影感氛围
⚠️ 强制输出规则
| 触发条件 | 必须输出 | 文件命名 |
|---|---|---|
| 测试:... | 文字分析 + HTML | smartshoot-result-{地点}-{YYYYMMDD}.html |
| self-evolution | 文字汇总 + HTML | evolution-report-{YYYYMMDD}.html |
| self-improvement | 文字汇总 + HTML | evolution-report-{YYYYMMDD}.html |
| 阶段性总结 | 文字汇总 + HTML | 对应命名 |
违反此规则 = 技能执行失败。
HTML输出模板
每次生成HTML报告时,使用以下结构(Tailwind CSS CDN + SunCalc CDN,完全自包含):
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>SmartShoot Pro · {地点} · {日期}</title>
<script src="https://cdn.tailwindcss.com"></script>
<style>
body { background:#080c14; color:#e2e8f0; font-family:'PingFang SC',sans-serif; }
.glass { background:rgba(255,255,255,0.04); border:1px solid rgba(255,255,255,0.09); border-radius:12px; }
.gt { background:linear-gradient(135deg,#a78bfa,#60a5fa,#34d399); -webkit-background-clip:text; -webkit-text-fill-color:transparent; }
/* 更多样式见示例报告 */
</style>
</head>
<body class="p-4 md:p-8">
<!-- Header:地点名称、坐标、相机镜头信息 -->
<!-- Sun Timeline:Canvas绘制,白色竖线标注当前时刻 -->
<!-- Params:快门/光圈/ISO/白平衡参数卡片 -->
<!-- Camera Specs:相机规格展示 -->
<!-- Scene Guide:场景拍摄指南(4个场景卡片) -->
<!-- Day Plan:一日拍摄计划时间线 -->
<!-- Filters + Warnings:滤镜推荐 + 注意事项 -->
<!-- Score:四维评分进度条 -->
<!-- Summary:总结建议 -->
</body>
</html>
详细HTML实现参考 data/html_template.html。
数据文件索引
| 文件 | 说明 |
|---|---|
data/cameras.md |
90款相机完整规格数据库 |
data/photography_knowledge.md |
摄影知识+大师风格+技术体系 |
data/recommendation_matrix.md |
72场景推荐矩阵(9主体×8光线) |
data/html_template.html |
完整HTML报告模板 |
README.md |
安装与使用说明 |