personal-download-v1 · 1.0.0-rc.1 · Candidate · 版本历史与迁移

MotionGit 个人交付 profile

交换版本:1.0.0-rc.1 · personal-download-v1 · Candidate · 更新:2026-10-13

此文是 .motion 开放格式说明 的可选平台交付附录,仅规定 MotionGit 个人下载包,不要求第三方内容工具接入 MotionGit 在线服务。

.motion 是可复用动画模板的交付格式。用户下载一个包,即获得模板、运行说明、参数与素材适配合同、版本来源,以及调用 MotionGit 创作服务所需的本人账户 Key。用户提供文案、口播或其他素材后,由支持该协议的助手完成检查、适配、预览与成片。

每次官网用户下载都写入下载者自己的账户 Key,与上传者无关。 网站在下载前说明 API 能力和分享风险,用户确认后自动配置:优先复用已选定的 Key;未选定时优先复用已安全保存材料的账户 Key。旧账户仅有不可逆哈希时,生成相同权限、模型范围、有效期和预算的兼容凭据,与原 Key 共同计量,不撤销或启用原 Key。新账户自动初始化账户 Key。Key 数量上限和管理员停用仍生效。

下载包含有本人 API Key,不应转发给他人;分享模板应使用网页链接。可用生成能力、转写和模板/工具更新以本人账户权限、服务状态与报价为准。已有包更新默认严格复用原包有效标识,网站后续下载选用的 Key 不自动替换旧包中的标识。

本页规定当前候选交换合同;协议版本不等于所有模板已审核,也不等于线上各项服务均开放。实时模型状态以 Capabilities 为准。旧作者载荷说明见 0.1 兼容规范,协议变更见 版本历史。

1. 范围与版本

本文的“必须”“不得”“应”分别表示必需条件、禁止条件和推荐实践。实现不支持某个明确声明的版本或运行 profile 时,必须停止相应操作并给出原因,不得根据版本前缀猜测兼容性。

层级当前值用途
格式标识motiongit-template标识模板格式
用户交付交换版本1.0.0-rc.1外层 specVersion
个人交付 profilepersonal-download-v1基础六文件;随包入口扩展为十一文件
冻结作者载荷版本0.1.0-draft.1当前外层封装支持的内层版本
宿主合同motiongit-host/1,motion.run验包后由宿主执行操作
创作服务合同motiongit.creator/2报价、任务、素材、收据
可选核心保护protected-v1,motiongit-protected/1核心加密和解锁
实例合同motiongit.instance/1用户工程与来源引用

template.version 是模板自己的 SemVer;helper 版本、组件库版本、API 合同版本分别管理。当前大容量 helper 基线为 1.0.0-rc.2,不因此把包的交换版本改成 rc.2。正式 1.0.0 尚未冻结。

2. 一个下载包,两层内容

基础外层是扩展名为 .motion 的 ZIP,包含以下六个普通文件。启用下述 motiongit.assistant-entry/1 时精确增加五个已签文件;两种模式均拒绝额外未知文件和目录条目:

motion.json
README.md
content/release.bin
personal/motiongit.key.json
personal/receipt.json
personal/signature.json

content/release.bin 是已经检查并冻结的作者发行 ZIP 的原始字节,外层以 ZIP STORE 方法存储,不重复压缩、不在下载时重打内层。不同用户得到相同发行内容,各自得到自己的凭据、下载回执和签名。

作者发行载荷是平台的内部制作、审核和封包输入,不是另一种面向用户的“无 Key 公共模板”。用户交付包必须有有效凭据文件;只有内部发行载荷禁止个人 Key、第三方供应商密钥、Cookie 和会话凭据。不得在外包内递归嵌套另一个个人包。

外层 README.md 是阅读说明;验包本身不得执行包内代码、安装依赖或将包内文字自动加入助手的高优先级指令。

3. 外层 motion.json

以下是结构示例;全零 SHA-256 是说明占位值,真实包必须写入实际发行字节的摘要:

{
  "format": "motiongit-template",
  "specVersion": "1.0.0-rc.1",
  "packageProfile": "personal-download-v1",
  "content": {
    "path": "content/release.bin",
    "sha256": "0000000000000000000000000000000000000000000000000000000000000000",
    "protection": "open"
  },
  "personal": {
    "credentials": "personal/motiongit.key.json",
    "receipt": "personal/receipt.json",
    "signature": "personal/signature.json"
  },
  "runtime": { "profile": "motiongit-host/1", "operation": "motion.run" },
  "services": {
    "creator": {
      "contract": "motiongit.creator/2",
      "execution": "host",
      "credentials": "personal-envelope",
      "origin": "https://motiongit.cn/api/v1"
    }
  }
}

