OpenScreen 数据模型深度剖析:AxcutDocument 单一数据源与版本迁移机制全解
OpenScreen 数据模型深度剖析AxcutDocument 单一数据源与版本迁移机制全解【免费下载链接】openscreenRecord your screen, ship a demo. Free and open-source, GPU-accelerated, no watermarks, no subscriptions. Windows, macOS, Linux. Actively maintained.项目地址: https://gitcode.com/gh_mirrors/opens/openscreenOpenScreen 是一款免费开源、GPU 加速、无水印的屏幕录制与视频演示工具Windows / macOS / Linux。它的编辑能力建立在一个核心设计之上AxcutDocument单一数据源。本文用通俗语言拆解这套数据模型的字段构成、只进不退的版本迁移机制和双层持久化架构帮你在不读大量源码的情况下理解 OpenScreen 如何保证每一个项目文件都完整、可升级、可撤销。什么是 AxcutDocument项目的唯一真相在 OpenScreen 里一个项目 一个文档对象 磁盘上的一个 JSON 文件。这个文档类型就是AxcutDocument它用 Zod 类型校验定义是整个编辑器所有界面时间轴、预览、字幕、AI 智能体共同读写的单一数据源Single Source of Truth。它的当前版本号schemaVersion是8定义在 src/lib/ai-edition/schema/index.ts 顶部export const axcutSchemaVersion 8;顶层字段一览文档的完整结构声明在 schema/index.ts 的documentSchemaShape中核心字段如下字段承载内容小白解读schemaVersion固定为8版本身份证迁移的起点projectid、标题、创建/更新时间一个文件对应一个项目assets[]每条录制/导入的媒体素材含原始路径、摄像头轨道、时长timeline剪辑 clips、空隙、剪切、静音、变速、字幕区间时间轴的骨架annotations[]文本、模糊等标注覆盖层锚定在某个 clip 上zoomRanges[]放大特效深度 1–6同样锚定 clipaudioTracks[]导入的旁白/背景音乐/音效按时间轴秒数定位transcripts[]每条素材的语音转写文本字幕层真正读取的数据legacyEditor旧版编辑器的外观/光标设置无损兼容老项目一句话你在界面上的每一次操作最终都只是对这个 JSON 的一次修改。版本迁移机制为什么老项目永远不会打不开这是 OpenScreen 数据模型最精彩的部分。官方文档在 technical-documentation/architecture/document-model.md 中明确了两条铁律单向、只前进迁移只有升版路径没有降级。新版文档落到旧版程序上会被直接拒绝而不是被悄悄截断——宁可报错不丢数据。加载时执行所有升级链在读取文件时一次性跑完migrateRawDocumentToCurrent之后的内存解析只是一次轻量的字面量校验避免每次保存都重复跑整条迁移链的开销。v3 → v8 的演进故事每一次版本号提升背后都解决一个真实问题版本升级做了什么为什么v3 → v4摄像头轨道cameraTrack从文档根移到所属素材上多剪辑项目里每条素材可以有自己的摄像头v4 → v5放大/标注/变速等区域变成剪辑锚定片段同一素材出现两次时特效不再张冠李戴v5 → v6废弃native宽高比烘焙成具体W:H让解析结果永久确定尺寸未知时留待下次加载再转绝不乱猜v6 → v7剪切trim也加入clipId锚定复制的 clip 上的剪切互不串扰v7 → v8Auto成为默认宽高比旧文档写入16:9保证老项目画面在升级后一帧都不变这些升级器以函数嵌套的方式串成一条链集中在 schema/index.ts 的migrateRawDocumentToCurrentexport function migrateRawDocumentToCurrent(raw: unknown): unknown { return readFollowCursorAsAutoOrbit( raiseInvertedTranscriptEnds( dropAudioAnchoredTrims( liftZoomClickImpact( upgradeV7DocumentToV8( upgradeV6DocumentToV7( upgradeV5DocumentToV6(upgradeV4DocumentToV5(upgradeV3DocumentToV4(raw))) ) ), ), ), ), ); }链外还有一道兜底闸门documentSchema中的z.literal(axcutSchemaVersion)检查会拒绝任何未知版本——不认识的文件不会被半吊子地读进来。更老的 v2 项目怎么办OpenScreen 合并前的旧编辑器保存的是另一种格式EditorProjectData。首次在新编辑器中打开时纯函数migrateProjectDataToAxcutDocumentsrc/lib/ai-edition/document/migrate.ts会把它翻译成当前结构单条录屏变成一条素材 一个剪辑旧剪切区间按原语义平移未纳入新模型的约 20 个外观设置原样塞进legacyEditor包裹层——关闭再打开 AI 编辑模式也不会丢任何设置。这个小技巧很妙函数故意输出一篇v4 草稿再走完整升级链确保 v4→v5 的锚定逻辑一定被执行到。双层持久化谁来读、谁来写OpenScreen 的文档字节恰好只有两个主人职责严格分离渲染进程界面层主进程落盘层代码src/lib/ai-edition/store/projectStore.tselectron/ai-edition/document-service.ts职责持有活动文档、播放状态、dirty脏标记读、写、列出、增删素材磁盘位置—userData/projects/id.openscreen一个项目一个 JSON两个工程细节值得称道原子写入每次保存走临时文件 重命名并为每个项目维护写入队列串行化程序崩溃也绝不会出现写了一半的文件document-service.ts 的saveProject。扩展名自动迁移更早的版本把这些文档存成.axcut现在的服务在首次访问时会静默改名为.openscreen——依据的是 JSON 里的版本号而非文件名文件内容一个字节都不动。两层读取路径都必须先过migrateRawDocumentToCurrent再documentSchema.parse所以无论磁盘上是 v3 还是 v8 的老文档进入内存时都已经是最新的AxcutDocument形态。撤销/重做50 步快照栈你可能会问那撤销是怎么和这份单一数据源配合的OpenScreen 没有把撤销历史写进文件而是在渲染进程维护了一个有界快照栈src/lib/ai-edition/store/undo.tspast[]/future[]最多各保留50份文档快照MAX_HISTORY 50每次setDocument把即将被替换的文档压入pastCtrlZ / CmdShiftZ / CtrlY 沿栈游走因为 AI 智能体的每次工具调用也走setDocument所以撤销一整轮 AI 修改天然按调用顺序逐一回退。好处很直接撤销历史不会让项目文件无限膨胀文件里只保留当前文档本身。小结这套设计给你带来了什么放心升级版本迁移单向链 未知版本拒绝老项目打开即自动升版画面一帧不变不怕损坏原子写入 写队列中途断电也不留半截文件操作可逆50 步内存快照栈人肉修改和 AI 修改都能撤销单一数据源界面、预览、字幕、AI 智能体共享同一份文档不会出现时间轴和预览打架。想继续深挖推荐阅读官方架构文档 technical-documentation/architecture/document-model.md 与 technical-documentation/architecture/timeline-model.md以及迁移逻辑的单元测试 src/lib/ai-edition/document/migrate.test.ts——那里面有每个版本迁移的边界用例。【免费下载链接】openscreenRecord your screen, ship a demo. Free and open-source, GPU-accelerated, no watermarks, no subscriptions. Windows, macOS, Linux. Actively maintained.项目地址: https://gitcode.com/gh_mirrors/opens/openscreen创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

