ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

OctoPrint JS 客户端库 Timelapse 模块实战:用 OctoPrintClient.timelapse 管理延时摄影的完整指南

OctoPrint JS 客户端库 Timelapse 模块实战:用 OctoPrintClient.timelapse 管理延时摄影的完整指南 物联网后端【免费下载链接】OctoPrintOctoPrint is the snappy web interface for your 3D printer!项目地址https://gitcode.com/gh_mirrors/oc/OctoPrint点击查看免费下载本文是 OctoPrint JavaScript 客户端库OctoPrintClient系列的组成部分聚焦其timelapse子模块。通过本文你将掌握如何在浏览器端使用OctoPrint.timelapse完成延时摄影Timelapse的列表获取、分类查询、下载、删除、未渲染任务的触发渲染以及配置读写等全部操作并理解每个方法背后对应的 REST API 端点、权限要求与前端视图模型ViewModel的调用方式可直接用于自建插件前端、自定义 UI 或脚本化测试。模块概览OctoPrintClient.timelapse是什么OctoPrintClient.timelapse是OctoPrintClient注册的一个子组件component由 src/octoprint/static/js/app/client/timelapse.js 定义并通过文件末尾的OctoPrintClient.registerComponent(timelapse, OctoPrintTimelapseClient)完成注册。因此在引入该文件后你就可以通过OctoPrint.timelapse访问其全部方法。从源码结构看该模块的职责边界非常清晰它只负责将延时摄影相关的 HTTP 请求封装成简洁的 Promise 风格 API所有方法最终都落到this.base即OctoPrintClient实例的通用方法上通用基类方法作用base.get(url, opts)发起 GET 请求base.delete(url, opts)发起 DELETE 请求base.jsbase.download(url, opts)以dataType text发起 GET用于下载文件base.jsbase.postJson(url, data, opts)将对象序列化为 JSON 后 POSTbase.jsbase.issueCommand(url, command, payload, opts)向指定 URL 发出命令型 POSTbase.js模块内部还预定义了三个 URL 模板timelapse.jsapi/timelapse—— 列表 / 配置读写主端点downloads/timelapse—— 单个延时摄影文件的下载端点downloads/timelapses—— 批量下载端点。文件名filename/name在拼进 URL 之前都会经过OctoPrintClient.escapePath处理base.js该方法按/分段对每段做encodeURIComponent从而安全地支持文件名中可能出现的特殊字符如空格、#、中文等。获取列表与配置get/list/listRendered/listUnrendered这四个方法都基于同一个 GET 端点区别在于是否请求unrendered数据以及对响应数据的拆包方式。get(unrendered, opts)get是最底层的方法直接调用this.base.get(api/timelapse, opts)。当unrendered参数为真值时会向请求参数中追加{unrendered: true}timelapse.js。它对应后端 src/octoprint/server/api/timelapse.py 中的GET /api/timelapse路由需要TIMELAPSE_LIST权限。响应体为一个timelapse list对象包含config当前延时摄影配置对象files已渲染rendered的延时摄影条目数组unrendered未渲染任务数组仅当请求带unrenderedtrue时出现enabledwebcam.timelapseEnabled设置对应的布尔值timelapse.py。后端对该路由还启用了基于 ETag 与 Last-Modified 的缓存校验with_revalidation_checkingtimelapse.py并用进程内缓存避免重复扫描目录如需强制刷新可传forcetrue。list(opts)一次拿到渲染 / 未渲染两份列表list是对get(true, opts)的封装它请求包含未渲染数据然后把响应拆成{rendered: response.files, unrendered: response.unrendered}两个属性交给 Promise 的 resolve 回调timelapse.js。典型用法OctoPrint.timelapse.list().done(function (data) { console.log(已渲染:, data.rendered); console.log(未渲染:, data.unrendered); });listRendered(opts)与listUnrendered(opts)两者分别只请求一种数据并只返回对应的数组listRendered调用get(false, opts)resolve 时只传response.filestimelapse.jslistUnrendered调用get(true, opts)resolve 时只传response.unrenderedtimelapse.js。响应数据模型根据 docs/api/timelapse.rst 中的定义列表中的每个条目字段如下已渲染的延时摄影rendered字段类型说明namestring延时摄影文件名sizestring文件大小的格式化显示bytesint文件大小字节datestring创建时间的格式化显示urlstring下载该延时摄影的 URLthumbnailstring缩略图下载 URL可选后端在返回前会为每条记录补上url与存在的thumbnail格式为downloads/timelapse/文件名timelapse.py。未渲染的延时摄影unrendered字段类型说明namestring未渲染任务名sizestring任务内所有文件总大小的格式化显示bytesint总大小字节datestring任务创建时间的格式化显示recordingbool是否仍在录制renderingbool是否仍在渲染processingbool是否处于录制或渲染中的任一状态下载与删除download/delete/deleteUnrendereddownload(filename, opts)下载单个已渲染文件download将文件名拼接到downloads/timelapse/后调用this.base.downloadtimelapse.js。由于base.download内部把dataType强制设为text请勿在opts中覆盖该值否则会导致响应解析异常。注意后端GET /api/timelapse/filename路由实际返回的是 302 重定向到 Tornado 处理的下载端点timelapse.py需要TIMELAPSE_DOWNLOAD权限而在前端我们直接调用downloads/timelapse/filename地址即可。OctoPrint.timelapse.download(my_print_2026.mp4).done(function () { console.log(下载请求已发出); });批量下载辅助bulkDownloadUrl(filenames)该模块还暴露了一个便捷方法bulkDownloadUrl(filenames)它基于downloads/timelapses端点把文件名数组拼成downloads/timelapses?filesafilesb...形式的查询串timelapse.js底层逻辑来自base.bulkDownloadUrlbase.js。适合构造批量下载链接供用户在新窗口打开。delete(filename, opts)删除已渲染文件delete对api/timelapse/filename发出 DELETE 请求timelapse.js。后端路由timelapse.py需要TIMELAPSE_DELETE权限删除前会通过octoprint.timelapse.valid_timelapse校验文件名合法性、确认路径位于 timelapse 基目录内且非隐藏路径并顺带删除同名的缩略图文件删除成功后返回更新后的 timelapse list含最新config与files。deleteUnrendered(name, opts)删除未渲染任务deleteUnrendered对api/timelapse/unrendered/name发出 DELETEtimelapse.js。后端需要TIMELAPSE_MANAGE_UNRENDERED权限成功后返回NO_CONTENT204timelapse.py。渲染未渲染任务renderUnrendered(name, opts)renderUnrendered通过base.issueCommand(unrenderedTimelapseUrl(name), render)向api/timelapse/unrendered/name发出带{command: render}的 POSTtimelapse.js。目前后端仅支持render这一种命令timelapse.py并且需要TIMELAPSE_MANAGE_UNRENDERED权限若打印机正处于打印或暂停状态会返回 409 拒绝渲染——因为渲染过程与打印争抢 CPU 资源会互相干扰timelapse.py。OctoPrint.timelapse.renderUnrendered(2026-09-24_07-00-00).done(function () { console.log(渲染任务已提交); });配置读写getConfig/saveConfiggetConfig(opts)读取当前配置getConfig调用get(false, opts)并从响应中取出config属性timelapse.js。saveConfig(config, opts)保存配置saveConfig把配置对象整体序列化为 JSON通过OctoPrint.postJson(url, config, opts)POST 到api/timelapsetimelapse.js。注意POST 保存配置需要TIMELAPSE_ADMIN权限。后端setTimelapseConfigtimelapse.py对入参做了严格的校验与归一化type必填取值off/zchange/timedpostRoll必须是 0的整数默认 0fps必须是 0的整数默认 25interval仅timed必须是 0的整数会被放入options.intervalretractionZHop仅zchange必须是 0的浮点数放入options.retractionZHopminDelay仅zchange必须是 0的浮点数放入options.minDelayrenderAfterPrint只能是always/success/failure/never之一默认alwayssave为真值且当前用户拥有ADMIN权限时配置会通过configure_timelapse(config, True)持久化到磁盘否则仅对当前打印会话生效。任何字段不合法都会返回 400 错误。配置数据模型速查根据 docs/api/timelapse.rst 与后端_config_for_timelapsetimelapse.py三种配置形态如下通用字段所有类型typeoff/zchange/timed、postRoll秒、fps、renderAfterPrint保存时可额外带save布尔标志。zchangeZ 轴变化触发额外字段字段类型说明retractionZHopfloat需要忽略的 Z 回抽抬升量避免把回抽误判为层高变化而误拍minDelayint两次快照之间的最小间隔秒用于限制花瓶模式 / 连续 Z 打印时的拍摄频率防止性能问题timed定时触发额外字段字段类型说明intervalint每两次拍摄之间的间隔秒数当未配置任何延时摄影时config为{type: off}。示例保存一个 5 秒间隔、25fps、打印成功后自动渲染的定时延时配置OctoPrint.timelapse.saveConfig({ type: timed, interval: 5, fps: 25, postRoll: 0, renderAfterPrint: success, save: true }).done(function (response) { console.log(已保存最新配置:, response.config); });在前端视图模型中如何被使用OctoPrint.timelapse并不是孤立存在OctoPrint 自带的Timelapse标签页视图模型 src/octoprint/static/js/app/viewmodels/timelapse.js 正是它的主要消费方这可以看作官方给出的最佳实践范本数据拉取requestData中先检查TIMELAPSE_LIST权限再调用OctoPrint.timelapse.get(true)一次性获取已渲染 未渲染数据交给fromResponse分别更新两个ItemListHelper渲染列表与未渲染列表均支持按名称 / 日期 / 大小排序及分页timelapse.js 视图模型配置回填fromConfig根据config.type把interval、retractionZHop、minDelay、postRoll、fps、renderAfterPrint等字段映射到界面上的可观察属性并对缺失字段回退到默认值timelapse.js 视图模型用户操作删除未渲染任务调用OctoPrint.timelapse.deleteUnrendered(name)timelapse.js 视图模型触发渲染调用OctoPrint.timelapse.renderUnrendered(name)timelapse.js 视图模型保存设置调用OctoPrint.timelapse.saveConfig(payload)timelapse.js 视图模型。由此可以推断出典型的最佳实践模式先get(true)拿到全量数据渲染列表与未渲染列表分开管理交互动作完成后再次拉取数据刷新 UI。完整速查表方法HTTP 端点权限说明get(unrendered, opts)GET /api/timelapseTIMELAPSE_LIST取列表与配置unrenderedtrue时附带未渲染列表list(opts)同上unrenderedtrueTIMELAPSE_LISTresolve 为{rendered, unrendered}listRendered(opts)GET /api/timelapse不带 unrenderedTIMELAPSE_LISTresolve 为已渲染数组listUnrendered(opts)GET /api/timelapse?unrenderedtrueTIMELAPSE_LISTresolve 为未渲染数组download(filename, opts)GET downloads/timelapse/filenameTIMELAPSE_DOWNLOAD下载单个已渲染文件bulkDownloadUrl(filenames)downloads/timelapses?files...下载时校验构造批量下载链接delete(filename, opts)DELETE /api/timelapse/filenameTIMELAPSE_DELETE删除已渲染文件含缩略图deleteUnrendered(name, opts)DELETE /api/timelapse/unrendered/nameTIMELAPSE_MANAGE_UNRENDERED删除未渲染任务renderUnrendered(name, opts)POST /api/timelapse/unrendered/namecommand: renderTIMELAPSE_MANAGE_UNRENDERED触发渲染打印中返回 409getConfig(opts)GET /api/timelapseTIMELAPSE_LISTresolve 为配置对象saveConfig(config, opts)POST /api/timelapseTIMELAPSE_ADMIN保存配置save: true持久化相关文档与延伸阅读底层 REST API 完整定义含数据模型、各类型配置字段的详细表格docs/api/timelapse.rst客户端实现源码src/octoprint/static/js/app/client/timelapse.js后端 API 路由与校验逻辑src/octoprint/server/api/timelapse.py前端视图模型消费示例src/octoprint/static/js/app/viewmodels/timelapse.js客户端通用基类get/delete/postJson/issueCommand/escapePath等src/octoprint/static/js/app/client/base.js同系列其他客户端子模块文档见 docs/jsclientlib 目录JS 客户端库的总体使用方式参见 docs/jsclientlib/base.rst赞分享物联网后端【免费下载链接】OctoPrintOctoPrint is the snappy web interface for your 3D printer!项目地址https://gitcode.com/gh_mirrors/oc/OctoPrint点击查看免费下载相关推荐OctoPrint 延时摄影TimelapseAPI 完整指南列表、删除、渲染与配置管理OctoPrint 延时摄影TimelapseAPI 完整指南列表、删除、渲染与配置管理 本篇技术指南围绕 OctoPrint 的延时摄影Timelap物联网后端如何用Automated YouTube Channel打造24/7自动运行的YouTube频道终极指南如何用Automated YouTube Channel打造24/7自动运行的YouTube频道终极指南 Automated YouTube Channel是物联网后端Moby 内嵌 containerd/plugin一套在容器生态仓库间共享的 Go 插件注册与初始化框架Moby 内嵌 containerd/plugin一套在容器生态仓库间共享的 Go 插件注册与初始化框架 containerd/plugin 是一个供 con物联网后端上一篇磁盘又爆满了用 Czkawka/Krokiet 把重复文件一网打尽的完整指南下一篇SwiftSyntax 未来展望Swift 语言工具生态的发展趋势创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表