@petercjl/cloud-hug-style-transfer 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,11 @@
2
2
 
3
3
  将旧详情页、产品摄影、主 KV 或 SKU 转换为抱抱云朵社品牌视觉,保留当次商品事实、文案与用途。包内包含完整 19 页定稿、品牌标识、人物设定与摄影排版方法,约 41 MB 素材。
4
4
 
5
- 支持 Codex、SealSeek、WorkBuddy 的技能目录安装。Node.js 22+ 为安装与管理前提;实际生图还需要宿主支持看图、多参考图编辑及结果交付。包不附带生成额度或服务账号。SealSeek 与 WorkBuddy 的生图适配依据当前宿主合同实现,尚待实际任务验证。WorkBuddy 需要内置 Miora 图片场景及相应能力 Skill;SealSeek 需要当前会话提供参考图生成和上传能力。
5
+ 支持 Codex、SealSeek、WorkBuddy。需要 Node.js 22+、宿主命令执行和看图能力。生图统一通过必需的 `@petercjl/sealseek-media-cli`(0.6.1+)及其配套 `sealseek-media` Skill 执行;每次任务先检查,缺失或不兼容时暂停整个任务,安装并复查通过后继续。有效 SealSeek 登录、网络及额度由使用者准备,包不附带账号或额度。宿主生图效果仍需分别实测。
6
+
7
+ 先安装生图依赖,将提示词发送给 Agent:
8
+
9
+ > 请安装 npm 包 @petercjl/sealseek-media-cli。
6
10
 
7
11
  安装:将下列提示词发送给目标 Agent。
8
12
 
@@ -27,3 +31,5 @@
27
31
  安装、更新与检查由 Agent 执行包内 CLI。包的 `skill source --json` 提供规范来源;Agent 随后调用 `skill install --agent <当前宿主>`,支持 `--root` 指定实际技能目录。普通任务不联网检查或自动更新。显式更新使用 stable latest,备份旧包并同步已登记的受管 Skill,失败时恢复旧包;离线保留当前安装。已有独立安装或本地修改将停止覆盖并报告。源码或上层工具管理的包由其拥有者更新。
28
32
 
29
33
  兼容证据分别记录安装机制与生图效果。CI 覆盖 macOS、Windows、Linux 的包管理机制;宿主实际生成需使用各自账户独立验证。品牌与输入素材须具备相应使用权;公开 npm 分发不转让商标与素材的独立再分发权。
34
+
35
+ 开发者依赖合同:`doctor --json` 验证媒体包身份、0.6.1+ 版本、CLI 与规范 Skill,缺失返回非零退出码和 `DEPENDENCY_MISSING`,生成状态为 `paused`。优先发现当前 npm 安装树,再发现 PATH 的 npm 安装;自定义 Agent/套件安装可配置 `CLOUD_HUG_MEDIA_ROOT` 为媒体包根目录。使用返回的 `dependencies.media.invocation` 调用 CLI;doctor 不登录、不联网检查服务、不自动安装或提交生成。任务执行仍须加载依赖的当前 Skill 并完成 live 检查与 dry-run。
package/capabilities.json CHANGED
@@ -20,22 +20,30 @@
20
20
  ],
21
21
  "requirements": {
22
22
  "node": ">=22",
23
- "nested_skills": [],
24
- "generation": "Host-provided multi-reference image editing and inspection; credentials remain external.",
23
+ "nested_skills": [
24
+ "sealseek-media"
25
+ ],
26
+ "generation": "Required @petercjl/sealseek-media-cli >=0.6.1 and its canonical sealseek-media Skill; missing or incompatible dependency pauses all tasks before analysis or planning.",
25
27
  "host_capability_skills": {
26
28
  "codex": [],
27
- "sealseek": [
28
- "AIGC-生图 when advertised by host as its media entry"
29
- ],
30
- "workbuddy": [
31
- "miora-creative-core",
32
- "miora-image-generation"
33
- ]
34
- }
29
+ "sealseek": [],
30
+ "workbuddy": []
31
+ },
32
+ "packages": [
33
+ {
34
+ "name": "@petercjl/sealseek-media-cli",
35
+ "minimum_version": "0.6.1",
36
+ "required": true,
37
+ "missing": "pause",
38
+ "skill": "sealseek-media",
39
+ "source": "CLI skill source --json",
40
+ "contract": "media.generate with image/reference-image/dry-run/task-record/local-artifact"
41
+ }
42
+ ]
35
43
  },
36
44
  "authorization": {
37
45
  "installation": "Explicit install/update request; preserve existing targets.",
38
- "generation": "Current task scope and host provider policy."
46
+ "generation": "User-authorized generation via sealseek-media-cli only; credits and credentials remain external."
39
47
  },