开源AI编程工具实战:opencode与Tabby配置避坑指南

开源AI编程工具实战:opencode与Tabby配置避坑指南

1. 从终端到编辑器:AI编程开源工具的选型逻辑这两年AI编程工具像雨后春笋一样往外冒,闭源的有Cursor、Windsurf这些明星产品,开源阵营里也有不少能打的选手。我自己从去年开始陆续把日常开发流程往开源工具上迁移,踩了不少坑&…

2026/9/30 5:16:22 阅读更多 →
glTF/glb 从 Blender 导出到 Three.js 加载全流程实战

glTF/glb 从 Blender 导出到 Three.js 加载全流程实战

1. 从零搞懂 glTF/glb 到底解决了什么问题1.1 为什么 3D 模型加载总让人头疼做过三维项目的人大概都有过这种体验:美术在 Blender 里调好的模型,导出成 OBJ 之后材质全丢了;换成 FBX 吧,文件体积又大得离谱,一个稍微精…

2026/9/30 5:16:22 阅读更多 →
计算机网络基础试题解析PDF:从刷题到面试实战的复习主线

计算机网络基础试题解析PDF:从刷题到面试实战的复习主线

简介:这份PDF面向正在学习计算机网络基础、准备课程考试或计算机等级考试的学生与自学者,聚焦网络体系结构与协议原理的客观题训练。内容以单项选择题为主,覆盖互联网发展历程、广域网与城域网建设方案、拓扑构型、数据传输速率换算、UDP与TC…

2026/9/30 5:16:22 阅读更多 →

最新新闻

Windows 与 Linux 命令对照及终端选型避坑

Windows 与 Linux 命令对照及终端选型避坑

在 Windows 和 Linux 之间来回切换的人,多少都经历过这种尴尬:在 Linux 上肌肉记忆敲出ls,换到 cmd 里一回车,屏幕冷冷回一句"不是内部或外部命令";反过来在 PowerShell 里习惯了Get-ChildItem,登…

2026/9/30 5:53:39 阅读更多 →
Vision Transformer(ViT)原理与实战:从图像切片到全局建模

Vision Transformer(ViT)原理与实战:从图像切片到全局建模

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 5:53:39 阅读更多 →
深度学习期末复习:反向传播、卷积计算与优化器归一化

深度学习期末复习:反向传播、卷积计算与优化器归一化

期末季的图书馆四层,总能看到有人抱着一摞打印的slides,从第一页翻到最后一页,翻完之后长叹一口气——知识点全见过,题一个不会做。深度学习这门课的期末考试就属于这种类型:它不考你背了多少名词,而是把反…

2026/9/30 5:53:39 阅读更多 →
计算机为什么用二进制:补码、浮点误差与位运算避坑

计算机为什么用二进制:补码、浮点误差与位运算避坑

面试季里我最喜欢问的一个问题就是:为什么计算机要用二进制?计算机专业的学生几乎人人能背出"电路只有通和断两种状态",但再往下追问一句——为什么不是三进制、不是十进制?——能答完整的人就少了一大半。二进制这个词…

2026/9/30 5:53:39 阅读更多 →
Java酒店管理系统源码解析:从Servlet+AJAX到数据库设计与部署避坑指南

Java酒店管理系统源码解析:从Servlet+AJAX到数据库设计与部署避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 5:53:39 阅读更多 →
AI编码代理的上下文工程实战:滑动窗口、分层缓存与MCP协议

AI编码代理的上下文工程实战:滑动窗口、分层缓存与MCP协议

1. 项目概述:当AI写代码不再“断片”,上下文工程如何让代理真正理解你的意图你有没有遇到过这样的场景:在IDE里跟AI助手聊了十几轮,从需求分析、接口设计、数据库建模一路聊到异常处理细节,正准备让它生成最终的Servic…

2026/9/30 5:52:39 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →