素材导入
此版本在本地运行编辑器和媒体服务器。没有托管的导入 API、没有 CLI、也没有 OAuth:媒体通过编辑器 UI 或以下智能体工具进入项目。根据数据所在位置选择合适的路径。
路径 1 —— 用户的本地文件(首选)
请用户将文件拖入编辑器(预览画布或“我的素材”面板),或使用上传按钮。本地管道随后自动运行:流式写入 /media/uploads/、条件转码(≤1920 长边、浏览器友好编码、约 8Mbps)、音频提取以及自动转写(上传即启动 ASR)。请勿要求用户自行预转换、预裁剪或预转码——管道会自动处理。
智能体无法读取用户的文件系统。如果用户给了你一个 /Users/... 或 C:\... 路径,请告知他们将文件拖入编辑器;你无法获取该文件。
路径 2 —— 公共 URL(智能体驱动)
使用 download_media 传入单个 URL 或批量数组。服务端会获取文件,存储到 /media/uploads/ 下,并注册为素材库资源。对于用户指定的第三方素材或网络媒体,优先使用此方式。下载完成后,该素材的行为与其他媒体库素材一致。
路径 3 —— 外部主机传输
调用 import_media,传入 {"action":"create_session", "assetType":..., "filename":..., "contentType":..., "size":...}。该调用会返回一个绑定到当前项目、会话、素材身份、基文件名、POST 方法、MIME 类型和精确字节数的短期上传槽。主机端脚本可以按照声明的请求头向该精确 URL 上传数据。智能体的沙箱无法访问用户的本地主机,因此不要通过 run_code 尝试传输。
成功上传的响应会返回一个不透明的回执、回显的 assetType 以及上传后的路径。在需要精确的时长、尺寸、帧率或音频信息时,探测该上传路径,然后调用 finalize_uploaded_asset,传入回执、回显的 assetType、测量到的媒体元数据,以及音频/视频/GIF 的 durationInSeconds。服务端会解析权威的哈希值、路径、大小、文件名和素材 ID。Finalize 提交素材,但绝不会启动 ASR;将音频/视频素材放到轨道上后,如果需要转写,请单独调用 transcribe_track。在 finalize 成功之前,素材不存在且不可用。对于替换缺失素材的情况,请将现有的 assetId 传递给 import_media;如果是新素材则省略该参数。切勿自行构造 /media/uploads/... 路径,也切勿在上传响应之前声称数据已就绪。
编辑规范
对于多源剪辑,应从 OpenChatCut 时间轴上的原始素材构建可审查的作品。不要先将视频本地拼接、预裁剪、预合成、烧录字幕或展平处理再导入——请导入原始素材并在时间轴上完成所有合成操作,使每一步都可审查且可撤销。
对于代码类素材(如手动编写的动态图形),请使用 create-motion-graphics 技能(创建新素材用 create_motion_graphic_from_code,编辑现有素材则更新资产代码)—— 动态图形代码不是导入的文件。
存储说明
- 数据存储在本地磁盘(
/media/uploads/),直接通过 Range 请求提供。如果配置了 Cloudflare R2,上传内容会镜像到 R2,其他设备可从 R2 加载;未配置 R2 时项目仅限本地访问。 - 仅限本地访问是有效的最终状态:预览、编辑和导出均从磁盘读取。云镜像仅在需要跨设备访问时需要。