40
48
  "compatibility": {
41
49
  "codex": {
package/npm/cli.mjs CHANGED
@@ -4,6 +4,7 @@ import path from 'node:path';
4
4
  import { root, pkg, fail } from './runtime.mjs';
5
5
  import { source, targetPath, status, install, inventory } from './skills.mjs';
6
6
  import { checkUpdate, installUpdate } from './update.mjs';
7
+ import { mediaDependency } from './media-dependency.mjs';
7
8
  const args=process.argv.slice(2);
8
9
  const option=name=>{const i=args.indexOf(name);if(i<0)return undefined;if(!args[i+1]||args[i+1].startsWith('--'))throw fail('INVALID_ARGUMENT',`${name} needs a value.`);return args[i+1];};
9
10
  const out=value=>console.log(JSON.stringify(value,null,2));
@@ -23,7 +24,9 @@ try {
23
24
  const files=inventory(source), expected=JSON.parse(fs.readFileSync(path.join(root,'npm','integrity.json'),'utf8'));
24
25
  const problems=Object.entries(expected).filter(([name,hash])=>files[name]!==hash).map(([name])=>name);
25
26
  const capabilities=JSON.parse(fs.readFileSync(path.join(root,'capabilities.json'),'utf8'));
26
- const result={ok:Number(process.versions.node.split('.')[0])>=22&&problems.length===0,package:pkg.name,version:pkg.version,node:process.versions.node,source,files:Object.keys(files).length,integrity:{ok:problems.length===0,problems},installationReady:problems.length===0,hostCapabilityDependencies:capabilities.requirements.host_capability_skills,generation:{state:'requires-host-preflight',runtimeTested:false,requiredFeatures:['image-inspection','multiple-reference-edit','local-reference-input','viewable-output']}};
27
+ const media=mediaDependency();
28
+ const result={ok:Number(process.versions.node.split('.')[0])>=22&&problems.length===0&&media.ok,package:pkg.name,version:pkg.version,node:process.versions.node,source,files:Object.keys(files).length,integrity:{ok:problems.length===0,problems},installationReady:problems.length===0,dependencies:{media},hostCapabilityDependencies:capabilities.requirements.host_capability_skills,generation:{provider:'@petercjl/sealseek-media-cli',state:media.ok?'requires-live-preflight':'paused',runtimeTested:false,requiredFeatures:['image-inspection','multiple-reference-edit','local-reference-input','viewable-output']}};
29
+ if(!media.ok){result.code=media.code;result.action='pause';result.installPrompt=media.installPrompt;}
27
30
  if(option('--agent'))result.installation={...status(targetPath(option('--agent'),option('--root'))),record:undefined};
28
31
  out(result);if(!result.ok)process.exitCode=1;
29
32
  } else if(args[0]==='update') {
@@ -1,8 +1,8 @@
1
1
  {
2
- "SKILL.md": "88b2b5584f57299a8dc002ad51914e4577dc39b657e96e643b74b61911676a3f",
3
- "adapters/codex.json": "c5e52102befd0bb47e114f2534ee3a2fb9a66f7338396202319aea73a3ea924a",
4
- "adapters/sealseek.json": "d50e4d9f910c664c026ffa9e92ac8901776d19d2f1c8062a046af534a7cdf2ce",
5
- "adapters/workbuddy.json": "4d0e1a62deb866dc6bd4c6bb7915cce20725d16863258345e93c817e7b8bdbd0",
2
+ "SKILL.md": "3057a467849d971798380f26e907d341491cbf36601572725822185a6a6d7a5d",
3
+ "adapters/codex.json": "ca8f43f150822d1ca6d71662a87b2a655841154eda9b91ac97c8dde49a07a3dd",
4
+ "adapters/sealseek.json": "4d809a8a9da4a204460163b3f0f236d3744211179e50635cfe67e051dfaa1de0",
5
+ "adapters/workbuddy.json": "38b3cafc9d50093e8d21a25a347004cadcf15b6a15984e0a4833499efc813ca2",
6
6
  "agents/openai.yaml": "8afeabba706e83f2f20d616579e8d79b6509fe93427acdc2b650ef6387049983",
7
7
  "assets/approved/all-colors-user-finish.webp": "539c77de8ec0dd46a29793befecf813e97ce6ae66f7cbe69486846383b2ae936",
8
8
  "assets/approved/brand-kv-user-finish-20261012.png": "cb09198481e779444696864b265c689f467207bf7de9610f7adc2b850f0be7b4",
@@ -55,7 +55,7 @@
55
55
  "assets/rejected/brand-kv-c2-20261012.webp": "88ed2de0d950ea4a34519661481877ee0899743a6dfce203a2033c0dab6a73f7",
56
56
  "assets/rejected/overhead-rest-b.webp": "16e5e6fabdc665868ac244d556f3a8a93db826a34425fdee042e4f7a8ebf64c3",
57
57
  "assets/rejected/prone-pile-a.webp": "d07f38bbb69fc23b30dca4ed27faa3d7ae58e2e81840a1c3d46101911c28a7a2",
58
- "capabilities.json": "00a871a640cb26d1072a27318f1e99ca4d58c046917e353dc7b1d31600375751",
58
+ "capabilities.json": "f9f9c9c08c2d6ecd83f992119efa5e5afc4b4ad35b391c265d9cbeca03b72fbb",
59
59
  "references/assets.md": "5675ee6b395caca641e8ce56e200cd4391ad67e7afceb44fc6732f253a126926",
60
60
  "references/brand-layout.md": "5668190c1e618a903aa1b5e859405fa43a004da2082dc7040e83ef8cfc0aae86",
61
61
  "references/cases.md": "9d0d2d3d210e367411d5a291fc78ef6c9c733afd79c9da76451c580fcbcd4d3e",
@@ -64,5 +64,6 @@
64
64
  "references/model-generation.json": "21daa2c3bf7d2000c7ddf52ab0b980cb7ee95d6c9d345602dc59ecbc128ec147",
65
65
  "references/model.md": "c4da688e22e2ada3f251fe0dc87effcaf5cb6ed6176f9d9c20a9661414bffab5",
66
66
  "references/page-patterns.md": "3c126c75e9ccd5fc0b8860efcf2a0e27e9d3ba31e5cdeb407a0a683d8861a978",
67
+ "references/photography-method.md": "86ed457fc78112c1a2ad9bf9fdb9bcdf92aed71066bac2b3d4255159e3ee5c1c",
67
68
  "references/products.md": "642795ae16803669b169531240723bf72a388cb6351679a2787e67e181dca9cd"
68
69
  }
@@ -0,0 +1,47 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { createRequire } from 'node:module';
4
+ import { spawnSync } from 'node:child_process';
5
+
6
+ const name = '@petercjl/sealseek-media-cli';
7
+ const prompt = `请安装 npm 包 ${name}。`;
8
+
9
+ // Invoke the verified package entry with the active Node runtime, including on
10
+ // Windows where an npm .cmd shim is not a directly executable program.
11
+ export function mediaDependency({ env = process.env, packageRoot } = {}) {
12
+ const missing = (code, message) => ({ok:false,code,package:name,message,installPrompt:prompt,action:'pause'});
13
+ const roots=[];
14
+ if(packageRoot || env.CLOUD_HUG_MEDIA_ROOT) roots.push(packageRoot || env.CLOUD_HUG_MEDIA_ROOT);
15
+ else {
16
+ try { roots.push(path.dirname(createRequire(import.meta.url).resolve(`${name}/package.json`))); } catch {}
17
+ for(const dir of (env.PATH || '').split(path.delimiter).filter(Boolean)) {
18
+ roots.push(path.join(dir,'node_modules',...name.split('/')),path.join(dir,'..','lib','node_modules',...name.split('/')));
19
+ try {
20
+ const entry=fs.realpathSync(path.join(dir,'sealseek-media'));
21
+ roots.push(path.resolve(path.dirname(entry),'..'));
22
+ } catch {}
23
+ }
24
+ }
25
+ for(const candidate of [...new Set(roots)]) {
26
+ if(!fs.existsSync(path.join(candidate,'package.json'))) continue;
27
+ try {
28
+ const root=fs.realpathSync(candidate),pkg=JSON.parse(fs.readFileSync(path.join(root,'package.json'),'utf8'));
29
+ if(pkg.name!==name) continue;
30
+ const parts=pkg.version?.split('.').map(Number);
31
+ if(!/^\d+\.\d+\.\d+$/.test(pkg.version)||!(parts[0]>0||parts[1]>6||(parts[1]===6&&parts[2]>=1))) return missing('DEPENDENCY_INCOMPATIBLE','sealseek-media-cli >=0.6.1 is required; update the package.');
32
+ if(typeof pkg.bin?.['sealseek-media']!=='string') return missing('DEPENDENCY_INVALID','Media CLI entry is missing.');
33
+ const entry=fs.realpathSync(path.resolve(root,pkg.bin['sealseek-media']));
34
+ if(!entry.startsWith(root+path.sep)) return missing('DEPENDENCY_INVALID','Media CLI entry must belong to its package.');
35
+ const result=spawnSync(process.execPath,[entry,'skill','source','--json'],{encoding:'utf8',timeout:15000,maxBuffer:1024*1024,env:{...env,SEALSEEK_MEDIA_AUTO_UPDATE:'0'}});
36
+ const data=JSON.parse(result.stdout||'null');
37
+ if(result.status!==0||data?.ok!==true||data.name!=='sealseek-media'||data.version!==pkg.version||typeof data.source!=='string') return missing('DEPENDENCY_INVALID','Media CLI canonical Skill discovery failed.');
38
+ const source=fs.realpathSync(data.source);
39
+ if(!source.startsWith(root+path.sep)||!/^name: sealseek-media\s*$/m.test(fs.readFileSync(path.join(source,'SKILL.md'),'utf8'))) return missing('DEPENDENCY_INVALID','Media companion Skill identity is invalid.');
40
+ const contract=JSON.parse(fs.readFileSync(path.join(source,'capabilities.json'),'utf8'));
41
+ const generate=contract.capabilities?.find(c=>c.id==='media.generate');
42
+ if(!['image','reference-image','dry-run','task-record','local-artifact'].every(f=>generate?.required_features?.includes(f))) return missing('DEPENDENCY_INCOMPATIBLE','Media generation contract is incomplete.');
43
+ return {ok:true,package:name,version:pkg.version,entry,source,invocation:{command:process.execPath,args:[entry]},serviceAccess:'requires-live-preflight',generationTested:false};
44
+ } catch { return missing('DEPENDENCY_INVALID','Media package, CLI or canonical Skill could not be verified.'); }
45
+ }
46
+ return missing('DEPENDENCY_MISSING','Required sealseek-media-cli package was not detected. Pause the Skill until it is installed and verified.');
47
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@petercjl/cloud-hug-style-transfer",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "抱抱云朵社品牌风格转换 Skill,支持 Codex、SealSeek 与 WorkBuddy",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,19 +1,27 @@
1
1
  ---
2
2
  name: cloud-hug-style-transfer
3
- description: 独立把旧详情页、产品摄影、主KV或SKU转换为抱抱云朵社的品牌视觉与同一模特。保留当次商品、有效文案参数及页面用途,产品款式与材料随新资料变化。内置完整19页定稿、LOGO、人物和摄影排版方法;无需其他个人技能、历史会话或私人素材库。用于“抱抱云朵社风格转换”、旧页品牌化、同模特延展与图文设计。
3
+ description: 独立把旧详情页、产品摄影、主KV或SKU转换为抱抱云朵社的品牌视觉与同一模特。保留当次商品、有效文案参数及页面用途,产品款式与材料随新资料变化。内置完整19页定稿、LOGO、人物和摄影排版方法;生图必需 @petercjl/sealseek-media-cli 及其配套 sealseek-media Skill,未检测到即暂停;品牌资料无需私人素材库。用于“抱抱云朵社风格转换”、旧页品牌化、同模特延展与图文设计。
4
4
  ---
5
5
 
6
6
  # 抱抱云朵社风格转换
7
7
 
8
- 使用中文展示名 **抱抱云朵社风格转换**。用本目录内的方法和素材独立完成品牌转换,以当前使用者的明确要求为准;不读取其他个人技能,不依赖创建者的历史会话或私人文件权限。
8
+ 使用中文展示名 **抱抱云朵社风格转换**。用本目录内的方法和素材独立完成品牌转换,以当前使用者的明确要求为准;生成能力由必需的 `@petercjl/sealseek-media-cli` 及其规范配套 `sealseek-media` Skill 提供,品牌资料不依赖创建者的历史会话或私人文件权限。
9
9
 
10
10
  ## 运行合同与平台入口
11
11
 
12
- 输入是当前源页、商品资料和本次目标;输出是约定数量的独立成图及简短验收说明,或用户仅要求的规划。品牌方法与全部资产由本 Skill 提供,宿主负责图像查看、参考图编辑与结果交付,安装包仅管理来源和更新。
12
+ 输入是当前源页、商品资料和本次目标;输出是约定数量的独立成图及简短验收说明,或用户仅要求的规划。本 Skill 负责品牌方法、素材选择、提示词、版式和业务验收;`@petercjl/sealseek-media-cli` 负责生图服务、认证、参考图传输、任务恢复和结果下载;宿主负责命令执行、实际看图和交付。
13
13
 
14
- 在首次查看或生成节点,读取 [能力合同](capabilities.json) 和当前宿主对应的适配: [Codex](adapters/codex.json)、[SealSeek](adapters/sealseek.json)、[WorkBuddy](adapters/workbuddy.json)。只加载当前宿主适配,通过其工具目录核验所需特性;规划仅需读取和看图。生成须支持多参考图编辑、实际传入本地资产并交付可查看结果。缺少能力时返回 `CAPABILITY_UNAVAILABLE` 或 `FEATURE_UNSUPPORTED`,说明影响与已完成内容;能力满足后回到第 5 节。适配状态和真实生成效果分别验收。
14
+ ### 入口:必需依赖检查
15
15
 
16
- 按第 1–4 节理解任务与选取依据,第 5 节执行,第 6 节实际验收;局部失败回到对应设计或执行节点。包管理采用 `cloud-hug-style-transfer` CLI 的当前 `skill source/status/install/update` 合同;源文件与素材随 npm 包提供,账户及生成服务由宿主配置。
16
+ **每次任务先检查依赖,通过后才进入第 1 节;规划任务也遵守此入口。** 执行 `cloud-hug-style-transfer doctor --json`,核对 `dependencies.media.ok`。检查支持当前 npm 安装树、PATH 安装及显式配置的 `CLOUD_HUG_MEDIA_ROOT`;返回的 `dependencies.media.invocation` 是经过包身份核验的 CLI 调用入口,使用宿主当前 Node 运行时,可用于 Agent 管理的运行时或套件组件。
17
+
18
+ 未检测到 `@petercjl/sealseek-media-cli` 时返回 `DEPENDENCY_MISSING` 并**暂停整个任务**,保留输入和进度,给出最简安装提示词:“请安装 npm 包 @petercjl/sealseek-media-cli。”等待安装并重新检查通过后,从本入口恢复。版本低于 0.6.1、CLI 无法执行、规范 Skill 缺失或合同不兼容同样暂停,按诊断修复后复查。不得以宿主内置生图、其他提供商或继续规划代替依赖通过;本入口不自动安装软件或提交生成。
19
+
20
+ 通过检查后,使用返回的 CLI 入口执行 `skill source --json`,以逻辑名 **sealseek-media** 核对来源,并完整读取其当前 `SKILL.md`;相对资源从该目录解析,更新后重新加载。需要其 0.6.1+ 的当前合同:`version`、`doctor --live --json`、`capabilities --live --json`、模型查询、参考图生成 dry-run、任务提交/跟踪/恢复和本地交付。依赖输入是本 Skill 选定的提示词、有序参考图及职责、数量、画幅和授权;输出是任务 ID、状态、模型、可验证文件与错误。认证或服务不可用时暂停,由配套 Skill 处理其恢复分支;恢复后回到此入口或既有任务跟踪节点,保留任务 ID,不自动重提。
21
+
22
+ 读取 [能力合同](capabilities.json) 和当前宿主适配:[Codex](adapters/codex.json)、[SealSeek](adapters/sealseek.json)、[WorkBuddy](adapters/workbuddy.json)。三者的 `media.image.edit` 统一通过上述 CLI,`media.image.inspect` 使用宿主实际看图能力;只加载当前宿主适配。缺少命令执行、看图或当前模型所需的参考图特性时,返回 `CAPABILITY_UNAVAILABLE` 或 `FEATURE_UNSUPPORTED` 并暂停。安装通过不等于已登录、拥有额度或实际生成效果合格。
23
+
24
+ 按第 1–4 节理解任务与选取依据,第 5 节调用依赖执行,第 6 节实际验收;局部失败回到对应设计或执行节点。包管理采用 `cloud-hug-style-transfer` CLI 的当前 `skill source/status/install/update` 合同;两个包各自维护来源和更新,账户与凭据保存在媒体包的私有配置中。
17
25
 
18
26
  ## 1. 识别当次商品与页面任务
19
27
 
@@ -49,7 +57,7 @@ description: 独立把旧详情页、产品摄影、主KV或SKU转换为抱抱
49
57
 
50
58
  ## 3. 保持品牌,按职责决定画面
51
59
 
52
- 以 [完整19页定稿](references/detail-final-20261016.md) 为当前品牌正向基准,按本屏用途取图。先判断本屏及所在段落要完成什么,再安排主体分量、观看距离、裁切、动作、清晰范围和文字;不把所有页面都改成安静远景。
60
+ 以 [完整19页定稿](references/detail-final-20261016.md) 为当前品牌正向基准,按本屏用途取图。**摄影方向(镜头任务、生活叙事方法、人物与空间调度)统一按 [摄影方法论](references/photography-method.md) 执行。** 先判断本屏及所在段落要完成什么,再安排主体分量、观看距离、裁切、动作、清晰范围和文字;不把所有页面都改成安静远景。
53
61
 
54
62
  | 品牌维度 | 落实方法与边界 |
55
63
  | --- | --- |
@@ -79,6 +87,7 @@ description: 独立把旧详情页、产品摄影、主KV或SKU转换为抱抱
79
87
  | 文字角色、字体与图像组织 | [品牌文案与版式](references/brand-layout.md) |
80
88
  | 房景、拥挤、摆拍或擅加字 | [正反案例](references/cases.md) |
81
89
  | 主KV排版或三案趋同 | [首屏图文对照](references/kv-layout-case-20261012.md) |
90
+ | 摄影命题、镜头任务、生活叙事方法 | [摄影方法论:柔光生活叙事摄影](references/photography-method.md) |
82
91
 
83
92
  素材随本技能提供;缺失时先核对相对路径和随附文件,再请当前使用者补足必要素材或重新取得完整技能包。不要求访问创建者的账号、历史会话或私人来源,不用反例顶替正向原图。
84
93
 
@@ -97,7 +106,7 @@ description: 独立把旧详情页、产品摄影、主KV或SKU转换为抱抱
97
106
 
98
107
  查实际说明有无相反要求:无字却夹带标题;安睡却强求笑容露全脸;亲密近景却一律缩小主体;尺寸展示却遮挡关键轮廓;柔软品牌却全套粗圆字。修正具体冲突,不靠末尾追加“自然、高级、有呼吸感”抵消。
99
108
 
100
- 调用已核验的 `media.image.edit` 能力直接制作;工具不可用时如实说明,只完成可做的规划,不伪称出图,不擅换外部模型或程序合成。保留精简实际调用记录,使用当前可用路径,不向使用者倾倒完整日志。
109
+ 调用当前适配中由 `sealseek-media-cli` 实现的 `media.image.edit`。按已加载的 `sealseek-media` 主线读取当前模型能力,用其参考图生成/编辑合同传入真实原图与精简提示词,先 `--dry-run --json`,通过后在已有生成授权范围内用 `--via sealseek --submit` 提交。模型采用媒体包当前默认值,用户明确指定时保留指定值;模型不支持本轮要求时暂停并报告,不自动换模型。保存任务 ID,按依赖合同查询、恢复、下载;提交结果不明先核对同一任务,不自动重提或增加付费生成。执行中依赖丢失或服务不可用时暂停,恢复后回到既有任务或本执行节点。保留精简实际调用记录,不向使用者倾倒完整日志。
101
110
 
102
111
  分别要三张就交三张独立成稿,已授权数量连续完成,不自行拼成方案墙。创意备选应有真实观看或图文关系差异;比较型延展可保留同一骨架。一大两小、同构与否取决于页面,而非出图张数。
103
112
 
@@ -13,7 +13,7 @@
13
13
  "implementation": {
14
14
  "type": "agent-native",
15
15
  "discovery": "Inspect the current host tool catalog and schemas; verify reference input and result delivery before invoking.",
16
- "invocation": "Use native image viewing. Use the built-in image generation tool with referenced_image_paths for local references; inspect files before editing. Follow current host schema. API keys are not the default route.",
16
+ "invocation": "Use the current host image-viewing tool to inspect actual local source, reference and output pixels; require a vision-capable model.",
17
17
  "configuration": "Host-managed account and provider authorization; no credentials bundled."
18
18
  },
19
19
  "normalization": "Success: {ok:true,artifacts:[],metadata:{},task_id:null,cost:null,warnings:[]}; failure: {ok:false,code,message,capability_id}.",
@@ -29,18 +29,22 @@
29
29
  "viewable-output"
30
30
  ],
31
31
  "implementation": {
32
- "type": "agent-native",
33
- "discovery": "Inspect the current host tool catalog and schemas; verify reference input and result delivery before invoking.",
34
- "invocation": "Use native image viewing. Use the built-in image generation tool with referenced_image_paths for local references; inspect files before editing. Follow current host schema. API keys are not the default route.",
35
- "configuration": "Host-managed account and provider authorization; no credentials bundled."
32
+ "type": "cli",
33
+ "discovery": "Run cloud-hug-style-transfer doctor --json; require dependencies.media.ok and use its verified invocation. Resolve sealseek-media via that CLI skill source --json and load the complete current SKILL.md plus its current host adapter.",
34
+ "invocation": "Follow the current sealseek-media Discover/Prepare/Validate/Submit/Follow/Deliver contract. Pass application-owned prompt and ordered local references, dry-run first, submit authorized generation via --via sealseek --submit, preserve task IDs and verify local output.",
35
+ "configuration": "Required @petercjl/sealseek-media-cli >=0.6.1; private media-package authentication, network and credits. Optional CLOUD_HUG_MEDIA_ROOT points to its installed package root.",
36
+ "failure": "Missing or incompatible package/Skill pauses the entire task before section 1; offer the minimal install prompt and resume only after verification. Service/feature failures pause without native-generation fallback."
36
37
  },
37
38
  "normalization": "Success: {ok:true,artifacts:[],metadata:{},task_id:null,cost:null,warnings:[]}; failure: {ok:false,code,message,capability_id}.",
38
- "evidence": []
39
+ "evidence": [
40
+ "Canonical sealseek-media 0.6.1 CLI/Skill and live capabilities inspected; paid generation and full host flow not tested."
41
+ ]
39
42
  }
40
43
  ],
41
44
  "operating_systems": {
42
45
  "macos": "implemented",
43
46
  "windows": "implemented"
44
47
  },
45
- "notes": "Installer support and host generation capability are independent. Unresolved native capabilities must be verified on the executing host before generation."
48
+ "notes": "Image generation uses the same required sealseek-media-cli on every host. Native viewing and command execution still require host verification. Missing media dependency pauses all tasks.",
49
+ "host_generation_tested": false
46
50
  }
