ppt-master Web 图片来源与内联署名(Attribution)执行规范:executor-web-image 权限分支全解析
【免费下载链接】ppt-masterAI turns documents or topics into real, native PowerPoint decks—with native shapes, transitions and animations,>项目地址: https://gitcode.com/GitHub_Trending/ppt/ppt-master
本指南聚焦 ppt-master 中 Web 图片来源(
Status: Sourced)与衍生图的内联署名执行分支(executor-web-image.md)。你将在本文掌握:如何依据image_sources.json的license_tier判定每张 Web 图片在幻灯片上的署名策略,如何在所撰写的 SVG 中渲染"可读、无歧义绑定到具体资产"的署名,以及svg_quality_checker.py如何逐文件校验作者与许可证、阻断缺失署名的导出。
1. 分支定位:条件性执行权(Conditional Executor Authority)
在 ppt-master 的执行器(Executor)权限体系中,executor-web-image.md是加载于executor-image.md之后的一个条件分支(conditional branch),专门授予 Executor 对Web 来源图片及其已制备衍生图进行内联署名(inline attribution)的执行权。
- 上游依赖:executor-image.md(图片状态处理、放置与裁剪契约)与 image-searcher.md(Web 图片获取路径的角色手册)。
- 触发条件:任何被放置且状态为
Status: Sourced的图片,或文件名中携带一份被复制进来的image_sources.json记录的衍生图。Quick 流程使用同一份清单(manifest)且不进行交互。
从 executor-image.md 的状态处理表可以看出,该分支是 Web 图片状态的"下游消费者":Sourced(由 Image_Searcher 获取)与Generated(由 Image_Generator 生成且由清单背书)两类资产都要求"读取image_sources.json获取署名信息,并加载 executor-web-image 分支"。换言之:来源记录一旦建立,署名义务就自动落在 Executor 的 SVG 撰写阶段。
2. 核心契约:license_tier驱动的署名动作
本分支的**契约(Contract)**非常明确:
查找
filename对应的清单条目,并依据license_tier采取动作——清单是署名的唯一事实来源(single source of credits),且署名必须在您撰写的 SVG 中渲染,绝不能通过后处理(post-processing)或导出阶段补加。
license_tier | 本页动作 |
|---|---|
no-attribution | 仅<image>,无署名 |
attribution-required | <image>+ 可见的内联署名,保留该资产的原作者、来源/提供商、以及 CC BY / CC BY-SA 许可信息 |
manual | 仅<image>—— 用户提供的--from-url替换图,其权利与署名责任由用户承担 |
三种层级与 image-searcher.md §1 的许可层级纪律一一对应:
| 层级 | 对应许可 | 页内署名 |
|---|---|---|
no-attribution | CC0、Public Domain、Pexels License、Pixabay Content License | 无 |
attribution-required | CC BY、CC BY-SA | 页内内联<text>署名 |
manual | 用户直接选定 URL 或采纳页图片,许可未核验 | 无——权利与署名责任在用户 |
值得强调的是:
manual层级只允许--from-url直接替换或采纳页包图片,绝不允许"来源未知的提供商结果"被归入manual。下游消费者(Executor、校验器)只读取license_tier,从不自行解释原始许可字符串。
3. 从清单到署名:attribution_text 与压缩语法
3.1 以attribution_text为起点
Executor 的署名工作从清单的attribution_text字段起步。该字段由image_search.py写入清单时通过 provider_common.py 的build_attribution_text生成,其规范格式为:
filename — "title" by author, via Provider, license: name (url)空字段会被优雅省略。例如:
team.jpg — "Untitled" via Openverse — license: CC0 (...)team.jpg — "Sunset" by Jane Doe via Wikimedia Commons — license: CC BY-SA 4.0 (...)
3.2 允许压缩,但不得丢失必需事实
当来源保持清晰时,文件名与完整 URL 可以去掉,但作者与许可必须保留,以便校验器能将署名与资产绑定。压缩语法示例(来自 image-searcher.md §7):
team.jpg — "Untitled" via Openverse — license: CC0 (...)→via Openverse / CC0team.jpg — "Sunset" by Jane Doe via Wikimedia Commons — license: CC BY-SA 4.0 (...)→© Jane Doe / Wikimedia / CC BY-SA 4.0
注意:manual条目在清单中attribution_text为空(见 image_search.py 中license_tier: "manual"时写入"attribution_text": ""),因为其署名责任在用户。
3.3 版式自由度与底线
署名的大小、位置、颜色、逐图 vs 合并处理、标签、以及任何对比度遮罩/渐变,都属于 Executor 的裁量范围(per-image versus combined treatment、labels、contrast scrim/gradient),前提是:
- 署名可读(readable);
- 署名与对应资产无歧义地绑定(unambiguously bound)。
4. 校验闭环:svg_quality_checker.py的强制约束
本分支给出明确的"红线":svg_quality_checker.py会在以下场景报错(errors):
- 缺少图片专属的作者 + 许可署名——一个通用的 CC token 不能覆盖多张图片文件;
image_sources.json清单不可读;- 缺少逐文件来源记录(per-file provenance)。
这些错误必须在后处理或 Quick 导出之前修复。同时,切勿把署名重复塞进演讲者备注(speaker notes)或其他产物中——署名只存在于 SVG 页面。
4.1 校验器的真实实现证据
在 checker.py 的_check_sourced_image_attribution中可以看到该契约的落地逻辑:
- 加载
images/image_sources.json;清单不可读则直接追加"Invalid image source manifest: ..."错误; - 收集 SVG 内可见文本块(
_visible_svg_text_blocks,会展开<use>引用并剔除隐藏/非视觉内容)与被引用的图片 basename; - 仅处理
attribution_required或license_tier == 'attribution-required'且被 SVG 引用的条目; - 从清单取
author与license_name,据此推导许可 token(CC BY-SA或CC BY); - 校验规则:同一可见文本块中必须同时包含作者名(大小写不敏感)与许可 token,否则报错
"Missing image-specific inline attribution for sourced image ..."——这正是"一个通用 CC token 无法覆盖多个文件"的代码级体现。
4.2 清单级别的来源一致性检查
同一文件 checker.py 还执行项目级来源校验:
- 合法
license_tier集合固定为{'no-attribution', 'attribution-required', 'manual'},出现其他值报sourced_image_invalid_license_tier; Sourced图片必须能在清单中找到条目(sourced_image_missing_provenance);- 除
manual外,attribution_text不得为空(sourced_image_missing_attribution_text); attribution-required条目的author不得为空(sourced_image_missing_author)。
5. 触发与数据流:从 Image_Searcher 到 SVG
结合 executor-image.md 与 image-searcher.md,Web 图片的完整数据流如下:
- 获取:
Image_Searcher通过 image_search.py 在开放许可提供商(Pexels → Pixabay → Openverse → Wikimedia,均为默认链)中检索,只下载一份许可已清(license-cleared)的原始图片到project/images/; - 记录:每次成功下载都会向
images/image_sources.json追加或替换一条以filename为键的记录,包含provider、license_name、license_url、license_tier、author、attribution_text、实测width/height、selection_method等(见 image.md 的image_sources.json格式示例); - 触发分支:任何被放置的
Sourced图片触发 executor-web-image 分支; - 渲染署名:Executor 读取清单,依据
license_tier决定是否在 SVG 中加入可见署名; - 校验:
svg_quality_checker.py对每个引用 attribution-required 图片的 SVG 页面验证"作者 + 许可"成对出现,任何缺失都会阻断后处理与 Quick 导出。
如果图片在image_treat.py中生成了非破坏性 PNG 衍生图,只要源文件名存在于images/image_sources.json,新记录会**继承该法律来源(provenance)**并记录derived_from与有序treatments——这正是本分支"放置的衍生图其文件名携带复制来的image_sources.json记录"所指的场景。
6. 实战自查清单
在撰写或评审 Web 图片来源的幻灯片时,按以下顺序自查:
- 触发识别:本页是否有
Sourced图片或带清单记录的衍生图?有则加载本分支; - 层级判定:查
image_sources.json中该filename的license_tier:no-attribution/manual→ 仅<image>;attribution-required→ 必须加可见署名;
- 署名内容:以
attribution_text为起点,可压缩文件名与 URL,但作者 + 许可(CC BY / CC BY-SA)必须保留,且与具体资产一一绑定; - 版式落地:大小、位置、颜色、合并/逐图、遮罩均自由裁量,但保证可读性与无歧义绑定;
- 校验通过:运行
svg_quality_checker.py确认无"Missing image-specific inline attribution"类错误;同时确认清单可读、逐文件来源记录齐全; - 唯一性:署名只出现在 SVG 中,不要写入演讲者备注或其他产物。
7. 相关参考文档
- executor-web-image.md——本文主题文档,条件性署名执行分支
- executor-image.md——上游图片状态处理分支(状态表、裁剪策略、硬规则)
- image-searcher.md——Web 图片获取角色手册(许可层级、查询翻译、署名契约 §7)
- image.md——
image_search.py参数表、批量运行器与image_sources.json完整格式 - checker.py——署名校验与来源一致性检查的实现
- provider_common.py——
attribution_text规范字符串的生成实现
【免费下载链接】ppt-masterAI turns documents or topics into real, native PowerPoint decks—with native shapes, transitions and animations,>项目地址: https://gitcode.com/GitHub_Trending/ppt/ppt-master
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考