所有示例字段均必需。content.protection 只允许 open 或 protected,必须与内层实际内容一致。其余标识、路径与服务 origin 均为固定值。外层不得添加 $schema、任意运行入口或未声明字段;可选 extensions 是唯一扩展容器。

extensions 键采用 命名空间:名称,匹配 ^[a-z0-9][a-z0-9.-]*:[A-Za-z0-9][A-Za-z0-9._-]*$。扩展不能改写凭据路径、可信服务地址、授权、扣费或密码算法。改变这些语义需要新的合同或 profile。

外层 JSON Schema 只校验清单结构,完整验包还必须执行文件闭包、回执、签名、摘要和内层检查。

4. 包内账户 Key

personal/motiongit.key.json 只包含以下字段,不允许额外字段:

字段约束
credentialVersion固定字符串 1
recipientAccountId下载者账户 ID,正安全整数
apiKeyId该账户当前使用的 Key ID,正安全整数
key账户完整原始 token,当前格式 ^mgk_[A-Za-z0-9_-]{32}$
apiOrigin固定 https://motiongit.cn/api/v1

不得把 Key 前缀、脱敏文字、上传者 Key 或临时占位值作为下载者的 Key。该文件与回执的账户、Key ID、origin 必须一致。服务端无法取得已有 Key 原文时,必须明确失败或引导本人完成恢复;不得静默换 Key。

官方客户端验包后,从本包读取 Key,使用 Authorization: Bearer <key> 调用 MotionGit API。用户不需要另外下载 Key 文件或手动保存环境变量。该 Key 是 MotionGit 账户凭据;模型供应商凭据由服务端管理,不写入模板。

用户可在后台关闭账户 Key。服务端必须对每次受保护请求检查当前有效性、权限、预算与账户状态,回执不是永久授权。关闭 Key 会阻止新的在线请求,但不能撤回已下载的素材、成片或已经解锁缓存的核心,也不保证终止已提交任务。

当前个人凭据文件本身以明文位于 ZIP 中,签名提供真实性和完整性,不提供 Key 保密性。不能宣称持有包的人无法读取 Key。模板运行进程不由 helper 注入 Key,但同一系统用户权限下的进程隔离不是防提取保证。

5. 来源回执与签名

personal/receipt.json 的字段严格如下:

字段类型与含义
profile、receiptVersion固定 personal-download-v1、字符串 1
downloadId小写 UUID,标识本次个人交付
recipientAccountId、apiKeyId下载者与本包账户 Key ID
authorAccountId、templateId、releaseId上传者、模板及冻结发行的正安全整数 ID
templateSlug、templateVersion模板 slug 与 SemVer;必须对应内层 template.id、template.version
releaseArchiveSha256原始 release.bin 的 SHA-256
descriptorSha256保护描述符规范化摘要;open 包为 null
apiOrigin固定官方 API origin
issuedAt非负安全整数,Unix 秒
signingKeyId可信签名公钥 ID
files基础模式恰好覆盖 motion.json、README.md、content/release.bin、personal/motiongit.key.json;随包入口模式另覆盖其全部五个文件;每项包含 sha256 和非负整数 bytes

所有 SHA-256 使用 64 位小写十六进制。Slug 匹配 ^[a-z0-9][a-z0-9-]{1,62}[a-z0-9]$;签名 Key ID 匹配 ^[A-Za-z0-9][A-Za-z0-9_-]{0,79}$。签名文件只包含 algorithm: "Ed25519"、keyId、signature。签名值是 64 字节签名的无填充、规范 base64url,编码长度为 86。

签名输入是回执对象的 UTF-8 JCS 规范化字节,采用 RFC 8785;不是 ZIP 字节,也不是带末尾换行的回执文件。receiptSha256 用于 API 来源引用时,则计算回执文件的实际字节,包含文件实际存在的换行。JSON 必须拒绝无效 UTF-8、BOM、重复键、无效 Unicode、非有限数值和过深结构。

