发布游戏
把网页游戏发布到 OriginGame,得到可分享的游玩链接、作品页和版本历史。可以从 Origin、你自己的 Agent、发布脚本或 HTTP API 发布,四种方式走同一个发布接口。
发布方式
| 方式 | 适合 | 凭据 |
|---|---|---|
| 从 Origin 发布 | 在 Origin 里做的游戏 | 登录 Origin 即可 |
| 让 Agent 通过 Origin MCP 发布 | 在自己的 Agent 里做的游戏 | MCP 的浏览器登录,或 Origin Kit / 安装脚本配置的设备凭据 |
发布脚本 deploy.sh | 终端和 CI | 账号 API token(og-...) |
HTTP API POST /api/deploy | 自己的流水线 | 账号 API token(og-...) |
不管用哪种方式,一个新游戏会得到一个游戏 ID 和第 1 个版本;之后每次更新都是一个新版本。
上传要求
- 一个静态网页构建,打成 ZIP,根目录有
index.html。如果 ZIP 里只有一个顶层文件夹且其中有index.html,平台会自动把它提到根目录。HTML、Three.js、Godot 和 Unity 的网页导出都可以。 - 游戏运行时不要跨源请求其他站点,所有资源随包一起发布。
- 新游戏必须有标题和封面。封面是 16:9 的 PNG 或 JPEG,至少 640×360,不超过 5 MB。
- 可选:3:4 竖版海报(PNG 或 JPEG,至少 600×800,不超过 5 MB);最多 6 张截图,每张不超过 2 MB。
- 通过
POST /api/deploy的file字段上传的 ZIP 最大 200 MB(平台可以调低这个上限,超过时返回413)。
Unity WebGL
构建 WebGL 版本(Unity:File → Build Settings → WebGL),发布构建出的文件夹,也就是含有 index.html、Build/ 和 TemplateData/ 的那一个。
- 任何压缩方式都可以:Brotli、Gzip 或 Disabled,不需要开启 "Decompression Fallback"。平台会识别用 Brotli 或 Gzip 压缩的 Unity 构建(一个定义了
createUnityInstance的*.loader.js,旁边有.br或.gz文件),并以对应的Content-Encoding和内层文件的类型提供这些文件(game.wasm.br按application/wasm提供)。 - 单个文件不超过 512 MiB,整个构建不超过 1 GiB(最多 20,000 个文件)。
- 多线程构建需要跨源隔离:在构建根目录放一个
origingame.runtime.json,内容为{"version":1,"crossOriginIsolated":true}。 - Windows、Mac、Linux 和 Android 构建无法发布,请导出 WebGL。
- 装有带 WebGL Build Support 的 Unity Editor 时,
npx origingame会识别 Unity 项目并替你构建。
运行声明
构建根目录的 origingame.runtime.json 说明平台如何运行这个构建。除 version 外每个字段都可选:
| 字段 | 含义 |
|---|---|
version | 固定为 1 |
crossOriginIsolated | true 时发送 COOP 和 COEP,用于 SharedArrayBuffer 和多线程 |
precompressed | true 时每个 .br 文件带 Content-Encoding: br、每个 .gz 文件带 Content-Encoding: gzip 提供,类型按内层文件名决定(app.wasm.gz 是 application/wasm)。不声明时 .br 和 .gz 是普通文件,原样下载。Unity 构建会被自动识别;设为 false 关闭识别 |
生效的值会作为 runtime 出现在发布应答和版本列表的每一项中。
从 Origin 发布
在 Origin 的「发布」视图里点「发布…」,或在对话里让 Origin 发布。Origin 先打包(某个检查点的不可变构建存档),再用 deploy_create 或 deploy_update 发布,并把源码检查点记录在发布上。提交前平台会在 Player 里检查游戏能否加载并报告就绪,检查失败时什么都不会发布。发布后在「发布」视图里切换上线版本。详见 Origin。
通过 Origin MCP 发布
接入 Origin MCP(https://mcp.origingame.ai/mcp,见 Origin MCP)后,对 Agent 说「把这个游戏发布到 Origin」即可。Agent 使用这些工具:
| 工具 | 作用 |
|---|---|
deploy_list | 列出你账号下的游戏 |
deploy_prepare_upload | 为 ZIP 申请直传地址(按 size_bytes 和 sha256),支持最大 1 GiB |
deploy_create | 新建游戏:upload_id(或不超过 25 MiB 的 archive_base64)、标题、封面等 |
deploy_update | 更新已有游戏,需要 game_id 和 expected_revision |
deploy_update_metadata | 只改标题、简介、类型或是否公开列出,不上传构建 |
deploy_status | 用保存的 operation_id 查询一次发布的实际结果 |
deploy_releases | 列出版本、当前和上一个上线版本、revision |
deploy_activate | 把保留的某个版本(或 previous)切换为上线版本 |
deploy_discard_release | 永久删除一个非当前版本的文件 |
deploy_delete | 删除游戏 |
deploy_generate_artwork | 生成封面和竖版海报(会扣费) |
Origin MCP 的发布指引要求 Agent:公开发布、更新指定游戏或删除前先征得你的同意;重试时复用同一个 operation_id 和相同输入;结果不确定时先用 deploy_status 查询,而不是再发布一次。发布成功后,Agent 应报告返回的 gameId、playUrl 和 portalUrl。
用脚本发布
发布脚本 deploy.sh 在 origingame-skill 仓库里,需要 bash、curl 和 Bun,并从环境变量读取 OG_API_KEY 和 OG_HOST:
git clone https://github.com/fran0220/origingame-skill export OG_HOST=https://origingame.ai export OG_API_KEY=og-... origingame-skill/scripts/deploy.sh ./dist --title "Neon Dodge" --cover cover.png
- 第一次发布后,脚本在游戏目录里写入
.origingame-deploy.json,记住发布者和游戏 ID,之后的运行更新同一个游戏,而不是新建一个。这个文件不会被打进上传的包。 - 更新必须带
--expected-revision,取值来自版本列表:
origingame-skill/scripts/deploy.sh releases list GAME_ID origingame-skill/scripts/deploy.sh ./dist --update GAME_ID --expected-revision 3
- 运行
deploy.sh --help查看全部选项(简介、类型、方向、标签、语言、截图、海报、不公开列出等)。
用 HTTP API 发布
所有请求都用 Authorization: Bearer og-...,地址是 https://origingame.ai。
新建游戏
curl https://origingame.ai/api/deploy \ -H "Authorization: Bearer $OG_API_KEY" \ -F "title=Neon Dodge" \ -F "cover=@cover.png" \ -F "file=@dist.zip" \ -F "description=Dodge the neon walls." \ -F "genre=arcade" \ -F "orientation=portrait"
成功返回 201:
{
"gameId": "...",
"slug": "neon-dodge",
"version": 1,
"releaseId": "...",
"traceId": "...",
"runtime": { "crossOriginIsolated": false, "precompressed": false },
"warnings": [],
"playUrl": "...",
"portalUrl": "https://origingame.ai/g/neon-dodge"
} 更新游戏
先读版本列表,拿到当前的 revision,再用它更新。不带 expected_revision 返回 428;revision 已经变化返回 409,这时应重新查看版本历史再决定,不要自动用新值重试。
curl https://origingame.ai/api/deploy/games/GAME_ID/releases \ -H "Authorization: Bearer $OG_API_KEY" curl -X PUT https://origingame.ai/api/deploy/GAME_ID \ -H "Authorization: Bearer $OG_API_KEY" \ -F "expected_revision=3" \ -F "file=@dist.zip" \ -F "changelog=Faster walls after level 5"
GET /api/deploy/mine 列出你账号下的游戏。
表单字段
| 字段 | 说明 |
|---|---|
file | 构建 ZIP,根目录有 index.html,最大 200 MB |
title | 标题,新建时必填 |
cover | 16:9 封面,新建时必填 |
poster | 3:4 竖版海报,可选 |
screenshots | 截图,可重复,最多 6 张 |
description | 简介,最多 2000 字符 |
tagline / controls / changelog | 一句话介绍(120 字符)、操作说明(600 字符)、本版更新说明(1000 字符) |
genre | arcade action puzzle shooter platformer racing strategy casual education cards other |
engine | html(默认)、origin-engine(og build --publish 产物)、unity(Unity WebGL 构建);threejs 已弃用(新作品退役,仍接受);godot 新发布拒绝(Godot 的网页导出按 html 发布;已发布的 Origin Wizard 0.4 及更早版本声明的 godot 按 html 存,并带 engine.godot_as_html 提示) |
orientation | any(默认)、landscape、portrait |
aspect | 画面比例,如 16:9;默认铺满 |
max_players | 1 到 16,默认 1 |
tags / languages | 逗号分隔,如 neon,dodge 和 zh,en |
unlisted | true 时不出现在公开列表里,游玩链接照常可用 |
operation_id | 可选,16 到 128 位字母、数字、_ 或 -;用同一个值重试不会重复发布,结果可用 GET /api/deploy/operations/<operation_id> 查询 |
expected_revision | 更新时必填,来自版本列表 |
版本、上线与回滚
- 每次发布或更新都会生成一个新版本。成功发布的版本没有自动过期,文件会一直保留,直到你丢弃它或删除游戏。
- 把某个保留的版本切换为上线版本,不需要重新上传或构建。方式有四种:Origin「发布」视图里的「上线」;/me/games 的版本历史;MCP 的
deploy_activate;或 HTTP API:
curl https://origingame.ai/api/deploy/games/GAME_ID/releases/activate \
-H "Authorization: Bearer $OG_API_KEY" \
-H "Content-Type: application/json" \
-d '{"releaseId": "previous", "expectedRevision": 3, "operationId": "rollback-neon-dodge-0001"}' releaseId填版本列表里的releaseId,或previous表示上一个上线版本。operationId为 16 到 128 位,重试时复用。- 切换版本不会回滚玩家的云存档,旧的多人房间会断开;运行设置跟随版本,商店页文字、封面和截图保持不变。
- 脚本对应的命令是
deploy.sh releases activate GAME_ID previous REVISION OPERATION_ID。 - 丢弃版本(
deploy_discard_release,或 /me/games 里的丢弃)会永久删除该版本的文件,之后无法再切换回去。
发布后得到什么
- 分享链接
https://origingame.ai/g/<slug>,游玩页/g/<slug>/play,以及响应里playUrl给出的独立游玩地址。 - 作品页
/games/<slug>:排行榜、评论和作者的其他作品。游戏出现在「游戏」和你的创作者主页,可以分享、点赞和评论;设为不公开列出时只能通过链接访问。 - 平台能力:游戏通过游戏协议(Player protocol 2)使用玩家身份、排行榜、云存档和多人房间,见 游戏协议。
- 管理:在 /me/games 编辑标题、简介和类型,切换是否公开列出,查看版本历史,删除游戏。通过 Origin MCP 还可以查看和重置排行榜、查看云存档、管理评论和查看举报。
- 检查与审核:发布后平台会在 Player 里检查游戏能否正常加载,结果记录在版本列表里;新游戏发布后会通知运营审核内容。