@@ -13,7 +13,7 @@
13
13
  "implementation": {
14
14
  "type": "agent-native",
15
15
  "discovery": "Inspect the current host tool catalog and schemas; verify reference input and result delivery before invoking.",
16
- "invocation": "Use the current host image-viewing tool with absolute local paths; require a vision-capable model and inspect actual pixels, including generated output.",
16
+ "invocation": "Use the current host image-viewing tool to inspect actual local source, reference and output pixels; require a vision-capable model.",
17
17
  "configuration": "Host-managed account and provider authorization; no credentials bundled."
18
18
  },
19
19
  "normalization": "Success: {ok:true,artifacts:[],metadata:{},task_id:null,cost:null,warnings:[]}; failure: {ok:false,code,message,capability_id}.",
@@ -31,15 +31,15 @@
31
31
  "viewable-output"
32
32
  ],
33
33
  "implementation": {
34
- "type": "agent-native",
35
- "discovery": "Inspect currently advertised sealseek-canvas tool schemas. If the host provides its AIGC-生图 capability Skill, resolve that exact logical name, read its current complete SKILL.md and follow its live input/output contract for this operation. Do not bundle or duplicate that Skill.",
36
- "invocation": "Use sealseek-canvas reference-image generation only after inspecting its current reference format. Local file upload must use the host-provided upload operation and returned format; never pass local file paths to URL-only fields. Preserve selected model and reference order. Retrieve and inspect the resulting local images using the host delivery contract.",
37
- "configuration": "Current SealSeek session account and advertised native media capability. No external CLI or provider installation is implied.",
38
- "failure": "If the current tool, local-reference transport or image delivery is unavailable, return CAPABILITY_UNAVAILABLE or FEATURE_UNSUPPORTED and resume the core at section 5 only after resolution."
34
+ "type": "cli",
35
+ "discovery": "Run cloud-hug-style-transfer doctor --json; require dependencies.media.ok and use its verified invocation. Resolve sealseek-media via that CLI skill source --json and load the complete current SKILL.md plus its current host adapter.",
36
+ "invocation": "Follow the current sealseek-media Discover/Prepare/Validate/Submit/Follow/Deliver contract. Pass application-owned prompt and ordered local references, dry-run first, submit authorized generation via --via sealseek --submit, preserve task IDs and verify local output.",
37
+ "configuration": "Required @petercjl/sealseek-media-cli >=0.6.1; private media-package authentication, network and credits. Optional CLOUD_HUG_MEDIA_ROOT points to its installed package root.",
38
+ "failure": "Missing or incompatible package/Skill pauses the entire task before section 1; offer the minimal install prompt and resume only after verification. Service/feature failures pause without native-generation fallback."
39
39
  },