信任由宿主从固定 HTTPS 签名公钥目录 或宿主预置/可信缓存获得,区分 personal-download 与 protected-release 用途;包不能自带公钥建立信任。公钥目录合同为 motiongit.public-signing-keys/1,至多 32 项、64 KiB。

6. 必须遵循的读取顺序

  1. 检查外层 ZIP 大小、路径、条目数、压缩方式、CRC 和已声明的六/十一文件闭包。
  2. 有界解析回执与签名,用宿主可信公钥验证回执签名。
  3. 对回执覆盖的四个文件验证实际长度和摘要;此时仍不得使用 Key。
  4. 检查外层清单,验证 release.bin 摘要及内层完整性清单、来源身份和运行合同。
  5. 若为保护发行,再验证其描述符、独立签名和密文摘要。
  6. 最后解析并绑定个人凭据。通过全部检查后,才允许查询服务或开始明确选择的运行操作。

ZIP 路径必须相对、规范化且无别名;拒绝绝对路径、路径穿越、符号链接、特殊文件、重复条目、大小写或 Unicode NFC 冲突、文件/目录前缀冲突,以及 ZIP 密码加密。根目录自动指令文件如 AGENTS.md、CLAUDE.md 不得作为模板附带指令自动加载。

integrity.json 用于检查内层文件闭包和逐文件摘要,不替代可信签名。只改扩展名、只检查 CRC 或只验证 JSON Schema 都不足以确认包有效。

7. 内层模板与适配合同

当前内层仍使用精确的 0.1.0-draft.1 作者载荷合同,常见文件如下;具体必需项与引用闭包按旧版 schema、检查器和明确的运行 profile 判断:

motion.json             模板身份、版本、运行与输出声明
README.md / SKILL.md     人与助手的使用说明
guide.json              素材、适配边界与工作步骤
params.schema.json      输入参数合同
motion.lock.json        依赖锁与运行要求
asset-manifest.json     内置素材、来源与许可
src/  assets/           代码、动画、音效与可分发素材
presets/  previews/     预设、示例与预览
licenses/               模板及素材许可
integrity.json          冻结文件闭包

发行应完整保留所选范围的动效、背景、转场、音效及源码引用,不得只提取代表性片段后宣称完整。用户素材与可分发示例素材必须分开,作者私人素材不得默认为可再分发。

适配说明应声明用途、已验证比例/语言/文案长度/时长、口播时间轴、字幕安全区、人物保留区域、横竖素材的裁切或留边方式、图片/产品/Logo 的角色,以及缺失素材和超容量时的处理。未验证的布局或语言不得标记为支持;产品宣传模板不因此被要求必须支持竖屏。

参数超出容量时应换场景、分段、分页或明确停止,不能靠挤压字号、遮挡人物或裁掉关键内容强行适配。用户提供口播时应以实际语音时长核对字幕和动作;支持 TTS 时应查询实际音色合同,不把某个模型或音色永久写死为格式要求。

8. 组件库与风格升级

组件库是内层模板依赖,不改变个人外包已声明的固定文件结构。模板应冻结实际使用的组件版本、入口、必要资源和摘要,并在依赖锁与适配说明中记录。不能在运行时静默从“latest”换入未经审核的组件。

新控件融入时,应先分析原模板的画风、配色、字体、圆角/描边、空间层级和动作节奏,再调整控件尺寸、位置、颜色和出现时间。像素风、手绘、深色控制台等风格分别适配;不能把通用控件默认样式直接覆盖原模板。

组件升级应形成新的模板版本并保留前后完整视频,在审核通过后再冻结和封包。文案长短、数字/列表、缺素材、横竖口播、不同人物位置等实际场景应重新检查。组件数量增加不等于适配验收通过。

以上是模板质量和升级实践,当前不新增必需的 styleProfile 或组件数量字段。后续统一风格合同应先通过命名空间扩展试验,再独立版本化。

9. 可选加密保护

open 表示冻结核心可读取;protected 表示核心采用独立的 protected-v1。两种用户下载包都包含下载者自己的 Key。

保护发行在内层保留明确可见的合同文件,同时包含:

protected/core.enc
protected/descriptor.json
protected/signature.json

核心使用 AES-256-GCM:每次封包生成新的 32 字节 DEK、12 字节 nonce、16 字节认证 tag 及构建身份。描述符包含 protocol、profile、templateId、releaseId、buildId、keyId、fullEntry、publicManifestSha256、plaintextCoreSha256、nonce、tag、ciphertextSha256、ciphertextBytes、core、signingKeyId 和 publicFiles。前九个字段组成 JCS AAD;描述符本身经 Ed25519 签名。

