面向内容创作者的全生命周期排期管理系统。每个节点独立安排日期,支持并行工序。Canbox 仅导入真实拍摄日期,不推算其他节点。
- 手动排期优先:修改发布日期、工序顺序或新增工序时,不会擅自改动其他日期
- 独立排期:已移除倒排、顺推和碰撞推挤;拖动、缩放或修改节点只影响当前节点
- 直接编辑:打开项目即可改名称、日期、完成状态,无须切换编辑模式
- 撤销与历史:当前页面有 30 次撤销;另外服务器保存最近 30 次已保存排期变更,刷新后仍可逐节点预览恢复
- Canbox 集成:从罐头场通告排期系统拉取拍摄安排,一键导入或反向绑定
- 飞书项目导入:Agent 只提交候选,你手动选择绑定 / 新建并逐项确认字段与日期;独立凭证,不自动覆盖或倒排。详见 接入说明
- 甘特图日历:无缝横向滚动,合并相邻工序色块,拖拽调整时间
- 选题卡编辑:工序时间段选择、前置准备、分类标签、进度追踪
- 冲突预警:工序过期未完成时红字警告
- 工序设置:自定义标准制作流程,拖拽排序,颜色选择
- 数据持久化:Docker Volume 挂载,JSON 文件存储
要测试当前仓库里的 v1.9.10 源码,可先在项目目录构建本地镜像:
docker build -t pocket-os:1.9.10 .
docker run -d -p 8080:8080 --name pocket-os-test \
-v pocket-os-data:/app/data \
pocket-os:1.9.10下面的 latest 示例适用于镜像发布后部署:
创建 docker-compose.yml:
services:
pocket-os:
image: sexyfeifan/pocket-os:latest
environment:
POCKET_OS_PASSWORD: ${POCKET_OS_PASSWORD:-}
POCKET_OS_VIEW_PASSWORD: ${POCKET_OS_VIEW_PASSWORD:-}
ports:
- "8080:8080"
volumes:
- pocket-data:/app/data
restart: unless-stopped
volumes:
pocket-data:启动:
docker compose up -d
# 打开 http://localhost:8080docker run -d -p 8080:8080 --name pocket-os \
-v pocket-os-data:/app/data \
--restart always \
sexyfeifan/pocket-os:latestgit clone https://github.com/sexyfeifan/Pocket-OS.git
cd Pocket-OS
npm install
npm start
# 打开 http://localhost:8080docker run -d -p 8080:8080 --name pocket-os \
-v /volume1/docker/pocket-os/data:/app/data \
--restart always \
sexyfeifan/pocket-os:latestdocker run -d -p 8080:8080 --name pocket-os \
-v /share/CACHEDEV1_DATA/docker/pocket-os/data:/app/data \
--restart always \
sexyfeifan/pocket-os:latestPocket OS 支持从通告排期系统自动拉取拍摄安排。
- 在排期系统后台启用外部 API
- 在 Pocket OS 侧边栏点击「从拍摄通告导入」
- 输入排期系统地址
- 选择要导入的项目,只填写通告拍摄段,其余工序日期留空
支持:
- 按时间轴浏览,自动定位到今天
- 导入时自动关联拍摄地、导演、摄影等信息
- 不连续拍摄日期会保留为多个独立拍摄段
- 选题卡可反向绑定通告排期
| 工序 | 说明 | 新建时日期 |
|---|---|---|
| 脚本 | 文案撰写 | 未安排 |
| 拍摄 | 实际拍摄,可分段 | 未安排;通告导入时填写拍摄日期 |
| ACO | 粗剪版本 | 未安排 |
| BCO | 精剪版本 | 未安排 |
| 发布 | 最终发布 | 与项目发布日期一致 |
可在「工序设置」中自定义新项目的工序名称、颜色、顺序。现有项目的工序可直接改名、增删和排序,设置变化不会改动现有日期。
- 点击「新建选题」后直接输入名称;所有节点默认未安排。
- 直接选择节点的开始、结束日期;同日工序只需选择一天。前移/后移一天会整体移动当前节点并保持时长。
- 点击时间轴色块进入对应节点编辑;点击时间轴空格或项目月历日期安排节点、添加备注。
- 拍摄可添加多个独立段;拖动一个拍摄色块只移动该段,节点的前移/后移按钮则移动整组拍摄段。
- TML 先预览再应用,只更新列出的节点。可显式选择年份;过去月份不会自动猜成明年。
- 修改自动保存;查看「已保存」提示后即可刷新。连续编辑按顺序保存,失败会重试;同步冲突由用户选择版本。
升级不会自动重排既有项目。此前被错误移动的日期需要根据实际安排手动校正。
- 前端:Vanilla JS + Tailwind CSS(CDN)
- 后端:Node.js + Express
- 存储:JSON 文件
- 部署:Docker (Node.js 22 Alpine),镜像约 45MB
- 工作台:
/;只读入口:/view,旧/canbox地址兼容。 - 看板包含工作概览、项目卡片、周/月日历、全景时间轴与只读详情。只有查看、搜索、筛选和全屏操作;无编辑、删除、勾选完成或拖拽改期功能。
- 看板通过独立只读 API 和 SSE 获取服务器已保存的数据,不读取管理设置、密钥、导入原文和历史快照。失败时保留旧画面并显示断线提示。
- 项目状态(筹备、制作中、待反馈、已完成)与排期状态独立。点击“确认当前排期”只确认已安排的日期;改期会撤回确认,不会重排。
- 新建可选口播、商业拍摄、短视频模板,也可把现有工序结构保存为模板。复制项目默认清空日期、完成状态、备注和通告绑定。
- 编辑页默认紧凑节点行;从卡片进入再返回会保留视图和筛选。
- TML 预览支持逐节点、逐备注勾选;通告日期应用/绑定先比较前后日期。预览后排期变化必须重新预览。
- 历史从 v1.9.7 开始记录,最多保留 30 次已保存的日期/节点增删变更(连续编辑可能合并为一次保存),不是备份替代品。恢复只应用选中的节点,保留已有节点的名称、完成状态和其他项目字段。
没有填写日期的节点不代表排期未完成,也不自动进入待处理。两处工作概览共用以下规则:
- 当前节点:只看未完成且实际日期覆盖今天的节点,显示结束日期。
- 下一节点:跳过没有日期的节点,按实际日期找每个项目最近的后续安排,不受工序顺序或七天范围限制。同日并行节点分别显示。
- 已过结束日:只提示旧手动项目尚未标记完成的节点;多段拍摄以最后一段结束日为准,不把段间空档当成逾期。
- 待反馈 / 调整中:只显示手动标记的项目。没有后续日期是中性信息,不自动推断是否需要补排。
- “确认当前排期”确认已有日期,不要求所有节点填满。旧项目的进度仍依据手动确认;自动推进项目分别统计按计划结束与人工确认。不适用节点不计入进度。
只读项目详情上方提供横向日历,显示所有已有日期的节点,空日期节点仍保留在下方完整列表。全景默认两周细览(手机保持可读的日宽);六周是缩放档位,不是日期边界。可按住鼠标左右拖动、触控板横滑、触屏平移,或聚焦日历后用方向键浏览,Shift + 方向键移动两周,Home / End 定位首个 / 最后安排。也可通过按钮与日期输入跳转,跨月跨年连续浏览。拖动只移动视野,绝不修改排期。
名称和完整日期位于真实色条上方,短节点自动换行并错层,不用扩大色条假装延长日期。切换缩放、切换视图返回和自动刷新保留本次打开页面内的时间轴位置;整页重新打开回到今天。首次升级采用两周细览,此后记住主动选择的缩放档位。
新建时输入名称、选择模板和推进方式,再创建项目;取消不会生成空项目。分类和平台可后补。编辑页按“名称 / 当前进展 → 已知日期 / 通告或 TML 导入 → 项目日历 → 节点列表 → 准备事项 / 备注 → 项目管理”排列。发布日期只在发布节点编辑,不是创建必填条件。节点行直接改日期,低频操作在“更多”里。
新建、复制结构、Canbox 新导入的项目默认按日期自动推进;备份恢复与旧项目保留原模式。没有 progressionMode 的项目继续手动确认,不会因升级批量结束。项目管理中的“推进方式 / 时区”可预览再切换。
- 项目日期未开始:未开始;开始日至结束日(含全天):进行中;结束日完整过去后:按计划结束。
- 按计划结束只是日程推定,不等于拍摄、验收或发布实际完成。实际确认仍可在节点“更多”中操作,界面和只读看板明确区分这两种结束来源。
- 多段拍摄以最后一段结束日为准,段间空档显示等待下一拍摄段。无日期不会自动结束,也不视为排期未完成。
- 延期 / 暂停入口支持具体新日期、延期日期待定、暂停、等待反馈。后三种停止自动推进,原日期保留为“原计划”参考,不会推算新的日期。
- 具体改期只修改当前节点、撤回该节点人工完成并恢复推进;最后结束日不能早于项目的今天。过期节点恢复推进时需先设置新日期。普通日期编辑不会擅自清除暂停或等待状态。
- “不适用”不计入进度或日历,恢复适用可找回原日期;直接重新安排日期也恢复适用。日期撤销不回退随后人工设置的暂停 / 等待状态。
- 项目不会自动归档;即使所有已安排节点按计划结束,也保持在项目列表中,直到手动标记项目完成。
- 默认项目时区
Asia/Shanghai,可改为其他内置时区。显示使用服务器校时与项目时区;工作台每 30 秒、看板每 60 秒刷新,并在回到前台更新。关闭页面不影响下次打开时的日期推算。 - 日期自动推进是只读计算,不写入
done、不修改原日期、不产生自动保存竞争。服务器系统时间仍须保持准确。若实际延期但未人工记录,系统只能继续显示按计划结束,不能自动识别现实中的延误。
未设置密码时仍兼容原来的本地部署,但这不是权限隔离:知道服务地址的人仍能访问工作台。不要将无密码实例直接暴露到公网。
在 Compose 所在目录的本地 .env 中设置两个不同的强密码,然后重新创建容器:
POCKET_OS_PASSWORD=替换为独立的管理密码
POCKET_OS_VIEW_PASSWORD=替换为不同的查看密码docker compose up -d pocket-os只分享 /view 地址与查看密码,不分享管理密码。浏览器登录用户名可任意填写,权限由密码区分;测试查看身份请使用无痕窗口或另一浏览器,避免复用已缓存的管理登录。公网访问必须通过 HTTPS。查看密码能够查看全部项目的看板字段(含准备事项和日期备注),本版没有按客户/项目分别授权。修改查看密码并重建容器即可撤销旧密码;已被读取或下载的内容无法收回。
只设置查看密码、未设置管理密码,或两者相同,服务器会拒绝启动。管理端侧栏显示当前访问保护状态。
| 变量 | 默认值 | 说明 |
|---|---|---|
PORT |
8080 |
服务端口 |
POCKET_OS_DATA_DIR |
/app/data |
自定义数据目录(测试或非 Docker 部署) |
POCKET_OS_PASSWORD |
空 | 管理密码;公网部署必须设置并使用 HTTPS |
POCKET_OS_VIEW_PASSWORD |
空 | 独立查看密码;要求同时设置不同的管理密码 |
数据存储在容器内 /app/data/app_state.json 和 /app/data/topics/*.json,通过 Docker Volume 映射到宿主机。
| 场景 | 数据安全 |
|---|---|
| 重启容器 | ✅ |
| 删除容器 | ✅(数据在 Volume 中) |
| 升级镜像 | ✅ |
| 换设备访问 | ✅(同局域网) |
也可在界面中使用「导出备份」功能下载 JSON 文件。「导入恢复」会完整替换服务器上的现有选题,操作前会二次确认。
飞书候选收件箱和 Agent 凭证摘要存放在 Volume 的 integrations/,不包含在界面的选题 JSON 备份中。迁移完整部署时请停服备份整个 Volume;管理密码仍从部署环境配置。选题 JSON 恢复不会恢复收件箱或撤销已处理记录,详见 飞书接入与备份边界。
- 当前版本:
1.9.10 - 后续修复版本每次增加
0.0.1,例如1.9.9 → 1.9.10 → 1.9.11
运行 npm ci && npm run check,测试自动使用临时数据目录,不操作现有 data/。GitHub Actions 与 Docker 双架构构建均执行回归检查。镜像构建只复制代码、静态资源和测试,不包含本地数据或 .env。
MIT