40
40
  "normalization": "Success: {ok:true,artifacts:[],metadata:{},task_id:null,cost:null,warnings:[]}; failure: {ok:false,code,message,capability_id}.",
41
41
  "evidence": [
42
- "Adapter implementation follows inspected host capability descriptions; generation has not been exercised."
42
+ "Canonical sealseek-media 0.6.1 CLI/Skill and live capabilities inspected; paid generation and full host flow not tested."
43
43
  ]
44
44
  }
45
45
  ],
@@ -47,6 +47,6 @@
47
47
  "macos": "implemented",
48
48
  "windows": "implemented"
49
49
  },
50
- "notes": "Installer support and host generation capability are independent. Unresolved native capabilities must be verified on the executing host before generation.",
50
+ "notes": "Image generation uses the same required sealseek-media-cli on every host. Native viewing and command execution still require host verification. Missing media dependency pauses all tasks.",
51
51
  "host_generation_tested": false
52
52
  }
@@ -13,7 +13,7 @@
13
13
  "implementation": {
14
14
  "type": "agent-native",
15
15
  "discovery": "Inspect the current host tool catalog and schemas; verify reference input and result delivery before invoking.",
16
- "invocation": "Use the current host image-viewing tool with absolute local paths; require a vision-capable model and inspect actual pixels, including generated output.",
16
+ "invocation": "Use the current host image-viewing tool to inspect actual local source, reference and output pixels; require a vision-capable model.",
17
17
  "configuration": "Host-managed account and provider authorization; no credentials bundled."
18
18
  },