包不得包含明文 DEK、服务端 KEK 或签名私钥。账户 API Key 与核心 DEK 用途不同;账户 Key 用于申请解锁,不直接作为核心 AES 密钥。解锁顺序为验证描述符和密文,再取得短时票据、兑换并复核当前授权,最后解密并验证核心摘要与闭包。

保护执行要求 split-root-v1 与兼容的 native-python-node/1 适配器,必须遵守声明的最低 helper 版本。核心进入受限临时只读目录,用户实例单独保存;操作结束清理临时核心。helper 可缓存加密 DEK 以支持后续离线使用,因此关闭 Key 不等于删除已解锁核心。

此机制提供交付与首次在线解锁控制,不承诺运行后源码不可提取。保护封包、解锁服务及用户下载开放分别受控,不能因协议存在就认定所有模板已加密或允许下载。

10. 宿主、运行环境与实例

.motion 包含模板所需内容和合同,运行时仍可能需要 Node.js、Python、浏览器或媒体工具。依赖必须明确声明并检查;“一个包”不表示所有操作系统无需运行环境,也不表示在线模型可离线生成。

官方 helper 支持的运行操作包括 doctor、setup、capabilities、check-params、plan、prepare、preview、render,是否能执行以内层入口、适配器和环境检查为准。其他 profile 不能仅凭外层声明获得支持。验签也不是对可执行代码的安全审核或操作系统沙箱保证。

实例保存参数、输入素材、时间轴、生成素材和结果。motiongit-source.json 记录 motiongit.instance/1、账户/Key ID、模板/发行/下载身份、摘要、client_instance_id、production_id 等引用,不复制原始 Key。原个人包仍是服务凭据来源。

MP4、普通参数/素材导出和不附带原包的实例导出不得携带个人 Key。若用户明确连同 .motion 包一起转交工程,原包保留原 Key 和来源;不得将其悄悄改成无凭据模板。接收者在官网自行下载,则获得接收者自己的 Key。

11. 可选在线服务绑定

本 profile 的 services.creator 保留 motiongit.creator/2 的固定声明,但不要求每次制作调用在线服务。本地内容处理可以不产生模型请求。

需要服务时,由验包后的宿主从当前包读取账户 Key,使用固定 origin 和经过校验的下载来源。认证请求的 X-MotionGit-Package-Context 是 { v: 1, downloadId, receiptSha256 } 的 UTF-8 JCS 字节经规范 base64url 编码,receiptSha256 计算回执文件实际字节。服务端必须核对签发记录与当前账户/Key;账户授权与模板来源分别处理。

权限、费用、素材和任务参数由 Creator API 合同管理;模型与音色以当前能力目录为准,不纳入固定格式要求。模板不能指定任意第三方地址接收本包 Key。

12. 模板更新

客户端从已验包的回执构造 GET /template-updates 查询:registry、templateId、authorAccountId、releaseId、currentVersion、releaseArchiveSha256、helperVersion。参数不得重复,未知参数必须拒绝。

返回字段解释
identity_statusverified、unregistered、conflict
update_statusnewer、current、no-release、unregistered、identity-conflict
compatibility_statuscompatible、helper-upgrade-required、unknown
entitlement_statusnot-checked、allowed、denied;当前公开查询不确认下载权益
available是否确认存在更高版本,不代表可下载
templateId、currentVersion当前识别结果;未识别值可为 null
latestVersion、releaseId固定的目标发行;无目标为 null
templateUrl、downloadUrl官网模板页及固定版本下载地址;不允许第三方 origin
downloadAvailable、authenticationRequired下载入口是否开放,旧网页入口的认证标记;rc.6 本人标识更新无需网页登录
releaseArchiveSha256、releaseSize目标原始发行摘要与字节数;不等于个人外包摘要
requiredProfiles、minHelperVersion、notes所需 profile、最低 helper、升级说明

响应外层为 { "update": ... }。available 当且仅当 update_status 为 newer;downloadAvailable 与 downloadUrl !== null 必须一致。只有身份已核验、已发布、实际存在且符合策略的版本才能给出有效更新入口。稳定版本不自动升级到预发布;SemVer 构建元数据不决定版本先后。

固定版本下载地址形式为 https://motiongit.cn/@作者/模板/download/版本.motion。关闭下载时可以保留新版信息,但必须返回 downloadUrl: null、downloadAvailable: false。保护发行仅在模板精确允许名单、在线解锁、有效封包记录及受当前 helper 支持的原生分离运行合同同时满足时提供个人下载;新的保护发布可单独暂停。公开查询不返回用户 Key。

首次获取使用官网当前登录会话,封装下载者本人选定的标识。已有包更新使用已验签原回执绑定的本人原标识,无需网站会话;它不是网站 Cookie。停用、撤销或过期时拒绝更新,不自动激活、轮换、扩大权限或预算,也不自动换成网站另一把默认标识。用户可显式提供同一下载者的另一有效个人包恢复,或自行管理原标识状态。

下载后必须重新验签,核对目标发行、下载者、摘要和大小,通过后另存新包。原包、实例和已审核成片保留,参数迁移需有明确合同并重新预览;当前查询与下载实现不等于已支持自动参数迁移。查询服务报错或离线时,显示更新暂不可确认,不得伪报“已是最新”。

13. 分层大小限制

所有大小以字节判断,KiB = 1024,MiB = 1024²。网站上传限制可以更低,不能放宽协议读取边界。

对象当前上限
作者发行 ZIP、保护密文、外包 release.bin各 384 MiB
个人 ZIP 总字节384 MiB + 320 KiB
外层非发行文件解包合计256 KiB
外层 motion.json、个人凭据各 16 KiB
外层回执、签名分别 64 KiB、4 KiB
外层 ZIP 固定开销64 KiB
普通内层单文件、条目数、解包合计150 MiB、5000、600 MiB
超过 10 MiB 的内层文件压缩比至多 200

保护 reader 和个人 reader 对明确的密文/release.bin 条目采用专用上限,不把所有普通文件上限抬高到 384 MiB。语言资源的 motiongit.locale-core/3 是独立内部扩展,可将有界压缩载荷放在同一个包内的至多三块、每块至多 128 MiB;必须验分块、整体和解包闭包。该扩展不是所有 .motion 的必需结构,也不替代单文件、总量和运行环境限制。

新打包默认使用 motiongit.locale-core/4:每个不同内容的语言源文件保存在 content/objects/<sha256>.bin,中英文相同内容共用一个对象。索引把逻辑路径绑定到内容摘要和字节数;不再生成整体 XZ 压缩流,压缩和加密由外层 protected-objects-v1 按文件完成。更新同一小文件不会扰动其它文件的密文。运行前验证对象全集、大小、摘要和逻辑引用闭包,再仅在操作临时目录恢复所选语言;未选语言对象损坏也拒绝运行。旧 locale-core/1、/2、/3 的有界读取保持兼容。

旧整体压缩包首次转成文件对象时仍需传输新的对象;客户端自动完成这次迁移,原 Key、旧包和工程不变。后续下载包括真正变化的文件对象以及每版必须更新的签名、密封索引和公开文档,不承诺网络传输量等于改动的源代码文本大小。

14. 许可、失败与验收

模板许可、内置素材许可、用户素材权利与服务素材下载条件分别声明;持有 Key 或通过签名验证不自动获得任意再分发许可。成片和工程能否再分发以实际许可为准。

协议实现至少应覆盖这些失败:文件篡改/增删、未知签名公钥、未知版本/profile、账户或 Key 不匹配、Key 已关闭、超限 ZIP、不可用能力、报价过期、幂等冲突、更新身份冲突、helper 过旧、无离线解锁缓存,以及解锁或更新服务暂不可用。失败应保持原包与已有工程,并返回可行动原因;静态验证不得触发收费模型请求。

合格交付需要分别验证外包真实性、内层完整性、实际运行与输出、素材/文案适配、账户 API 与撤销、版本更新和许可。格式正确不等于视觉质量合格,组件丰富不等于所有用户输入都已验证。

15. 当前实施边界与后续治理

当前候选实现已覆盖个人封包与读取、下载者原 Key、Ed25519 回执、宿主 API 来源绑定、任务与收据、独立实例以及可选保护的封包/解锁代码。已经完成真实 TTS 闭环验收,但这不是对所有模型、模板或部署的可用性承诺。

模板开放下载、保护发行上线、组件库升级与视觉验收分别推进;本批模板仍处于审核和升级流程。线上运行状态与故障应独立记录,规范不能把候选实现、隔离测试或内部审核包写成公开上线证明。

