PROC-02-018 独立媒体服务部署验收20261022
pic-vps独立实例、数据库复制初始化、新私有桶、HTTPS文件链路与旧业务隔离验证
1. 本次结论
2026-10-22,按用户明确授权在 pic-vps 部署独立副本,入口为 media.oceanway.tech。数据库已经从旧实例一致性复制并在新库完成开发初始化;两个新私有桶和专属访问身份已创建。独立 HTTPS 文件上传、存储、下载、复用和重启后持久化验证通过。平台调用没有切换,旧业务继续使用原服务和原桶。
本记录不是生态图片重构全部完成的声明。真实供应商图片/视频生成、视频任务与回调、平台/Runtime切换、画布本地草稿与IndexedDB上传队列,均未在本次部署中验收。新实例所有供应商渠道和视频路由暂时禁用,普通服务用户额度为零,未创建客户调用令牌,未发起付费模型请求。
2. 运行资源与制品
| 项目 | 实际状态 |
|---|---|
| 主机与入口 | pic-vps,45.205.28.46,HTTPS media.oceanway.tech;DNS原有A记录已指向该主机,本次未改DNS |
| 部署目录 | /opt/oceanway-media-isolated |
| Compose project | oceanway-media-isolated |
| 容器 | oceanway-media-isolated-app / -postgres / -redis |
| 数据库 | 新 PostgreSQL 容器及卷,oceanway_media_isolated,独立角色与密码 |
| Redis | 新容器、卷和密码;没有复制旧缓存/队列 |
| 网络 | PG/Redis仅内部网络且不发布宿主机端口;应用宿主机入口仅127.0.0.1:18096,独立出口网络 |
| 源码基线 | 旧实际部署版本8c243f103078c0cf3178041250d0a2547f34c3c2,未使用本机其它未提交改动 |
| 新源码提交 | 18da5780a3d942876d1c9c9ff3bbadcfa088b01d |
| 新镜像ID | sha256:f93b9d807385abd2173254b9bd1943bed140bf1cd612b6be6cd4b664bb511a38,Compose固定ID;本次为pic-vps本地构建制品,未发布镜像仓库 |
| 资源限制 | app 2 CPU / 2 GiB,PG 1 CPU / 1 GiB,Redis 0.5 CPU / 192 MiB |
域名通过现有 Caddy 增加独立站点。发布前对完整适配配置进行比较,仅允许增加新host路由;Caddy自动生成的路由组编号和输入配置文件隐藏路径做等价规范化。替换前再次核对原配置,验证通过后原子替换并reload,没有重启旧应用。
3. 新桶与原件管理
| 新桶 | 分工 | 实测配置与状态 |
|---|---|---|
oceanway-media-assets-cn | 上传素材、生成图片/视频的统一正式存储目的地 | cn-beijing、私有、标准存储、SSE-TOS/AES256、无生命周期规则;真实上传测试文件已落此桶 |
oceanway-media-temp-cn | 临时传输/处理预留 | 同上,无七天删除;读写、删除、分片上传/列举/取消通过,当前应用尚无入口切到此临时桶 |
没有复制旧图片、视频或对象。新库旧素材、原件登记和引用已清空;测试中仅新增一份微型PNG验证文件。File Bridge登记为1条managed file和1条claim;旧native assets表仍为0,没有将底层文件登记冒充平台素材库接入完成。原件唯一性、摘要校验、权限校验继续有效,正式上传与生成输出可配置到同一个新桶,避免仅为“原件资格”再次跨桶搬运。
应用新增显式MEDIA_RETENTION_MODE=permanent:视频归档写ExpiresAt=0;File Bridge仅在永久模式允许正式桶与通用媒体桶相同;图片和视频运行时配置摘要均包含该模式。未设置时保持旧七天默认,错误值拒绝启动存储组件。新桶没有生命周期规则与应用永久保留同时成立,不以MEDIA_RETENTION_DAYS=0冒充永久模式。生产视频归档执行尚未开启,零到期行为由定向测试覆盖。
4. 数据库复制与初始化
源数据库newapi_oceanway只执行一致性pg_dump;pg_restore --no-owner --no-acl及初始化均限定在新容器/新库。脚本检查目标project、数据库名称、独立卷、空库、应用不存在和初始化标记;发生失败时不放行应用。
源快照大小 569,664,116字节,SHA-256为1529826ebf7319679fde26f9fadcadf85fa2ecebf665d62640bd6ba528f2b8b0。恢复50张表,保留10张配置表:渠道、模型、供应商、受限options、setup记录及五张视频路由/供给配置表。其它40张表在新库重置,含历史任务、回执、日志、订单、用户、令牌、OAuth/2FA/passkey、旧备份表、素材/原件/引用和任务锁。
额外处理:
- 所有渠道与视频路由禁用;Codex类型57的OAuth凭据清空,防止两个实例刷新同一凭据。
- options仅保留模型/计价/分组等白名单;旧支付、回调、邮件、外部登录等配置不继承,服务地址改为新域名,关闭注册和渠道自动测试。
- 创建
media-admin和media-service两个新身份,独立密码,额度为零;不触发空库默认root/123456创建。 - session、crypto、File Bridge签名及principal、数据库、Redis、S3凭据均独立;旧File Bridge token不复用。
- 首次运行采用slave模式,关闭任务轮询、渠道模型更新、视频归档/回调,初始化检查为2用户、0令牌、0历史任务、0system task、0启用渠道。
复制过程SSH连接曾中断,但服务器端恢复进程继续执行,最终初始化标记及新库计数验证成功;没有重复恢复或绕过检查。验收后移除本轮生成的敏感数据库快照,仅保留摘要;没有把快照或旧客户数据提交到仓库。
5. 独立验证结果
| 检查 | 结果与边界 |
|---|---|
| 新域名健康与TLS | /api/status为200/success,正常证书校验;浏览器可打开OceanWay Media页面 |
| 新管理员登录 | 登录及self接口通过;默认root密码被拒绝 |
| 旧顾客凭据隔离 | 使用旧实例token100请求新实例模型列表返回401,没有发起生成 |
| File Bridge未鉴权 | 上传入口返回401 |
| 真实上传与摘要 | 68字节PNG上传200,下载SHA-256与提交内容一致;素材落新正式桶 |
| 重复提交 | 相同command重复上传返回同一file_ref |
| 下载与复用 | 授权GET、HEAD为200;Range为206;匿名对象读取403;无效grant为403 |
| 新实例重启 | 仅重启新app后再次验证,原file_ref保持一致,签名下载与摘要检查仍通过 |
| 新桶权限 | 专属IAM对两个新桶列举200;五个旧业务桶列举403;旧素材/媒体桶对象HEAD为403 |
| 临时桶能力 | PUT/GET/DELETE、分片创建/上传/列举/取消通过;读取对象确认AES256 |
| 旧服务容器 | old app/PG/Redis的容器ID、镜像ID、配置摘要和重启次数与部署前相同,均healthy |
| 旧域名 | new.ocean-way.top、api.ocean-way.top、api.uumi.lol健康200/success,uumi.lol主页200,TLS验证正常 |
| 平台连接 | 部署前后13条模型连接和authority的完整记录摘要相同,没有改连接、绑定或凭据 |
| 供应商生成 | 未执行;不能将文件链通过等同图片/视频模型生成验收 |
单次微型文件初次上传约1.449秒,重启后幂等复用约0.441秒。这是功能验收观测,不是容量、弱网或大型素材性能基准,不能据此承诺画布添加速度已经优化。
6. 代码验证、证据与后续
代码审阅入口:Producer PR #1与Infrastructure PR #39,均为Draft,未合并。Infrastructure完整提交为87dc0f0b5d68dd0db83ad0bb0690c2d0ec85f67b,与源码提交一起完成独立AI复核,未发现剩余阻断项。Producer PR的pr-quality检查通过。
源码定向测试通过:go test ./service ./router -run 'Test(MediaRetentionMode|S3Media|NewS3Media|SeedanceV2Archive|FileReference|FileOriginal|ImageOutputArchive)' -count=1。Docker生产构建通过。部署Python脚本完成语法检查和独立AI审查;数据库初始化、环境隔离、HTTPS及真实TOS文件链具备执行证据。AI审查不是人工验收,也没有合并旧生产分支。
脱敏证据包含database-initialized.json、image-manifest.json、iam-scope.json、auth-verification.json、storage-verification.json、files-verification.json、files-after-restart.json、https-health.json、legacy-baseline/after及platform-before/after摘要。云端截图记录新桶私有、无生命周期规则和独立IAM授权。秘密文件独立保存,不进入文档、PR或证据包。
后续需分开验收:启用选定图片/视频渠道并验证真实生成和永久落桶;开启必要任务/归档/回调;平台与Runtime调用切换;画布本地预览、IndexedDB草稿与后台上传队列。当前平台保持原调用,因此用户现有画布添加素材速度尚未因本次部署改变。
回滚只停止新app,并在校验后移除新Caddy站点块;不恢复整个旧Caddy备份覆盖后续变更,不改旧服务、旧库或旧桶。新数据不回灌旧业务。
7. 2026-10-23:按旧实例同步供应配置并启用
用户要求直接迁移pic-vps旧实例已验证的相关配置,不再进行新服务付费生成测试。新源码仓库现名为Oceanway-AI/temp-media-gateway;运行入口仍为media.oceanway.tech,不更改旧业务部署。第1至6节的“全部渠道禁用”等描述为初始隔离验收状态,本节记录后续启用状态。
源库为new-api-oceanway-postgres/newapi_oceanway,目标限定为oceanway-media-isolated-postgres/oceanway_media_isolated。使用源库一致性配置导出,仅在目标事务内替换9张配置表:channels、abilities、models、vendors及5张video供给/路由/SKU表,并同步20项分组、模型价格、计价表达式与比例设置。保留旧实例当前启用/停用状态;未复制旧客户账号、资金、令牌、任务或文件。第一次目标事务因dump设置的空search_path导致后续未限定schema的options写入失败并整体回滚,显式限定public后迁移成功;未回灌或修改源库。
| 配置 | 同步后状态 |
|---|---|
| 图片/视频渠道 | 共21条,13条启用,与源库一致 |
| 分组与定价 | 20项配置同步;不复制支付、登录和原服务地址 |
| 视频供给模型 | 51条,51条启用 |
| 视频路由方案 | 5条,4条启用 |
| 路由目标 | 48条,16条启用 |
| 供应路由 | 14条,4条启用 |
| 独立视频SKU | 1条,启用 |
新实例保持同一已部署镜像,仅重建独立app使配置生效;旧app/PG/Redis的容器身份、镜像、配置摘要和重启次数以及Caddy文件摘要均未变化。开启新实例的任务轮询、视频归档与回调worker,保留自动渠道测试和模型自动更新关闭。三个正式存储目的地仍为oceanway-media-assets-cn,永久保留模式不变;临时桶分工不变。
新app容器healthy,HTTPS状态接口200/success,公开定价接口200/success。目标任务数仍为0,本次未发起生成请求;不把配置迁移等同新服务真实生成或新生成原件落桶的测试。平台连接与调用未切换。云端脱敏执行记录:/opt/oceanway-media-isolated/supplier-config-migration-20261023.json。
8. 2026-10-23:Platform与Studio切换及真实生成验收
用户本轮明确授权修复在线配置并执行真实生成,覆盖此前“不切平台调用/不做付费测试”的限制;旧顾客业务仍保持隔离。第1至7节是历史部署状态,本节记录后续变化。
配置与代码修复
- Platform图片连接与视频连接均指向
https://media.oceanway.tech。视频Key纠正为新实例的视频令牌,两个连接鉴权均为200;图片目录11个、视频目录5个。9个既有启用图片模型从停用的旧开发连接重绑到新图片连接,4个启用视频模型刷新证据;没有批量发布额外模型。 - Platform媒体目录同步改读
/v1/models/metadata,保存schema v2参数、独立变体、默认值、枚举和验证状态,并通过media_generation_profile.upstream_metadata提供原快照。连接版本或模型绑定变化后快照失效,必须重新同步。通用openai不自动推导图片协议;根据Media明确声明的endpoint在管理接口完成原生协议采用。 unverified和partial原样保留,不合并不同渠道变体,不把本次单模型样本视作全部参数验证通过。同步没有覆盖Platform销售价格,也没有自动将未验证变体变成前端参数菜单。- Platform File Bridge与Studio File Owner均切至新Media。新增
platform-studio-isolated及runtime-studio-isolated身份,同属studio-isolated-v1、源用户1,与生成令牌用户一致;既有Commerce与独立验证身份保留。所有正式目的地为oceanway-media-assets-cn;临时桶用途不变。 - Studio默认规划模型为
gpt-6-luna,实际产品目录为openai-responses。真实任务暴露Studio产品凭据缺少activity:write,补齐单项权限并追加审计,未更换凭据。原任务恢复后取得真实规划回复。 - 画布真实测试发现
canvas.execute及canvas.recover漏入Studio代理白名单,内部调用被误判为未注册产品Host。修复只增加这两个POST路径,服务凭据、原任务归属及作用域校验保留;未知动作及GET仍被拒绝。上线后匿名POST返回403,授权原调用恢复为200。
验证与制品
Platform相关隔离PostgreSQL及元数据测试26项通过,无跳过;Studio代理与回调输入测试9项通过。两端完成linux/amd64生产构建,保留在线现有源码,只叠加本轮修改。
- Platform镜像:
sha256:c8d8788e4f77f6de89d55480962b9f238ac305abf3cd406ac421ff5b2fb8ac38;部署目录/opt/oceanway-media-config-20261023。 - Studio镜像:
sha256:94cc0446b56b7d872035081d4e302a3bf7f5f37e217a754e19830d8c5f826e45;部署目录/opt/oceanway-studio-callback-20261023。 - 原编排保留配置前副本;仅重建新Media、当前Platform与Studio应用,没有重建旧new-api服务、旧数据库或旧Redis。
| 真实检查 | 证据 |
|---|---|
| Platform直接图片 | gpt-image-2,HTTP200,约29.8秒;1024×1024 PNG,1,385,081字节;新桶读取200,SHA-256 d02ddfa9a5eb17880ca43936a4c464b9a11811f49ebaf91551e3ebde9508d214 |
| Platform直接视频 | seedance-2.0-fast;Platform任务task_zJ5M5c33Q40puHXsxPHsJvyUQnvDscWh,新Media任务task_SWtRPlzt8FwRaqsBD7AQ8k0Iotb7LwN7;成功并归档ready;1280×720 MP4约4.096秒,1,816,852字节 |
| 视频新桶与下载 | 新桶对象outputs/users/1/2026/10/task_SWtRPlzt8FwRaqsBD7AQ8k0Iotb7LwN7/original.mp4;Platform下载200,SHA-256与归档一致:e816fc12910ab1f0099a8fe25a6a787f22a867fe28b811e9a1db5a49dd0eadf6 |
| Studio规划模型 | 独立画布canvas-844f8bc5-a669-4881-afcd-466b9162b17b;原任务runtime-188b5fcb-bce6-4cc0-ae63-d099b9e0e9eb完成,刷新可见真实回复 |
| Studio异步图片 | Platform任务task_MsG4GcRhxWFe4iWXw15FbN0XIEDayeBX对应Media任务task_tFK1FhUBOC6pJ1tkFyjl915kv2D2sN6l;上游HTTP503,提交回执完整,但结果仍为SUBMISSION_UNCERTAIN,没有重发 |
| Studio同步图片与视频 | 另建独立画布canvas-818f0831-78aa-4f0d-b4ea-e907ed31b8f8,明确同步图片参数;正在验证,不将规划成功等同媒体生成成功 |
| 旧业务 | old app/PG/Redis仍healthy、重启次数0;启动日期分别为2026-10-20、2026-09-11、2026-09-11;旧域名状态接口200/success |
没有自动重发任何结果未知的收费请求;画布工具恢复沿用原execution身份。以上是指定样本验收,不代表全部模型、参考媒体、组合参数或性能容量均已通过。
测试另发现多种媒体尺寸混合在同一需求时,Studio统一画幅提取将图片的正方形应用到了视频,冻结视频参数实际为1:1而非文字要求的16:9。这是独立于本轮媒体连接/存储配置的规划参数问题,记录为未闭合项,不把该样本算作16:9规格验收。
9. 2026-10-23:对照VOZEB原版修复画布直接生成
用户要求停止Agent面板验收,改测画布节点连线,并从原版寻找解决方案。本轮只读核对VOZEB-PRO固定提交de7912a。原版提供交互与状态处理参照;Platform身份、模型目录、独立Runtime和统一File Owner继续按现行架构执行。
原版对照与已修复缺陷
| 原版行为 | 迁移版问题 | 本轮修复 |
|---|---|---|
canvas-node-generation.ts按连接解析@引用,没有显式引用时使用全部连接素材 | 组装分支直接返回原提示词和空素材数组 | 恢复文字、图片、视频、音频引用及去重;使用真实连接重新编号 |
use-canvas-generation-actions.tsx区分成功、失败和延后恢复 | 收尾分支无条件将结果根节点写成失败;等待异常丢失处理中状态 | 成功保持成功,延后保持loading和原任务身份,具体错误保留 |
原版image.ts将生成按钮作为明确图片任务 | 当前规划器把客户端刚插入的loading占位节点当成另一项已派发任务,跳过工具执行 | 新画布媒体请求冻结studio-direct-media-v1行为:按钮明确执行指定媒体,界面负责结果放置;不让占位节点替代真实执行事实。历史规划快照不改写 |
| 素材库图片可插入画布 | 图片插入分支为空 | 恢复插入;已有storageKey复用原件,不重复上传,并保留尺寸、字节数和类型 |
| 每次请求独立组装连接文字 | 组装结果写回配置节点草稿,后续生成重复追加同一文字 | 配置节点只保存用户编写的草稿,执行提示词逐次组装 |
同时将新Runtime生成结果的默认写入改为File Owner,上传命令由稳定产物身份生成,回执和claim持久保存。失败恢复先查原命令,不能重新上传或降级到本地目录。已冻结的历史本地/S3存储意图仍按原位置恢复,不搬迁既有任务。
回归与部署
- 定向画布、规划与代理测试18项通过,涵盖连线文字提交、素材引用、成功/失败/延后状态、已有图片复用、占位节点和旧快照恢复。
- 原件写入隔离PostgreSQL测试16项通过,无跳过;覆盖新File Owner写入、重复保存、下载摘要、登记失败恢复、缺凭据拒绝及历史存储意图。
- TypeScript检查、linux/amd64生产构建通过;定向ESLint无error,保留既有Hook依赖/未使用变量warning。
- Studio镜像
sha256:fba761588e573ca3d5a80a8094fb486095529504c1cae37810aacbed7e11de72,部署目录/opt/oceanway-studio-canvas-original-20261023。仅更新Studio服务镜像,前一镜像和compose备份保留。 - 浏览器实际走文本节点、连线配置及生成按钮,Agent面板保持关闭。发现同一画布对话已有在途任务时会拒绝另一项创作,因此视频验收使用独立画布,未停止或替换未知图片请求。
真实画布任务事实
| 检查 | 事实与结论 |
|---|---|
| Gemini图片连线 | 画布canvas-235e5e49-bf1f-43d0-8d94-f50fad1325f2;Platform任务task_4NUVWdyQXOCuvdhWjgFVK4zYjRYwrPjr,Media任务task_MEO20KF2T2LjCajzPUXpbFG0SNOjpzap,渠道136;真实供应商返回503,没有上游任务ID,保持SUBMISSION_UNCERTAIN,未重发 |
| GPT图片连线 | 独立修复验收画布canvas-2c381f3a-6947-490b-b37d-d7fcd51ec7af;Studio任务runtime-1ba0bdad-112c-4af1-8c8a-bf1a55dbc4e4,Platform任务task_Dn3uoYDNxBVVRAXKEx7kiultrGb5rElQ,Media任务task_5Us64Xuv7anmEtYHpvLRRF6PNx0Pch9B,渠道131;供应商返回503,保持未知,未重发。上游映射已核对为gpt-image-2-cc,1024×1024,网关异步控制未传给供应商 |
| 视频连线 | 独立画布canvas-54864c82-f6e9-420d-8aae-b9ca375f49a8;Studio任务runtime-fecd09da-20a9-4720-beab-b482b8a77dfa。Platform任务task_QYCBEEVznL3DvvGmVkaErMOlCSh0Ly2U,Media任务task_FUGzBXjjAr3z6Ec1JwTk6ufbs6fEBDM4;生成完成,Studio Run为completed,视频回填真实节点。成片1280×720、4.096秒、1,238,534字节,符合画幅/时长;无声设置另见下方未闭合项 |
图片供应问题仍未闭合,不能把请求送达、规划完成或单元测试通过写成画布出图成功。第8节Platform直接图片成功仅代表当时那个同步请求;两次画布图片的503回执已保存请求/响应摘要及供应商请求号,未自动补偿或重派发。
视频原件的Media归档为ready、expires_at=0;Studio登记storage_provider=file-reference,File Owner记录落oceanway-media-assets-cn。经Studio受权原件入口下载HTTP200,文件SHA-256为07315db498849b64b5dd9c62ff63642564fcfd67b06af6c88c199adad11518a1,与归档、File Owner和Studio回执一致。未把新视频写入Studio本地目录。
在该画布另上传第8节的测试图片:界面先显示预览,随后显示“已同步云端”;图片同样登记到新桶File Owner,1,385,081字节,下载HTTP200且SHA-256仍为d02ddfa9a5eb17880ca43936a4c464b9a11811f49ebaf91551e3ebde9508d214。重新打开画布后,连线、配置、图片与视频仍在;浏览器播放器读取1280×720、4.096秒、readyState=4、无媒体错误,并实际播放到结束。最终桌面截图1424×780;未测试移动端。最后一次浏览器控制台检查无warning/error;早前翻译扩展曾报自身token错误,服务重建窗口曾出现Platform读取502,恢复后页面正常。浏览器工具的直接媒体下载导航被Chrome扩展拦截,下载完整性以受权HTTP下载及SHA-256核对为证,不把该工具导航记作产品下载成功。
仍未闭合的规格问题: 视频冻结请求包含audio:false,供应商成片却有非静音音轨(检测最大音量约-6dB)。媒体目录对该供给声明allow_generate_audio=false,当前通用界面仍展示声音开关;本次不能认定“无声”规格通过,也没有转码删音轨来掩盖原始响应。用户已确认视频无声设置属于供应商问题,另由其他会话处理;本轮暂不调整声音控制,也不追加该项真实测试。
本轮产生真实供应请求和规划费用;保留Media原任务、原回执及账务,不自动退款、不重发未知任务。最后核对旧app/PG/Redis的容器ID、镜像、启动时间、restart=0与此前基线一致,全部healthy,new.ocean-way.top/api/status仍为200。Drama未改动。
10. 2026-10-23:Media同步生图包装异步及两端MIME修复
用户明确授权:Media统一向上游发同步生图请求,对Platform提供持久异步任务;部署至media.oceanway.tech,从Platform和Studio真实验收,并确认原件进入新桶。本节不变更旧客户服务或供应商路由,不涉及Drama。
实现与实际部署
- Media提交
e23cfd78763d5db315100bea9080d5065bd01887:OpenAI JSON、多部分表单及Gemini请求不再传上游async控制;Gemini同时移除Media自己的交付字段。Media先持久化并返回任务,再执行一次同步POST,将同步结果归档为异步任务产物。新任务持久化synchronous_upstream=true;上游异常或没有图片时不猜测轮询接口、不自动重复生成。旧任务保留原恢复方式。 - 真实验收发现供应商声明PNG、实际字节为JPEG。Media提交
e359fe27c41ed9b44a8fa94558fcdd2ce3f5279a将实际检测的MIME回填Gemini和OpenAI响应,原始字节不变;提交4f01dfd6b2f382e08a66b3db4d387ece58beeccb在异步data[]中一并发布content_type。 - Media最终镜像
sha256:28853b5871419931a5c69395a2c34cf167ff221b65ca7b35c440860b424b092c,仅更新pic-vps的/opt/oceanway-media-isolated、oceanway-media-isolated-app。应用环境、正式桶、永久保留和已启用worker保持原配置,无新增schema迁移。 - Media修复后仍发现Platform原生任务适配器将
data[]图片写死为PNG,忽略嵌套Gemini响应中的类型。Platform提交cc3db9d51f5acd7723a25fce0b9bb5db5c7feec9按原数据URL读取正确MIME,保留多图顺序及原地址,不重复追加同一native产物;内容读取继续不向对象存储发送网关凭据。 - Platform修复基于当时线上完整提交
160d924f35bc8b683f560e27410055a5c47d4a18,仅改适配器及其测试;最终镜像sha256:6f3124c29e0d982e4b449c356f78e629b77dbaae72dbaf8bc4bbdadd1eccd530,只更新platform-storage-20261022服务,环境、挂载、端口不变。Studio、Runtime、数据库和其他应用容器未重建。
源码均由干净提交的Git archive构建linux/amd64制品,已推送各自工作分支。独立AI审查绑定最终两个完整SHA,未发现阻断问题;不是人工批准。发布有版本/镜像守卫、锁、原配置回退及健康校验;旧app/PG/Redis和Caddy摘要与第一次同步包装发布前一致。新Media及new.ocean-way.top、api.ocean-way.top、api.uumi.lol状态接口均200/success。
验证与真实结果
Media定向relay/service回归和vet通过。独立PostgreSQL HTTP集成完成任务提交202、同步供应商单次POST、持久恢复及原件输出回执;实际S3协议夹具验证Gemini链路,不把夹具当作云端供应测试。MIME回归使用真实JPEG编码字节而声明PNG,核对对象PUT及两协议返回类型均为JPEG且原字节不变。Platform适配器整包测试和vet通过,覆盖嵌套Gemini、OpenAI类型、历史格式、反转的多图顺序、单产物去重及对象请求不带凭据。
| 真实入口/样本 | 原任务与结果 |
|---|---|
| Platform直接生图 | gemini-nano-banana-2.1;Platform task_v79E27IFd2PmEDHuVnC4Okxh6Qqovy8l,Media task_117Hmv12btTHhWwNApild8MCf8ZGL2Mm;同步上游200,无上游任务ID,Platform成功100%,Console实际显示图片。新桶GET200,532,212字节JPEG,SHA-256 0c9493e7649d1dcaee030ec21a42f3650be3e0eaa7463516a15a91c5ea44bb26 |
| Studio最终完整交付 | 对话conversation-ePMA2TgkLdFEx_e0dBS7K;Studio runtime-2c4465ab-73cd-469c-9642-30f474f8a778、Runtime 36c90e1d-8271-4e1b-a1a8-0e35f1309e06均completed。Platform task_SYUbjPP18OSbkPSPkKOCMWUk16LScfZZ、Media task_zBtiF0A6yYZBTFnuGKC7FSw7k3CSj30f均成功;上游单次同步200约11秒,无上游任务ID。Studio显示1个素材已完成,页面总耗时1分4秒,刷新后图片仍可见 |
| Studio原件保存 | Artifact artifact_5d05c33ac8c842bc0b0fb1783dcf56cc52f6c4de1d18fb1994f42cd0621f4bdb为saved,类型image/jpeg、549,689字节,无last_error。File Owner namespace为studio-isolated-v1、源用户1;实际对象GET200,桶为oceanway-media-assets-cn。Media归档、Runtime回执、File Owner登记及实际字节SHA-256均为84bf90ed95d5e8dc1bb1c6a468a131fcc4716099eec7b42823fef82ca73c20a9 |
两条成功Media任务均持久化synchronous_upstream=true,请求async未传给供应商。最终Studio预览在浏览器完成解码,缩略预览为960×960;不把预览尺寸冒充原件尺寸。对象GET与摘要一致是原件完整性证据;本轮不声称浏览器下载按钮已经完成原件下载验收。
失败样本与保留边界
本会话共发起6条独立单图生成验收:两条在vakv供给返回503,两条在逐层MIME修复前已完成生成但Studio保存受阻,一条Platform直接成功,一条最终Studio完整成功。没有重派同一未知收费请求;真实生成及Studio规划会产生费用,Media本地quota记录不等同供应商实际账单。
- 两条503任务为Media
task_e18ClWvZiwfhyyu6uJxjxZSo8NXePmsa(GPT)及task_rog37ID0BPcTKvh8pJt4si31CU4Ewgcy(Gemini)。通过不含模型和提示词的空体校验请求取得供应商system_disk_overloaded错误,再按保存的响应摘要精确核对,原响应为磁盘96.3%超过95%门限。它们保持SUBMISSION_UNCERTAIN,未重发或自动退款。不能由此断言更早task_tFK1FhUBOC6pJ1tkFyjl915kv2D2sN6l的503正文也完全相同。 - 两条MIME阶段Studio对话
conversation-BZUK9wnEa_wvQuf34masq与conversation-qyw49VxufNSehqq4wEvQm保留原任务和冻结的错误PNG元数据,没有直接改库或重新收费执行。新补丁作用于后续任务;本轮不宣称这两条历史保存已恢复。 - 成功供给来自现有
gemini-nano-banana-2.1渠道135;没有为通过测试停用vakv、调整路由优先级或更改价格。结果不代表全部图片模型和参考图组合均已验收。 - 本节证明同步包装与指定两入口的新桶链路完成;不宣称全平台原件重构、历史任务恢复或跨层物理去重已经全部完成。
脱敏证据目录为sync-wrapper:deployment-final-safe.json、platform-deployment-safe.json、final-health-safe.json、live-tasks-safe.json、studio-final-state.jsonl、studio-original-owner-safe.json、platform-result.png与studio-result.png。云端回执分别为/opt/oceanway-media-isolated/sync-image-result-mime-upgrade-20261023.json和/opt/oceanway-platform-artifact-mime-20261023/deployment-safe.json。未将凭据、完整签名URL或生产素材字节提交源码仓库。
11. 2026-10-23:Studio与Runtime最新main部署及画布直接连线验收
按用户授权部署两仓最新main,并只测试画布文字节点、连线配置和生成按钮。视频无声问题由其他会话处理,本节不调整或验收该规格。此次真实请求没有经过Agent面板提交。
发布版本与保护措施
- Studio
7634fdf30c1c(包含8c222942画布及File Owner修复、b20cef05异步画布能力)。部署前发现Dockerfile仍复制0.7.x归档,补交7634fdf3改为固定0.8.0归档,随后从干净main提交构建。 - Runtime
859ccfba9b1f3b7422925ad2e076db97748fb7c8,0.8.0、schema12。Studio供应制品记录中的152个源码文件与此提交全部一致,Runtime镜像内240个包文件逐字节匹配固定归档。 - Studio镜像
sha256:0d68f8cfb37bf0ff4149f66154fe27ff5978cf4e37b2f0edce78fa635948dfff;Runtime API/Worker镜像sha256:ced39a97ceca418676d9af29cc3b49f880b2f104f42c2c39cc4666cef3e160d8。两者均linux/amd64;Studio生产类型检查、构建及镜像内制品校验通过。 - 部署位置oceanway,目录
/opt/oceanway-main-canvas-20261023-7634fdf30c1c。仅重建当前Studio、Runtime API/Worker与Studio维护进程;保留当前Platform容器、Media及旧业务容器。 - 切换前备份Studio和Runtime数据库、原compose及镜像身份;无运行中的媒体Job才切换。历史unknown任务不清除、不重新排队。旧schema和原任务身份保持;API、Studio readiness、数据库schema和维护心跳均通过。
实际画布结果
| 样本 | 原任务与结论 |
|---|---|
| GPT图片 | 画布canvas-c4852c97-2b97-4de3-9b68-d8f7cbdb21e4;Studio runtime-e1c8214a-ea33-47d3-99f0-bf7decc1d97c,Runtime c7f7b638-eaef-486c-89c1-44a144113e17,Media task_PrtRSX8gVPbYQ9SSmCQLccbSYLZV30Zy。渠道131返回HTTP503;完整响应摘要e353da0e46b70cf3deae97778eaade391b41fdbf94a666a460fab060f15d2666,保留SUBMISSION_UNCERTAIN,未重复提交。此样本不通过 |
| Gemini图片 | 独立样本画布canvas-98da951d-808e-45b7-8054-c97f35a75b2f;文字→配置gemini-nano-banana-2.1→图片节点。Studio runtime-17247824-53c0-4a25-8724-f73c68b37333及Runtime 7e198f9b-c3fb-4d72-81ad-54001bb0b674 completed;Media task_3iSPZEkDnx47UeeTRcZ5p0fzRu7kiPr2 SUCCESS、渠道135、上游同步200约19秒。1024×1024 JPEG,503,807字节,画布真实显示白瓷兔子 |
| 视频 | 画布canvas-d4882cf9-4f33-4941-91a2-a97cc170333d;文字→配置seedance-2.0-fast、16:9/720P/4秒→视频节点。Studio runtime-7e3fd8c8-b791-4553-852c-c4c7c3289e28及Runtime de649f9e-7bac-41a1-8d86-d1ab625f8c84 completed;Media task_TtM66nUe5XEda5JJvdi6jRThcSHBVNEv SUCCESS、渠道134。1280×720 MP4,容器时长4.096秒,1,304,655字节;画布显示总耗时4分31秒 |
新桶、完整性与刷新
两项成功结果的Studio记录均为storage_provider=file-reference,File Owner namespace为studio-isolated-v1。正式桶均为oceanway-media-assets-cn。通过Studio容器内已有File Owner身份续用原claim、签发原件读取授权,实际TOS GET均200,长度和SHA-256与Studio回执、File Owner记录一致;未新建claim或再次上传。
| 原件 | FileRef | SHA-256 |
|---|---|---|
| 图片 | file-up-dfe6af81dac51771f78e6104c889a9c9aa2adbc64b6d7672aeb0c561 | e78c69208a185a38227dcf79551cb383af8adfb541587a0d03e2ed967f3df586 |
| 视频 | file-up-c0ad5f531840d09bc487e300575d4a9813d0f568feb37478efd8fd6a | fd749d18d4b4ea6953ecce70559ab39ca48c2bda7547c21777571cf16f9d3c99 |
Media图片输出域名同为新正式桶;视频归档ready、expires_at=0,原归档摘要与最终下载一致。新Media的生成桶、素材库桶和File Owner正式桶均配置为新正式桶,永久保留。此处证明落桶与字节完整性,不等同跨层物理去重验收。
两张成功画布刷新后,文字、两条连线、模型配置与结果均保留。浏览器图片自然尺寸1024×1024;视频readyState=4、error=null,实际播放至4.096秒并ended=true。桌面Chrome视口1424×780,最终两页控制台均无warning/error,无框架错误覆盖层。没有使用Agent面板发起生成;刷新自动显示的面板已关闭。下载完整性由服务端受权HTTP读取证明,本轮不宣称浏览器下载按钮完成验收。
共提交三个独立验收样本,包括一个503未知样本;会产生供应与规划费用,保留各原任务及账务,不从共享账户余额差额推算本轮账单,不自动退款或重发。未扩展移动端、参考图组合和全部模型测试。未修改视频声音控制、旧业务或Drama。
本机证据包含main-canvas-image.png、main-canvas-video.png和脱敏任务、File Owner、新桶、下载摘要记录;服务器发布目录保留release.json、deployed-safe.json、before-containers.json、after-containers.json、构建日志与私密回退备份。私密配置、签名URL和生成原件未提交仓库。
12. 2026-10-23:画布上传恢复、原件复用与 Gemini 参考图修复
用户要求继续验证上传、素材复用、连线图生图与图生视频。用户确认正在操作首张验收画布,因此自动化改用独立画布 canvas-0344a705-110d-4174-ac43-dca612abe856,不覆盖用户画布。视频声音规格仍不在本轮范围。
上传与已有原件复用
通过上传入口选择 1,385,081 字节的 PNG 样本,立即看到本地预览与“已存本机 · 同步中”,在云端同步完成前刷新,图片恢复并继续同步,最终显示“已同步云端”。素材库插入同一图片后可作为连线输入。此样本 SHA-256 为 d02ddfa9a5eb17880ca43936a4c464b9a11811f49ebaf91551e3ebde9508d214。
Studio 本次新增素材记录 permanent/uploads/73e651e48e05cec3d7084b2cdce1634dc9ab71ab7e1115dcaf8a0d74c67da70b.png,复用已有 FileRef file-up-bb3d929236f51c059e2a8af4a476a582b490c5a11ab7f21802d40b3f,正式桶为 oceanway-media-assets-cn。重新选择本地文件后上传命令由 1 条变为 2 条,但复用同一物理原件记录与对象 key。随后从素材库插入、刷新及连线调用期间仍为 2 条,没有新增上传命令。必须区分:已有素材引用复用不重新上传;再次选择本地同一文件目前仍传输字节到 File Owner,仅在落桶阶段去重,尚不能宣称内容摘要秒传。首张画布出现的额外节点经用户确认属于人工操作,不记作重复节点缺陷。
阻塞原因、修复与发布
首次连线图生图在 Studio 准入阶段报“此模型未开放参考图编辑”,没有创建供应商任务。供应商支持 Gemini URL 图生图的历史证据见 PROC-02-015;实际缺口是 Platform 未发布 Gemini 原生参考字段,Studio 也只接受 OpenAI 图片参考字段。
- Platform
2ea330e30aa204619dca99fdb092090d1ed9d172:管理端、公共目录契约、Console 请求组装支持gemini / contents.parts.fileData / url-array;保留当前绑定、配置版本、数量和类型校验。保留此前线上 MIME 修复,迁入 main 的对应提交为a8e0988。镜像sha256:efabea83dd10aab8d56767ad94743d361524e643b7581d33d25f9c6422e8c7c9。 - Studio
3e24ec687a4c87f80c087b06706f5eee8ec4f9bc:按发布能力准入 Gemini,将已授权原件 URL 和真实 MIME 放入fileData,保留引用顺序,不把输入改成 Base64 或再次上传。镜像sha256:143ec26eceb2fc56bba81b887ca50f945bd6dbd362874fab6081ec3d7ea4c998。 - 两提交已推送 main 并部署。只重建 Studio/维护进程及 Platform;Runtime 与其他容器保持原身份,Platform 环境、挂载、端口和 Caddy 未变,无 schema 迁移。发布前保存私密 compose 备份并执行镜像身份守卫、锁与健康检查。
- Studio 定向单测 23 项通过、真实隔离 PG 原件复用回归 1 项通过;Platform 前端 22 项、真实隔离 PG 参考配置回归 5 项及媒体适配器整包通过。类型检查及定向 lint 无 error。首次前端回归在本机负载下超时,单进程延长超时后 22 项全部通过;不将首次失败删去或记为通过。
- 管理端分别为
gemini-nano-banana-2.1和seedance-2.0-fast保存 URL 图片参考声明,仅填写本轮 PNG/JPEG 类型,未编造未测数量/大小上限。消费者目录已回读到 Gemini 原生字段;来源说明区分历史协议证据与本轮精确绑定验收。
真实验收中的中间失败
修复后第一条 Gemini 样本 runtime-bc2443fe-5c29-459e-ba5f-dfa98e4d621c 在规划服务结束为 planner_failed:上游返回 400,提示图片 URL 下载超时。没有创建媒体 Job 或 Media 生成任务。独立 GET 验证该签名图片 URL 返回 200、image/png、1,385,081 字节,约 2.9 秒;后续同一原件的视频规划已成功。此失败与 Gemini 模型是否支持图生图无关,保留原失败记录。
同一画布的视频任务进行期间,第二个配置节点尝试提交图片被“当前对话已有创作任务”拦截,没有创建第二条生成任务。后续补测待视频任务完成后串行提交;不把此拦截记作供应商请求或重复计费。
连线图生视频结果
同一既有白瓷帆船图片连接 seedance-2.0-fast 配置,16:9、720p、4秒、普通参考,点击画布生成按钮。Studio runtime-a6770b4c-1f79-452e-8e04-1331cfb81f8f,Runtime bd877e9a-a45c-497f-8c9c-3795d3f515ca,Platform task_jQrJEoIy1aieg3BLgvFREJyCOsqlqPIO,Media task_Hxv8aA4HSdjva2jtuEm72t6p6HFV3jbh(渠道134)成功。冻结媒体请求为 videos,携带1个 reference_image_urls,无内联 Base64。Runtime Artifact artifact_d801db33739a131c9af70bb252a8d5e6b9acbd937905a2ff8adccb88aea8bfe6 已保存。
画布实际显示白瓷帆船视频,刷新后原图、配置、连线及视频仍在。播放器1280×720、4.096秒、readyState=4、error=null,点击播放后到达末尾且ended=true。界面总耗时4分44秒。FileRef file-up-7b156792f631182deb119b8beea4f4be5bd0a5f2f3f5fb182bb0cd26,正式桶 oceanway-media-assets-cn;实际TOS GET200、1,290,773字节,SHA-256 4fe9574abb5793f937c6e665d0ee541d2114bffd1808a39ec720c1c8d4ed7783,与Studio及File Owner原件记录一致。读取仅续用原claim和授权,不再次上传。
Gemini 连线图生图补测结果
视频结束后,第二个图片配置节点串行提交 gemini-nano-banana-2.1。Studio runtime-cbab4698-2e4b-46ed-a77b-5426a6ed385a、Runtime ab71598b-7b55-4c8b-b2b6-dfccfbcf83d8 均completed;Platform task_uAP7aAsQm4y2bjU9zQVbuPM4rc9jEpPT、Media task_TtekGhn1CroazuTZ8NrJ1YWbx0Age7dJ(渠道141)均SUCCESS。冻结请求使用 generateContent,1个 fileData.fileUri,无 inlineData 或Base64。画布实际图片保留了白瓷帆船的形状和构图,桌面与背景改为珊瑚橙,并增加海星,参考内容生效。
结果为1024×1024 JPEG、416,864字节;FileRef file-up-a1ec9559fc9bf41c22afffcca4194ecc577694ec3929b82e1260c50b,正式桶 oceanway-media-assets-cn。实际TOS GET200,SHA-256 e74a11c4dc3db7d4039bea38239cc23c632ce2f0d0743db88cdef0232d2e74bd,与回执、原件记录一致。画布再刷新后,原图和结果图均complete=true、自然尺寸1024×1024,两条输入连线和视频结果保留。原图上传命令仍为2条,连线生成、素材库复用、刷新及下载核验没有追加源原件上传。
管理端已将两项成功样本的任务号与实际范围补入能力来源说明。未泛化为全部Gemini型号、全部供应渠道或任意参考组合通过。没有操作Agent面板发送入口;画布当前实现内部仍经过规划模型,故仍可能出现规划取图失败及同一对话串行限制。没有为此次通过调整供应优先级、停用渠道、修改声音策略或重发未知生成任务。
最终桌面Chrome视口1424×780,画布截图为 canvas-url-reference-results.png;另有 canvas-url-originals-safe.json、canvas-url-calls-safe.json、两项授权下载摘要与服务器部署回执。最终页面仅观察到翻译扩展token错误,无产品框架错误覆盖层;不把浏览器插件错误归因于Studio。此次验证包括两条成功媒体生成、一条规划400失败,以及两次无供应请求的本地准入拦截。没有以共享账户余额变化推算本轮费用;其他会话同期也在生成。
后续优化边界:本轮确认已存素材引用不重复上传和新桶原件一致性;重新选择同一文件的内容摘要秒传、画布直接生成去除非必要规划环节、同一画布多配置并发仍未在本轮实现。上传即时预览与刷新恢复已经通过,不等同上述性能与并发改造全部完成。
13. 2026-10-23:画布直连免规划、配置并发与内容复用
承接用户明确要求,完成上一节列出的三项改造。Studio 主提交 28cbc4a49a074ab6a6e4e34526165a16c96cb38e,刷新后原配置控制恢复补丁 d725db040a8072f7ef8065eceeee3a11843f5dd2,均已推送 main 并部署。最终镜像为 sha256:528b50653fa1044bfbd63e344db51d3b1c1cc58d9c17e080d243a6ea4475bff9。仅替换 Studio 与维护进程,发布前后核对 Runtime、Platform、File Owner 等其余容器身份和镜像未变;未调整旧业务、Drama 或视频声音策略。
实现边界
- 画布明确选择图片或视频模型后,采用
studio-direct-media-v2:按已发布能力冻结模型、原提示词、参数及显式引用,确定性派发一个媒体工具,完成后确定性收尾。仍使用 Runtime 的持久任务、幂等、授权与结果回填,但不调用文本规划或总结模型。图片/视频配置不再提供“智能规划”模型选项;Agent 面板保持原流程。 - 多配置任务不再占用单个会话的 Agent 串行锁;每个配置保留自己的忙碌、停止和结果节点。结果归属仍核对原 Run、消息与会话身份,其他配置更新会话时间不再误判结果失效。Agent 与旧任务的串行约束保留。
- 客户端先计算内容摘要并查询当前产品、主体、创作者范围内的既有原件;SHA-256、字节长度、MIME 匹配即可绑定新上传意图,跳过二进制上传。文件名不参与内容身份。不存在时继续原上传链;同一页面的相同文件并发上传合并等待。没有开放跨账号、跨产品的摘要探测,也不宣称跨浏览器新文件同时首传的网络字节全局去重。
- 新增产品范围内不可变上传意图记录和内容索引;既有素材 URL、画布 IndexedDB 草稿与后台队列继续使用。已有 URL 不读回再转 Base64。
真实并发样本
独立画布 canvas-6ff8bb2c-7096-4b79-848f-e4dbe506fe36,名称“直连并发验收:无规划与原件复用”。同一张白瓷帆船图片分别连到图片、视频配置,连续点击两个“开始生成”。开始时间相隔约 1.735 秒,两条任务同时处于 waiting,界面两个配置同时显示“停止”。没有在 Agent 面板提交。
| 项目 | 图片 | 视频 |
|---|---|---|
| 模型 | gemini-nano-banana-2.1 | seedance-2.0-fast |
| Studio Run | runtime-1c010848-ba10-41c8-8d6f-7814a4eb02b5 | runtime-a672f48a-66ec-4d1d-87e7-ce32a128f574 |
| Runtime Run | 422dd2d2-5aae-4b83-8013-875d8fbe065a | 2d40bd26-fc6f-45cd-897f-c48ba437b39e |
| 最终状态 | completed | completed |
| 规划调用 / 媒体调用 | 0 / 1 | 0 / 1 |
| 原生参考 | generateContent,1 个 fileData.fileUri | videos,1 个 reference_image_urls |
| 结果 | 1024×1024 JPEG,405,796 字节 | 1280×720 MP4,1,405,961 字节,4.096 秒 |
| FileRef | file-up-5a0cce9a23c41a83586c8a00899998fbc8283174d56bd4ba5c63a306 | file-up-ae999d623eb873c7a4898e38088dc2c9f734103c962178cfaa75a5bf |
| SHA-256 | 7e468982dd4ff5ede39072dc71395eb3b8cbc83ee1f55a62039af2ef1f0984c0 | 649255c675050128a6bed6338792269c62a9373adc4c336972f79feb1c8a3abc |
两条 Run 均没有 initial text request;冻结提示词与画布输入一致,原生请求无 Base64 或 inlineData。图片按要求保留白色帆船并将背景改为珊瑚粉色。两项原件经已有 File Owner 身份续用 claim、受权 TOS GET 均为 200,域名均为 oceanway-media-assets-cn.tos-s3-cn-beijing.volces.com,长度与 SHA-256 全部匹配。没有因读取或校验再次上传。
重复导入与刷新
上传入口再次选择上一节的 PNG 原件,之后将同一文件改名后再次选择。两次均显示图片并完成云同步,两个图片节点最终引用同一已存在资源。源 FileRef file-up-bb3d929236f51c059e2a8af4a476a582b490c5a11ab7f21802d40b3f 的 File Owner 上传命令从本轮开始到结束始终为 2,未新增上传或正式桶对象;区别于上一节仅在落桶阶段去重,本轮在上传前的内容查询阶段复用。
生成期间刷新,原输入、两条配置及两个生成结果槽恢复,后台原任务继续执行并回填,没有新增供应请求。该过程中发现配置节点忙碌状态没有随输出任务恢复:已补充保存生成来源节点,并兼容旧任务通过唯一配置连线恢复;补丁经过 6 项恢复测试后发布。此补丁的“刷新后仍在生成时停止按钮”未追加付费样本重测,不能将代码测试记作第二次线上生成验收。
最终版本再次刷新后,画布保留 6 个节点、4 条连线及模型参数,两个导入图片节点使用同一已有资源。浏览器三张图片 complete=true、自然尺寸 1024×1024;画布视频实际播放至 4.096 秒,ended=true、readyState=4、error=null。桌面 Chrome 1424×780,最终控制台无 warning/error。
验证与证据
核心定向单测 69 项、恢复测试 6 项、真实隔离 PostgreSQL 回归 18 项通过;类型检查通过,定向 lint 无 error(既有大文件仍有 warning),Docker amd64 生产构建通过。真实 PG 覆盖无文本模型配置下的直接生成、两配置并发、回调重放不重复派发、输入篡改拒绝、会话时间变化后结果归属,以及重复文件、改名文件和跨主体隔离。
线上生成样本运行于主提交 28cbc4a4;最终部署 d725db04 包含该提交及刷新控制补丁。本轮仅验证上述两个精确模型与 URL 单图引用,未推广为所有模型、全部参考组合或性能基准。减少规划调用与重复字节上传的事实不代表供应商生成耗时有固定改善比例。
脱敏证据为 direct-canvas-results.png、direct-qa-safe.json、direct-native-safe.json、direct-reuse-safe.json、direct-download-safe.jsonl 与发布回执。私密配置、签名 URL 和原件字节不提交文档仓库。