19
19
  "normalization": "Success: {ok:true,artifacts:[],metadata:{},task_id:null,cost:null,warnings:[]}; failure: {ok:false,code,message,capability_id}.",
@@ -31,15 +31,15 @@
31
31
  "viewable-output"
32
32
  ],
33
33
  "implementation": {
34
- "type": "agent-native",
35
- "discovery": "Inspect current Miora tool schemas and scenario availability in the WorkBuddy host. Resolve built-in miora-creative-core and miora-image-generation by exact logical names from the host catalog, load their current complete SKILL.md and only task-required references. This is a host capability dependency, not a copied business workflow.",
36
- "invocation": "Activate the authorized host multimodal image scenario, observe host batch authorization, use connect_cloud_service and miora_edit_image with actual references in images[]. Follow the current host delivery contract: miora_write_canvas then present_files using copied_assets and miora_open_canvas; individual final images remain separate artifacts. Preserve source frame and explicit user model decisions.",
37
- "configuration": "WorkBuddy built-in Miora image scenario and current-user service access. Authentication stays in host tools.",
38
- "failure": "If the required scenario, built-in capability Skill, multi-reference editing or delivery operation is absent, return CAPABILITY_UNAVAILABLE. Do not invoke Miora outside its allowed scenario or substitute SVG/HTML for raster output."
34
+ "type": "cli",
35
+ "discovery": "Run cloud-hug-style-transfer doctor --json; require dependencies.media.ok and use its verified invocation. Resolve sealseek-media via that CLI skill source --json and load the complete current SKILL.md plus its current host adapter.",
36
+ "invocation": "Follow the current sealseek-media Discover/Prepare/Validate/Submit/Follow/Deliver contract. Pass application-owned prompt and ordered local references, dry-run first, submit authorized generation via --via sealseek --submit, preserve task IDs and verify local output.",
37
+ "configuration": "Required @petercjl/sealseek-media-cli >=0.6.1; private media-package authentication, network and credits. Optional CLOUD_HUG_MEDIA_ROOT points to its installed package root.",
38
+ "failure": "Missing or incompatible package/Skill pauses the entire task before section 1; offer the minimal install prompt and resume only after verification. Service/feature failures pause without native-generation fallback."
39
39
  },