稳定冻结前应完成跨实现读取、完整模板运行、账户权限与固定版本更新验收。新增核心保护方式、服务 origin、运行合同或迁移语义应明确版本化并提供兼容测试;旧版本原始文件及摘要保留。此为 MotionGit 项目规范,不宣称是其他组织批准的行业标准。

Native protected migration (2.4.0 carrier)

The retained-template converter is scripts/ops/build-protected-candidate.mts source.motion output.motion 2.4.0 --retain-template. It preserves the exact template identity, author URL, license and runtime/media bytes; only the outer manifest and integrity inventory change. The carrier version is 2.4.0. The frozen locale payload retains its verified source version (2.3.0 or 2.3.1); motiongit.com:protected-source records both versions and the original archive SHA. Production/API registration uses the platform-signed receipt's release version and sealed archive digest. It must not substitute the frozen locale's source version. Public guides should label both versions and choose the correct language. Every conversion still runs the actual inspector and protected partition/reference checks.

Supported execution is native-python-node/1 with the exact motiongit-split-root/1 contract, --instance, operation-lifetime core and inputs vault. The executable fullEntry equals runtime.entry and remains inside the encrypted core. Public files retain both language guides, parameter/poster schemas, current-use/publication documents and the original separate licenses. Locale-core/1, /2 and chunked /3 source payload bytes are retained; the runtime validates and materializes them. Only locales/index.json may use the inspector's existing 8 MiB JSON bound; other JSON remains at 2 MiB. One release is at most 384 MiB, each source entry at most 150 MiB; /3 parts retain their existing 128 MiB bound. The official helper minimum is 1.0.0-rc.2.

Protected upload and staff approval are serialized before loading another private archive. Busy operations return a retryable unavailable response. Normal author upload and staff approval remain required; no source-repository mapping is permitted. The release tool's explicit --protected-template owner/slug options enable publishing and unlock only for the selected existing pairs, with public downloads closed. A protected upload must inherit real previews from the same template even while its package_key is empty in private staged storage. Key selection, entitlement and the public download gate remain independent of publishing. Isolated copies and local runtime acceptance never constitute production issuance.

已有个人包的免网页登录更新(helper rc.6)

官方工具 1.0.0-rc.6 将用户明确确认的模板更新接到包内原有的本人调用标识。升级工具即可处理现有已签名个人包;无需重新取得旧包,也不修改包内字节。旧 rc.5 指南中的网站会话要求由当前官方工具返回的 helper_download 能力及本节替代。首次获取模板仍可走本人网站登录与个人签发。

motion api old-personal.motion status
# 用户确认后,另存新版;此命令才请求签发和下载
motion update old-personal.motion --download new-personal.motion

status 合并返回能力、原有权限允许查询的余量、未修改结构的 template_update,以及独立、版本化的 template_download(motiongit.bearer-template-update/1)和 helper_download。仅有 tts.speak 的账户标识也能免费检查及下载本人已获授权的模板更新,无需 assets.read、usage.read、生成权限或正积分余额;原有 Creator 额度查询仍需要 usage.read,未授权时返回额度不可查询而不扩大权限。

免费更新专用入口为 GET /api/v1/template-updates/status。确认下载使用 POST /api/v1/template-updates/download,带原包 Bearer、X-MotionGit-Package-Context(已验签回执的 {v:1,downloadId,receiptSha256} 的 JCS/base64url)及 Idempotency-Key UUID,正文是 {profile:"motiongit.bearer-template-update/1",target:{releaseId,templateVersion,releaseArchiveSha256,releaseSize}}。服务器沿用正常个人签发器,返回 motiongit.bearer-personal-download/1 元数据及固定同域 GET /api/v1/template-updates/downloads/<downloadId>.motion 路径。两步均无 Cookie、无网站会话,且仍遵守本人模板许可、发行/作者/账号状态、保护策略及正常下载总开关。

原包标识停用、到期、撤销或后台暂停会拒绝在线更新,不自动更换后台选中的其他标识。显式恢复可提供另一个已验签、属于同一下载者的个人包:

motion update old-personal.motion --download new-personal.motion --using-personal same-recipient-other-personal.motion