40
40
  "normalization": "Success: {ok:true,artifacts:[],metadata:{},task_id:null,cost:null,warnings:[]}; failure: {ok:false,code,message,capability_id}.",
41
41
  "evidence": [
42
- "Adapter implementation follows inspected host capability descriptions; generation has not been exercised."
42
+ "Canonical sealseek-media 0.6.1 CLI/Skill and live capabilities inspected; paid generation and full host flow not tested."
43
43
  ]
44
44
  }
45
45
  ],
@@ -47,6 +47,6 @@
47
47
  "macos": "implemented",
48
48
  "windows": "implemented"
49
49
  },
50
- "notes": "Installer support and host generation capability are independent. Unresolved native capabilities must be verified on the executing host before generation.",
50
+ "notes": "Image generation uses the same required sealseek-media-cli on every host. Native viewing and command execution still require host verification. Missing media dependency pauses all tasks.",
51
51
  "host_generation_tested": false
52
52
  }
@@ -36,7 +36,10 @@
36
36
  "AUTH_REQUIRED",
37
37
  "PERMISSION_REQUIRED",
38
38
  "PROVIDER_FAILURE",
39
- "OUTPUT_CONTRACT_FAILED"
39
+ "OUTPUT_CONTRACT_FAILED",
40
+ "DEPENDENCY_MISSING",
41
+ "DEPENDENCY_INVALID",
42
+ "DEPENDENCY_INCOMPATIBLE"
40
43
  ]
41
44
  },
42
45
  {
@@ -70,8 +73,22 @@
70
73
  "AUTH_REQUIRED",
71
74
  "PERMISSION_REQUIRED",
72
75
  "PROVIDER_FAILURE",
73
- "OUTPUT_CONTRACT_FAILED"
74
- ]
76
+ "OUTPUT_CONTRACT_FAILED",
77
+ "DEPENDENCY_MISSING",
78
+ "DEPENDENCY_INVALID",
79
+ "DEPENDENCY_INCOMPATIBLE"
80
+ ],
81
+ "provider": "@petercjl/sealseek-media-cli"
82
+ }
83
+ ],
84
+ "dependencies": [
85
+ {
86
+ "package": "@petercjl/sealseek-media-cli",
87
+ "minimum_version": "0.6.1",
88
+ "skill": "sealseek-media",
89
+ "required": true,
90
+ "preflight": "cloud-hug-style-transfer doctor --json",
91
+ "on_missing": "pause-entire-task"
75
92
  }
76
93
  ]
77
94
  }
@@ -0,0 +1,119 @@
1
+ # 摄影方法论:柔光生活叙事摄影
2
+
3
+ ## 风格定义
4
+
5
+ **Soft Lifestyle Editorial Photography(柔光生活叙事摄影)**
6
+
7
+ 以明亮、低反差的**概念棚景**为统一空间基础。空间由连续的白色、奶白色或极浅中性灰棚底、精选家具与织物构成,通过必要的沙发、床铺、地毯和少量木质物件提供生活线索与身体承托,保留简洁连贯的背景和自然的呼吸空间。
8
+
9
+ 通过自然主义人物动作、可信的身体受力、柔和的漫射光、清楚而不过度夸张的空间层次,以及真实可感的皮肤、织物和产品材质,表达拥抱、休息与被陪伴的生活体验。
10
+
11
+ 生活感来自人物的行为,以及人物、抱枕与承托物之间的关系。空间保持经过提炼的棚拍布景,不主动补出门窗、墙角、踢脚线、柜体或整面窗帘来还原完整住宅。
12
+
13
+ **核心命题:在统一的概念棚景中,以观察式摄影记录人物自然使用抱枕的生活片段,让观众通过使用关系感受到舒适、亲密与陪伴。**
14
+
15
+ ## 摄影任务识别
16
+
17
+ 先判断本屏传递什么,再确定人物行为、摄影机视点与画面组织。
18
+
19
+ "首屏""主KV""详情页"只说明页面用途,不自动决定摄影类型。需要延续生活摄影时,首屏同样使用生活叙事方式;漂浮、失重、幻想等概念表达,仅在当前任务明确要求或已经确认时采用。
20
+
21
+ | 屏职责 | 摄影任务 | 可参考的镜头语言 | 关键调度 |
22
+ |---|---|---|---|
23
+ | 采用生活摄影的首屏、环境展示 | 环境主视觉 | 35–50mm,f/3.5–5.6 | 组织人物、产品与承托物的整体关系,保留适合本屏的环境和低信息区域 |
24
+ | 生活互动、日常行为 | 舒适互动生活照 | 约50mm,f/2.8–4 | 人物休息、阅读、倚靠或拥抱,动作服务于当下活动与舒适感 |
25
+ | 情绪近景、亲密体验 | 柔软触感近景 | 70–85mm,f/2–3.5 | 注意力落在脸颊、手臂与产品的接触处,保留理解姿态所需的床品、沙发或身体局部 |
26
+ | 材质、工艺与接触细节 | 材料细节摄影 | 近摄视点,清晰范围服从材料证据 | 表现真实纹理、绒毛方向与局部压陷,可以只拍产品或手部 |
27
+ | 俯拍、休息组合 | 俯视生活构成 | 35–50mm视角,适当较深景深 | 利用身体姿态、物体方向、间隙与承托关系组织画面 |
28
+
29
+ 以上参数用于辅助描述预期透视与景深,不作为固定拍摄模板。
30
+
31
+ 人物居中或偏下、前景遮挡、前后产品呼应,均按构图需要选择。不要求每张重复相同位置、产品数量或虚化方式,也不把三张方案固定为远、中、近三个镜头。
32
+
33
+ 尺寸、SKU及明确的结构展示页优先保证商品信息清楚,不强制套用生活动作或情绪摄影。
34
+
35
+ ## 人物与空间调度原则
36
+
37
+ - 先确定人物正在做什么、为什么需要抱枕,再安排手部、脸颊、视线与产品朝向。
38
+ - 人物的注意力自然停留在当下行为中,不以直视镜头、举起商品或展示性微笑来证明喜欢产品。
39
+ - 睁眼、闭眼、自然笑意和局部露脸均由行为决定,不固定为同一种表情。
40
+ - 肩颈、手臂、躯干与腿部具有可信的重心和支点;接触处保留合理压陷、褶皱与阴影。
41
+ - 产品通过承托、倚靠、拥抱等关系参与生活。生活摄影允许合理遮挡与裁切,不强求每张都展示商品完整正面。
42
+ - 家具与织物承担支撑身体、承托产品或组织空间的作用,按景别选择露出范围,不为填空堆放装饰。
43
+ - 近景也应让人理解人物的姿态与承托关系,但不要求露出完整家具或完整身体。
44
+ - 商品保持当前资料中的形态、比例、颜色、材质与数量,不复制风格参考中的历史SKU。
45
+
46
+ ## 光线与色彩
47
+
48
+ - 采用画外大面积扩散的中性柔光。阴影宽缓,明暗具有适度方向,保留人物与物体的体积。
49
+ - 高调摄影不等于过曝。明亮的同时保留织物纹理、皮肤明暗、浅色产品层次与接触阴影。
50
+ - 白色衣物、床品和产品通过本色、反光特性与柔和明暗区分,不处理成等亮的纯白色块。
51
+ - 避免硬窗格投影、直射光条、突兀光斑、舞台式轮廓光和全图泛黄。
52
+ - 环境以奶白、雾蓝与少量浅木本色建立秩序。奶白材料与木色提供温度,不等于使用泛黄照明。
53
+ - 商品本色可以成为局部色彩重心。颜色鲜明时,降低环境与装饰的竞争,不为统一调性擅自改变商品颜色。
54
+
55
+ ## 空间层次与景深
56
+
57
+ 空间感优先通过物体远近、遮挡、透视、尺寸变化及承托关系建立,再根据用途安排自然退焦。
58
+
59
+ 环境摄影保留必要场景信息;互动摄影保护动作与接触的可读性;情绪近景集中表现局部关系;俯拍与组合图可使用较深景深。
60
+
61
+ 不把极浅景深作为全系列要求,不要求每张都有虚化前景或固定三层道具。虚化符合实际物距,不能用全局模糊替代空间调度。
62
+
63
+ 呼吸感来自主次、轮廓间隙、连续低信息区域与观看距离。白色织物和密集褶皱仍属于视觉信息,不能仅凭颜色浅就视为留白。
64
+
65
+ ## 材质与高频纹理纠偏
66
+
67
+ - 毛绒纤维、织物纹理和自然褶皱属于材料信息,应按当前商品与观看距离真实表现。
68
+ - 保留不同材料的反光、柔软程度和受压变化,避免把皮肤、衣物与产品处理成同一种光滑表面。
69
+ - 排除无意义噪点、凭空增加的细碎纹理、密集装饰、碎高光与过度锐化。
70
+ - "画面干净"不等于消除真实纤维;远景与特写不采用相同的细节密度和锐度。
71
+
72
+ ## 工作流程
73
+
74
+ ### 1. 确定摄影命题与参考职责
75
+
76
+ 先明确:人物正在做什么、抱枕如何参与、身体由哪里承托、摄影机从哪里观察。
77
+
78
+ 选择与本次行为和景别匹配的品牌生活摄影正例,并实际传入生成器。产品资料负责商品事实,当前模特设定卡负责身份与衣着,摄影正例负责空间、行为和观看方式。
79
+
80
+ 旧案例中的人物、裸足、服装与历史商品不覆盖当前设定;失败成图只用于诊断,不自动作为正向参考或商品依据。
81
+
82
+ ### 2. 生成纯摄影底图
83
+
84
+ 摄影阶段不加入标题、LOGO、标语或装饰性图形,集中解决人物行为、空间、产品与光线。
85
+
86
+ 提示词先写具体摄影命题和调度,再写光色、景深与材质。不用"自然、高级、电影感"等概括词替代可见安排。
87
+
88
+ 若最终需要完整图文,提前明确文字分量与大致阅读关系,使摄影构图能够承接后续版式;此阶段仍以摄影底图为输出。
89
+
90
+ ### 3. 摄影审美验收
91
+
92
+ 对照同类正例,检查生活状态、承托关系和观察方式是否成立。
93
+
94
+ 方向偏离时,优先调整行为、视点、距离、承托与裁切,再处理局部光色或材质,不用添加文字掩盖摄影问题。
95
+
96
+ ### 4. 品牌版式设计
97
+
98
+ 需要完整图文时,在摄影成立后完成LOGO、文案与图形组织。文字承接画面主次,保护重要接触位置和商品信息。
99
+
100
+ 纯摄影任务在摄影验收后结束,不自动加字。
101
+
102
+ 摄影与排版分阶段执行,整体阅读关系在规划时统筹。
103
+
104
+ ## 验收:摄影任务是否成立
105
+
106
+ 生活叙事摄影优先检查:
107
+
108
+ - 能否看懂人物正在做什么,以及抱枕在其中起什么作用?
109
+ - 视线、姿态、手部与表情是否符合当下行为?
110
+ - 身体是否得到可信承托,接触与压陷是否自然?
111
+ - 空间是否保持连续浅色概念棚景,并提供必要生活线索?
112
+ - 机位、距离、裁切和清晰范围是否帮助理解人物的使用状态?
113
+ - 观众能否通过这些关系感受到舒适、亲密与陪伴?
114
+
115
+ 如果画面主要依靠人物与商品正面朝向镜头完成展示,生活行为和承托关系难以辨认,应重新检查摄影方向。
116
+
117
+ 不能仅因柔光、浅色背景、闭眼、人物准确或产品清楚,就认定生活叙事成立。近景、较大产品占幅和自然笑意均可成立,关键在于它们是否服务当前行为与摄影任务。
118
+
119
+ 整体关系成立后,再核对人物一致性、商品事实、光色与材质细节。最终以实际成图与匹配正例的对照为准。