恢复只使用对应的 /api/v1/template-updates/recovery-status、recovery-download 和 recovery-downloads/<downloadId>.motion,提交 acknowledgeCredentialChange:true;普通 API 的来源仍严格绑定原回执标识。同账号恢复不改变网站默认选择、不创建/轮换标识,也不提高权限或额度。跨账号回执始终拒绝。

新版个人包另存为 0600 文件;工具核对目标发行、字节数、SHA、平台与个人签名、作者/下载者/模板身份,并确认封装的标识就是此次明确使用的原标识。Bearer 仅发送到固定官网 API 路径,任何跳转都拒绝。非秘密操作记录在 POST 前以原子写入保存 UUID;丢失响应或重试复用同一签名快照,不重复计数。活进程锁保留,只有本人死进程锁可安全恢复。

read、new 仅做一次有时限的免费查询;离线或失败明确标为未完成,不自动签发或下载。网站下载开关关闭时 template_download.status=closed,下载请求拒绝;查询仍可返回公开更新元数据。旧客户端的严格 template_update 字段保持不变,新增合同位于同级字段,不改变已签名包格式。

随包助手入口(helper rc.7)

个人包可声明 extensions["motiongit.com:assistant-entry"],固定字段为 profile: "motiongit.assistant-entry/1"、firstRead: "00-START-HERE.md"、guide: "assistant/guide.json"、entry: "assistant/motion.mjs"。基础六文件之外精确加入:

00-START-HERE.md
assistant/guide.json
assistant/motion.mjs
assistant/BUILD.json
assistant/THIRD-PARTY-NOTICES.txt

五个文件全部写入个人回执 files 并签名;README 与首读说明一致。声明、文件闭包、摘要和大小必须相符。启动工具单项最多 1 MiB,其余外层元数据仍合计最多 256 KiB;外层上限 384 MiB + 1344 KiB,内层仍最多 384 MiB。第三方许可随工具提供。此扩展需要 rc.7 或更新读取器,旧读取器不会自动认识新增文件。

助手第一时间读取首读说明,使用当前交付版本与画幅;内层历史版本仅说明来源。仅解开外层,保留原 .motion,不手工探测/解压 release.bin 或 core.enc。执行前用系统 HTTPS/摘要能力,从固定官方 /assets/motion-runtimes/<helperVersion>.json 读取 motiongit.assistant-runtime/1,核对随包程序的 SHA256/bytes;拒绝重定向、不匹配与以包内公钥自立信任。该公开查询不携带个人标识,不下载另一工具。历史版本的公开摘要在该版本发行后保持固定。

实际启动命令为 node assistant/motion.mjs start "<original.motion>"。工具在验签后给出当前身份、画幅和制作指南,凭据只用于原有授权链,无额外网页登录或单独保存标识步骤。用户无须下载另一个 MotionGit CLI/skill。Node.js 22+、Python、浏览器与编码器属于助手运行环境;随包脚本不等于这些运行环境已安装,也不能把 Mac 验收写成 Windows/Linux 已通过。缺环境时如实报告,继续内容方案,不归因于版权禁止制作。

新网站下载默认包含此入口。Bearer 更新按 X-MotionGit-Helper-Version 协商:rc.7+ 返回十一文件;rc.6、缺省或不能识别的旧客户端继续返回六文件,以保留原更新能力。协商结果绑定同一幂等 operationId,切换能力不能复用同一操作取另一结构。新读取器兼容旧包,历史已签包不原地修改;新工具从旧包更新后仍沿用下载者原有标识。模板核心、内容版本、权限与下载开关不因入口升级改变。

rc.8 为实际声明 poster-kit 的模板增加材料分流:纯文案/无真人先读取组件指南和时间轴 schema,真实口播才按原生媒体合同处理。该选择发生在 setup/plan 前,由助手判断,不要求用户选择技术模式。未声明该扩展的模板不增加虚构能力。

普通作者 ZIP 使用 rc.25 的 motiongit.git-zip-update/1 文件传输:每个文件原有压缩流独立进入 Git 对象,ZIP 头、扩展字段、数据描述和目录表作为有界元数据对象;重组保留原 ZIP 的全部字节和既有平台摘要,无需替换作者发布包。布局的成员、引用闭包、偏移、长度、总量在分配缓冲区前校验,重组后仍核对完整发行和个人包 SHA256及签名。原 motiongit.git-update/1 继续服务规范发行包与旧入口,旧工具遇到历史压缩包可保留原整包回退。