本地优先
项目数据默认保存在设备中,减少对持续联网的依赖。
把复杂创作流程整理成清楚、可回退、可持续维护的桌面工具,同时让数据尽可能留在使用者的设备里。
你好,我是 “大时钟”项目开发者。 我关注桌面软件、本地数据、AI 工作流和长期可维护的产品结构。
大时钟最初来自一个很具体的问题:创作过程往往散落在许多文件和工具之间。 我希望用更清晰的信息结构,把小说、剧本、分镜、图片和视频放进同一套工作路径。
目前工作台已经覆盖项目管理、小说创作、剧本与分镜、元素与人物造型、 图片与视频生成、封面工作室、视频切割、聊天和无限画布等环节, 并为内置文本、图片和视频模型保留统一的调用与状态入口。
这个个人页面不是产品宣传页,而是一份持续更新的作品档案, 用来记录我为什么做、怎么做,以及遇到问题时如何取舍。
WHAT I AM BUILDING
从最初的想法到可以继续制作和交付的素材,大时钟尝试把每个环节都保留在清晰、可追踪的本地工作路径中。
用项目控制台管理创建、搜索、归档、备份和恢复,让创作资料有稳定的数据边界。
整理章节、人物、场景和连续性记忆,支持停笔恢复、光标续写、局部改稿与直接成稿。
把小说内容拆成剧集、剧本和分镜,并保留元素绑定、版本和调整记录。
统一管理人设、场景、道具、服饰、Logo 参考和人物素材,为后续生成提供一致上下文。
围绕分镜组织生成任务、流式下载、断点续传和失败恢复,把渠道、账号状态和结果历史集中到同一处。
继续完成视频切割、封面生成、Chat 与画布编排,让素材可以回到下一轮创作。
项目数据默认保存在设备中,减少对持续联网的依赖。
重要步骤尽量可见、可回退,编辑、保存、任务轮询和下载都能从中断处继续,避免不可逆结果。
Windows 与 macOS 共用源码,从数据目录、运行组件和打包流程出发持续保持一致性。
卡片悬停放大时图片与输入区的分界会闪一下。之前在安全模式窗口里试了「常驻图层 + 严格裁切」, 没压住,就记成了「这个组合无效」。后来在正常窗口里核实渲染器走的是显卡加速,同样的写法完全不闪—— 安全模式用的是软件绘制,两条绘制路径对图层和裁切的处理本来就不同。 和渲染有关的结论,要先确认自己看的是哪条绘制路径,再下判断。
写小说的弹窗在暗色主题下背景是透明的。原因是弹窗挂在 body 下,而背景用的变量只定义在页面根容器上—— 变量取不到值,整条声明失效,背景退回透明;浅色主题只是碰巧被别的规则刷成了白色。 修法是把这组变量的定义同时挂到各类弹窗根上,然后 24 个主题 × 4 类弹窗逐一读计算样式确认。 用了 append-to-body 的组件,别指望它继承页面里的局部变量。
死代码检查原来把测试也算作入口,于是「只有测试在调用」的函数永远不会被报出来。 现在测试不再算生产入口,模块内部从「被生产代码用到的导出 + 顶层副作用」做可达性分析, 互相引用、却没人从外面用的声明孤岛也能找出来。第一轮清掉了 46 处,其中一整套从未接上的渠道生命周期约 600 行—— 线上一直跑的是另一份。存量问题记进基线文件,只有新增问题才让检查失败。
一条「淡入上移」的入场动画跑完后如果把 transform 留在 translateY(0), 那个元素就成了 position: fixed 后代的定位参照——里面的固定定位元素不再相对视口, 而是相对这整块容器。表现是它跟着页面一起滚走、永远停不到屏幕右边。 终态回到 none,或者压根不要给可能包住固定元素的容器加带动画的入场。
服务器把某个模型下架之后,客户端曾经会「贴心地」挑一个目录里还能用的模型继续出片。 问题在于客户选的那个模型可能只是暂时维护、也可能还会回来,而他已经付了钱、 也不知道自己现在用的是另一个模型。现在只有三种处理:找到就规范化、没选就套默认、 选了但找不到就清空并要求重选;三种情况各走各的,不会互相顶替。
按清晰度计费之后,「客户选了 1080P、后台只配了 720P 的价格」变成一个必须明确回答的问题。 悄悄按 720P 收费,客户不会发现;悄悄按 1080P 出片却没收钱,平台会亏。 所以缺档位直接在扣费前拒绝并列出可选档位——宁可让客户重选一次, 也不要让账单和画面价不对板。
一处环境变量兜底让「模型没选服务商」看起来仍然可用:后台状态写着未选择服务商, 调用却成功出片。这种兜底不会报错,只会让配置缺口藏起来, 直到某天变量被清掉、整条链路才一起失效。去掉它之后, 没配就是不可用、保存就被拒绝,问题在哪个环节一目了然。
渠道 id 的修正规则在服务端有一份、前端有一份,服务端那份更窄。 客户选了「服务器内置模型」,前端认识它、界面正常,服务端却在加载与保存时 把它改写成别的渠道,还不报错——直到出图才冒出一句完全不相关的报错。 两份实现只测了其中一份,另一份从来没有覆盖。现在清单落在叶子模块里、只此一处, 并有一条往返测试逐个渠道值验证读写不变。
成片下载完、要写回项目记录时,如果写回失败、取不到项目、或那一集已经被删掉, 落盘函数是返回「这次不该写」而不是抛错。把返回值丢掉的地方照样标成完成、 顺手把待办摘掉——客户于是看到一个「已完成」的镜头,项目里却没有这条视频, 而且不会再有下一次重试。判据因此从「下载没抛错」改成 「客户真的能在项目里看到这条视频」,一处不落地收口到同一个判断。
启动时恢复待办视频的逻辑在仓库里有两份,跑着的是旧的那一份: 带「超过一天就不恢复、视频已存在就跳过」,而真正改好的那份零调用者。 表现是跨天重启就丢任务、重做之后的新任务永久失联—— 客户看不到任何报错,只是视频再也不动了。同一天还清掉了另外四套类似的死副本。 留着第二份的代价从来不是多几行代码,是让人以为「改这边也生效」。
上传大文件原本按时长算一个固定总预算,而服务器出口带宽很小——一份几百兆的素材 要传二十多分钟,比预算还长,于是正常传输被判成超时,自动重发两次、 每次白烧一整份流量,最后仍然传不上去。改成每有进展就重新计时、 几十秒毫无进展才判死:慢但一直在动的永不误杀,真卡住的很快收场。
单个账号的素材配额一度比单文件上限还小:一份合法的、接近上限的素材永远传不上去, 而报错只说「暂存已满」。客户看到这句话只会以为自己传坏了或传得太频繁, 反复重试当然还是失败,真正的成因在提示里一个字都看不出来。 这类数不是各填各的——配额必须大于单文件上限,改之前要一起算一遍。
一开始把上游成本的口径绑在了客户计费方式上,界面上只给一个金额框。 可最常见的组合恰恰是「客户按次付、上游按秒收」——在绑定之下根本填不出来, 想按秒算成本,就得连客户的售价一起改掉。为了记成本而改售价, 比算不准毛利严重得多。两个字段因此拆开、各自独立。
想判断「出的片子像不像参考」,得在元素库和镜头卡之间来回翻好几次, 于是大多数人凭印象——而「不像」的两条原因(上游没拿到参考图、 拿到了却没生效)处置完全不同。现在把这次提交带上的参考和成片并排摆出来, 而且是打开时现算:改过元素、重出片之后看到的就是最新的那一份。
参考素材的地址原本只认本机的授权凭证,而真正去拉它的是第三方的上游服务、 根本拿不出这份凭证。于是上游拉不到、也不报错,直接按「没有参考图」出片—— 客户上传了参考图、素材还留在服务器上,成片却跟它毫无关系,全程没有任何提示。 地址因此改成上游凭签名即可拉取,有效期按它可能排队的时长留足。
构建流水线连着十四次失败都没人察觉,因为它失败的理由看着不像理由: 捆绑的二进制文件确实「在」,探测放行,真去执行才报一串读不懂的 not found。 那其实是一百多字节的指针文本——真正的二进制要走大文件存储才会被检出, 检出到的是占位内容。判断改用「能不能跑」而不是「文件在不在」, 顺带也让没装大文件存储的开发机不再选中一个垃圾。
卷规划、出图这类操作要跑几分钟:先取一份草稿快照,等模型结果,再写回磁盘。 窗口期内客户可能正在改别的章节,把整份快照写回去,就把那些改动静默撤销了—— 编辑打回、新增的章节消失,界面上还看不出是谁干的。 现在改成以最新草稿为底、只写本次真正改动的字段。 快慢两种写入共用一份数据时,写回的范围必须由「这次到底动了什么」决定。
提交是排队异步做的,所以入队时就删掉暂存目录,删的是几分钟后真正提交时还要读的开场帧和参考图。 少了文件并不会报错,只会静默跳过参考图继续出片、照常计费,客户完全无感。 清理判据因此从「这条处理完了」改成「还有没有别的条目在引用它」—— 一个暂存目录往往被同一次提交的多个镜头共用。
后台弹窗的兜底监听建立在一个被当成环境事实的结论上:只等了 150 毫秒, 就认定「关闭对话框不会触发关闭事件」,于是没有加任何守卫。 实际上那个事件只是更晚才到——客户确认第一问、续体立刻打开第二问时, 第一问排下的关闭事件正好把刚打开的第二问结算成「取消」。 换三个时点重新量一遍才看清。量不到不等于不存在,等待时间也是量测的一部分。
上一次给付费端点加上了幂等键,但键是调用方原样透传的: 谁重发时换一个值,去重就形同虚设。现在键由「内容摘要 + 尝试标识」派生—— 提示词改了就必须是新请求,同一次请求的重发才复用同一个键; 服务端另把「正在处理」标记打在扣费之前,让并发的重复投递在第一次还在生成时就被挡住。 幂等不是多一个参数,是加一条必须成立的对应关系。
原先「本机授权还没到期」被直接当成拒绝兑换的理由, 于是客户想提前转成正式授权,会被自己那句「你已经激活了」挡住,白等试用跑完。 真正该问的是这次兑换能不能带来增量:没到期就按剩余时间顺延; 只有本就是长期授权、或顺延撞上时长上限,才按「无需重复激活」拒绝,而且这种情况不消耗激活码。 判据从「当前是什么状态」换成「这次操作会不会改变结果」。
「发布到客户端」和「启用」本来是两个判断:一个管看不看得见,一个管能不能用。 客户端一度把它们合成一个过滤条件,于是只关「启用」的模型会整个消失。 客户看不到后台开关,只会以为模型丢了。 现在只关「启用」的模型仍留在下拉里、标成不可选,悬停说明它正在维护—— 把选择权留在客户手上,比把选项直接抽走更诚实。
Windows 版的默认数据根曾经算出来正好等于安装目录本身, 于是客户的配置、项目素材和本机授权全住在程序目录里—— 覆盖升级替换程序目录时,它们会一起被清掉。 现在数据根改成安装目录旁边的独立目录,旧目录自动搬一次、原样留着作恢复副本。 「装在哪」和「数据在哪」本来就是两个问题,让它们碰巧相等只是巧合,不是设计。
后台原先只有「解绑」,它会把这台设备剩下的时长记进「待继承权益」,等客户换机后领回—— 对正常换机是对的。但机器彻底不用了、或者当初就绑错了, 留在账上的那份时长就成了与客户无关的欠账,后台还没法清掉。 于是多了一个「删除」:绑定和时长一起作废。 两个按钮加两句写死的确认文案,比给「解绑」加一个「是否保留权益」的勾选更不容易点错。
要有一条能通知到所有客户端的通道,最省事的做法是给它开一个定时器和一个新接口。 但客户端本来就每隔两分钟做一次授权复验,那是一条始终存在、已经签名、一定会跑的链路, 公告直接搭在上面就够了,渲染层一行都不用改。 代价是最坏要等两分钟才可见——为即时性多养一个入口,不值得。
公告里可以带跳转链接,所以它必须和授权凭证一样签名, 否则链路上任何一跳都能往客户界面塞一句「点击续费」。 但它终究只是展示内容:验签失败时丢掉这条公告就好,绝不能把客户挡在门外。 两件事因此分开签名、也分开失败——把不同重要性的东西绑在同一个成败判断上,是很容易顺手犯的错。
账号级有效期只该在设备还不存在时起作用。有效期一旦下沉到每台设备, 续期、取消和解绑才不会互相牵动,后台的动作也只剩下设备维度这一种。 代价是要维护一套「换机时把旧设备剩下的时间领回来」的规则, 但这比让一台设备的操作改掉另一台的结果要清楚得多。
换一块网卡、加一条内存,硬件指纹就会变。与其要求使用者重新激活, 不如用多因子加权加阈值把漂移的设备认回来。 但同一套规则也会放大误认,所以主板标识只取序列号,命中比例也要留出余量。 放宽和收紧必须一起做,只做一半等于给克隆机开门。
一个写错的分号能让整段硬件读取静默失败, 一个混进源码的控制字符会让代码搜索返回空而不是报错。 它们的共同点是外层有捕获、界面上没有任何异常, 只能靠真机跑一遍和事后复盘才浮出来。遇到「什么都查不到」,先怀疑工具本身。
同一次请求被投递两次就会扣两次分。现在付费端点都带幂等键提交, 服务端按键去重并回放上一次的成功结果,出口也统一强制 HTTPS—— 请求在链路上被看见,和它被重复执行一样危险。
一次安全审计翻出了几处平时不容易注意的入口:把地址片段拼成磁盘路径时, 编码形式的分隔符不会被自动折叠,可以整段绕过目录判断; 用拼接字符串的方式打开文件夹,在部分平台上会被当成命令执行。 现在这些路径都先逐段校验再做包含断言,打开目录改为按参数传递, 登录失败限流也收敛成前后台共用的同一份实现。
后台样式长期靠末尾追加覆盖层换肤,规则越叠越多,也很难判断哪条真正生效。 这一轮把它们摊平成单一样式表,合并重复的变量声明,删除大量被遮蔽的无效规则和零引用的类名与令牌。 改配色之前先让同一份样式连跑几轮自检,确认门禁本身不会误报。
内置模型不再和某一家服务商绑死,而是通过连接标识引用不同的接入配置。 连接信息里的密钥只保存在服务端,后台只以掩码回显, 既不会下发给客户端,也不会混进公开的模型目录里。
报错、任务状态和模型状态现在统一经过同一层脱敏, 不暴露服务端缺了哪一项配置、服务商名称、上游地址或本机路径。 用户看到的是能判断问题的提示,完整原因只写进服务端日志。
先前的活跃统计只能看到“最近一次在线”,无法还原昨天到底有多少人使用。 现在每次心跳会同时记下当天的自然日活跃记录,昨日活跃按这份记录去重统计, 指标卡也统一了尺寸和对齐口径。
分镜总览新增了按素材查镜头:选定元素后可以筛出使用它的镜头,并只看已经出片的那些。 批量出片改为按当前筛选提交,避免误伤没有选中的镜头, 每个镜头卡片也能就地生成或重新生成。
模块拆分留下的包装函数、重复实现和无引用导出,靠人是记不住的。 这一轮在清理的同时补上静态检查与死代码门禁,从真实入口检查不可达模块, 让“旧代码有没有清干净”变成每次提交都会自动回答的问题。
把内置文本、生图与视频能力收拢到同一套网关和任务视图后, 模型配置、任务状态与结果记录不再分散。没有配置的模型会明确提示不可用, 避免调用时才发现链路缺失。
桌面运行时升级到 Electron 44,并补上依赖检查、静态检查、自动测试和构建门禁。 安全更新不能只看功能是否还能启动,还要回到依赖审计与真实打包结果。
macOS x64 安装包改为按目标架构下载运行组件,并声明中文本地化。 Intel 包不再混入 ARM64 运行时,中文系统下原生文件选择框也回到中文。
分镜可以从文本或多个 TXT 批量追加到本集末尾,编号继续顺延, 已有镜头的内容、元素绑定和生成结果保持原位。导入标记也能被记住并恢复自动识别。
上传图片统一做大小与格式归一化,压缩为真正的 PNG,并拒绝超限动图。 共享转换队列避免多张大图同时解码挤占内存。
分镜状态、阶段标签和镜号颜色统一到同一套语义;批量操作按钮保持稳定宽度; 分镜快捷跳转舵轮只保留悬停或键盘聚焦时的展开行为;画布 Agent 的快捷键提示与实际绑定一致。
停笔恢复、光标续写、章节增删、下一卷规划和连续性记忆校正, 把写作从一次生成扩展为一套可以继续、检查和收束的闭环。
选中正文即可进行润色、扩写、压缩、增强冲突和强化对白; 当前章节的硬伤也在正文附近展示,改稿与质检不再分散在来回跳转中。
视频落盘改为流式写入,并补齐断点续传、Range / ETag 校验和空闲超时; 状态查询与文件下载解耦后,长任务不必因为一次网络波动从头再来。
接入高燃分镜和严格写实模板后,项目最大镜头时长仍由项目配置统一决定, 模板不再把镜头固定截断为 15 秒。Windows 与 macOS 原生窗口也继续跟随同一套主题偏好。
视频队列、参考素材暂存、封面共享规则和画布轮询分别收口到独立模块, 让长期维护时的职责边界更清楚,也减少一处修改牵动整条链路的风险。
测试入口现在明确区分两种运行方式:本地模式使用本地账号和独立项目数据;远程模式使用另一套账号与数据目录, 并连接授权和内置模型。两种账号不混用,切换前先关闭应用。本站只记录工程方法,不提供下载、登录或接口入口。
服务条款不再只是一次启动时出现的说明。同意状态会绑定具体版本,只有重大变更才要求重新阅读, 日常登录不会被重复打断。
视频生成的关键不只是一次提交成功,而是任务状态、轮询、重试和镜头绑定都能对应起来。 这一轮补齐了多供应商能力,也把失败恢复的职责收得更清楚。
账号列表补充了状态查询、持久化和更新时间展示,内置模型状态也会跟随账号信息更新, 减少在渠道切换时反复猜测可用性。
旧稿导入和封面风格配置补上了创作链路的两个入口,已有内容不必因为工具切换而重新整理。
授权复验不只用于判断是否可用,也能成为在线、活跃和设备心跳的依据。 在授权后台补齐当前在线、DAU、WAU、MAU 和运行时长后,服务状态终于可以被清楚观察。
人物造型不能只依赖一段文字描述。把服装、服饰和 Logo 参考图纳入生成流程后, 人物设定在连续镜头里更容易保持一致。
Windows 与 macOS 共用同一套业务源码,但运行组件、可执行权限和打包方式并不相同。 把这些差异收口到资源配置和构建流程,才能让日常开发保持稳定。
没有匹配的笔记,换个关键词或主题试试。
按月份归档的版本动态,可以只看某一类改动,也可以直接搜关键词。
已登录状态下,在账户中心填激活码和当前密码就能兑换,试用没到期也能换正式码,成功后直接刷新授权状态,不用重开窗口。退出登录和注销以前是直接销毁窗口,没落盘的剧本和小说改动会丢;现在会先让所有主窗口保存并回执,有分镜还在编辑或保存失败就拒绝退出。另修了一个竞态:后台复验还在路上时退出,复验结果会把刚删掉的登录信息写回,下次启动又自动登录了——现在先锁住授权、等复验结束再删。
上传图片只做格式转换、保留原始分辨率,单张上限 50 MB。长篇的剧本、小说生成常常超过默认超时,现在流式请求放宽到 32 分钟,而且只对这类请求单独设置,不改全局连接配置。画布的编辑面板可以拖宽、提示词框可以拖高,视频时长改成滑块加输入框并吸附到可用档位,在面板里滚动滚轮也不会再误缩放画布。强制移除镜头前会先确认,并说明平台那边可能还在继续生成计费。
新成片的文件名带上集数和镜号,在文件夹里一眼能对上;旧的纯数字文件名照常读取,不做批量改名。随安装包分发的素材原来放在打包归档里,交给外部命令行工具或浏览器上传时读不到,表现为打包版里「活动视频素材」不可用;现在交出去之前会先落成临时文件。镜头卡上「已提交」的占位标题也改成按真实状态显示拉回中、生成中、排队中等。
点过的按钮会一直保留焦点,操作条因此移开鼠标也不消失;现在只在悬停或键盘聚焦时显示。按钮背景本来就不透明,额外的背景模糊只会把身后的深色头发漏成一圈暗边,去掉了。悬停放大保留,它负责盖住图片边缘的亚像素暗缝;图片改为常驻独立图层并严格裁切后,显卡加速下分界处不再闪。
删除一集不再直接清掉,而是连同剧本、分镜、视频、尾帧和成片一起移进回收站,可以在项目首页恢复或永久删除。整个过程持有项目保存锁,媒体文件只做移动、失败就反序回滚;本集还有没结束的任务时拒绝删除。元素图片每次被替换,旧图都会自动留进历史,改名时随图迁移,在元素库、子区域和造型衣橱里都能打开历史版本恢复,恢复前也会先保留当前这张。
小云雀、即梦、LibTV、Neo、UpDream 的视频模型改为从各自的官方目录拉取,不再只认一份写死的白名单;认不出的型号原样保留,预置列表只作兜底,拉取失败或混进了图片模型时保留上一次的列表。新接入的超算 SCNet 视频接口没有幂等键,所以提交不重试、不切换渠道,受理状态不明时直接提示去控制台核实,避免重复扣费。
在原文、剧本、章节原文和分镜正文里选中一个名字,右键就能直接建成人物、群像、场景、道具、特效或妖兽。镜头选择器里的造型和场景区域改为多选,浮层可以拖动,在界面缩放下也不会拖过头。启动时如果界面没能挂载,会先自动重载一次,仍失败就给出「重新加载 / 安全模式 / 打开日志」三个入口,而不是留一块白屏。
恢复流程原来直接跳过已出片的镜头,却没记下它们的任务号。于是这些已完成的任务会落进按正文匹配的兜底,被认到正文相同的另一镜——比如复制出来的镜头——成片就静默落到了别处。现在先把已出片镜头的任务号排除掉,认领判定也收成一处。ComfyUI 预设同时下线了旧工作流,保存过的旧配置在加载时自动迁到新预设。
文本接口报余额不足、资源包耗尽、Key 无效或鉴权失败时,不再在同一个模型上反复重试。元素提取改为流式,中转站直接回普通 JSON 时按非流式解析,不再把空串误判成「这段没有元素」。即梦参数无效的报错会明确提示改用真实的 Session ID。Windows 上窗口被遮挡后再激活会闪一下白,已关掉对应的遮挡计算;主动退出时 5 秒没退完会强制结束。剧本台的保存状态补上了「保存失败 · 查看原因」。
死代码检查加严后,一次清掉了 46 处只被测试调用或彼此引用的代码,其中包括约 600 行从未接上的渠道生命周期。界面上,元素抽屉的顶栏原来写死了深色底,五个浅色主题下仍是一块深色,现在跟随主题色;写小说弹窗在暗色主题下背景透明的问题也一并修好。分镜控制台的切换按钮和顶栏返回按钮改成胶囊圆角。
原来的分集是把每一段重新解码再编码,画面要再压一次,切点也只看时长。现在整条视频只切不转码:切点必须同时满足「落在人声气口里」和「是原片的一个关键帧」,找不到这样的交点就保留整段,而不是为了对齐硬切或退回重编码。多个原文件会先按列表顺序连成一条完整时间线再统一分集,一集可以跨过文件边界;编码或音轨参数不一致时直接拒绝,不偷偷转码。导出前可以预览每集起止,同名文件永不覆盖。
气口识别从「按峰值音量猜一个静音阈值」换成逐帧的 VAD 推理(16k 单声道、512 采样一帧、0.5 进入 / 0.25 退出双阈值滞回),轻声词尾不会被当成停顿,短促的爆破音也不会变成切口。模型随包分发,运行时不联网。代价是原生依赖:onnxruntime-node 在 Intel Mac 上没有可用的二进制,模型缺失时也一样——这两种情况会回退到音量阈值方案,并在分集预览的提示区写明「已改用按音量识别气口」,而不是让整个功能不可用。
新渠道的接口要求请求体加密、响应也加密,所以随包带了一份校验过 sha256 的加密模块,在隔离上下文里跑,不联网、不读文件。登录态不用客户去找 Token:点「读取 Seko 登录态」会起一个只监听本机的 127.0.0.1:8849 桥接页,把按钮拖进收藏夹,在已登录的 Seko 页面点一下,凭证经一次性 challenge 回传并当场验证。模型、比例、时长全部按上游目录动态出,目录为空就报错而不是内置一份预置列表——预置名一旦下线,表现就是「能选、提交才失败」。
待办队列原来只存一份,文件丢了或任务历史被裁掉,任务号就彻底不可见——客户看到的是「重启前还在生成,重启后什么都没有」。现在镜头卡上的任务号本身是第二份持久记录:启动时与进入项目时都会按它重建待办,并保留原提交时间,避免被「同一镜头只认最新提交」的规则误杀。认不出归属(镜头被删、编号重复、任务号被两个镜头占用)时不猜,保留任务并显示「任务绑定异常……请勿重复生成」。
即梦的成片下载原来散在三段轮询里,其中一段看到历史结果里有地址就直接回放,绕过了官方下载策略;CLI 下载失败时又被静默吞掉,卡片显示完成、本地却没有文件。现在统一走一个下载出口:先按官方 CLI 落盘,失败回落历史媒体,两者都没有才报「已生成、下载重试」并带上原因。小云雀也接上了「活动视频素材」开关,和即梦、UpDream、LibTV 一样占一个参考视频名额,默认关闭。
旧版本改名时可能把新 id 写进了旧目录,此后按 id 打不开项目。现在常规路径找不到时会扫描各项目目录里实际存的 id,只有唯一匹配才认,重复时宁可不猜——猜错就是把数据写进别人的项目目录。用回旧名字时也先清掉同名别名,避免形成回环。另一处是旧客户端把一段编码错误写进了任务备注,会原样显示在镜头卡上;现在按码点精确替换成「下载内容不是可读视频」,不做编码嗅探。
回礼领取失败时,错误只写在返回对象里、没有任何地方显示,点下去就像没生效。现在失败原因会直接弹在桌宠旁边。快速跳转面板另有两处:鼠标停在列表上时,滚动会把键盘选中的那一项抢走;用键盘往下选到后面几项时,高亮会跑出可视区。两处都改为按选中项的真实位置滚动,而不是让浏览器自己决定。
整页用 zoom 做界面缩放,而浮层库写的是未缩放的 left/top,浏览器再乘一次缩放,于是位置随缩放档位偏移,箭头也跟着歪。现在只监听浮层与箭头的 style,把四向内边距先除以当前缩放,让浏览器乘回去正好落在锚点上;浮层已经对齐之后再改缩放走另一条规则,不能再除一次。
布局高度写的是 100vh,它会被页面缩放一起乘,缩放 0.9 时壳体只占视口的 90%,底部空出一条。现在根上换成「视口高度 ÷ 缩放」的变量,各处整屏容器统一用它。登录窗的最小化与关闭原来是系统标题栏覆盖层,悬停色跟系统走,做不出「透明底 + 红绿灯」,改由页面自绘,两处窗口按钮共用同一组配色。
舵轮本来该贴在窗口右边,实际却跟着文档一起滚走:一条带 transform 的入场动画落在了工作区外壳上,而 transform 非 none 的元素会成为 position: fixed 后代的定位参照,整条舵轮就被钉在整页高的容器上。另外它是按视口定位的,右侧 10px 又被真正滚动的容器滚动条占着,滑块直接压在圆钮上。现在外壳恢复不带动画,滚动条宽度在运行时量出来写进变量、舵轮让出那一段;静止态只露出 28px,背景改成不透明、去掉投影——半透明时身后卡片的边线会透进来,圆角处还会漏出一条灰弧。
以前没有模型目录时会拿一组环境变量拼出模型,模型没选服务商也会回落到同一组变量。结果是后台显示「未选择服务商」、调用却照样成功,客户看到的是配置已经坏掉、片子却还在出。现在没有目录就是空列表,没选服务商就是不可用,保存时直接拒绝;升级前依赖这些变量的部署,要先把模型迁到「服务商配置」里再重启。
全局焦点样式给按钮和输入框都套了 3px 金色外描边,而输入框本来自带 1px 内描边,鼠标一点就多出一圈黄框。现在外描边只留给按钮与链接。另一个问题是内置文本模型下拉无条件并入了「常见模型建议」,服务器一个内置文本模型都没发布时也列出六个名字,客户选了却调不通——现在内置模式只认服务器目录。
工作区的四个弹窗不做 teleport,在 DOM 里是内容区的直接子节点,被入场动画一并套上;遮罩自己的动画早在打开时就跑完了,关闭过渡等不到它、只能退回计时器,里层先淡出完又把透明度推回 1,于是客户看到「关掉、又整块出现、才消失」。现在入场动画只给视图容器,遮罩交回组件库自己的淡入淡出。
计费方式新增按清晰度分档(视频按清晰度加时长、生图按分辨率)与文本按输入输出 token。分档是精确匹配:客户选了一个没配价格的清晰度会被拒绝并列出可选档位,不会悄悄按别的档位收费。按 token 时先按保守上限预扣、成功后按上游用量多退少补;单价漏填会直接报错,避免一不小心存成免费模型。状态面板同时补上每个模型最近的上游健康与延迟。
后台把内置模型全部取消发布后,客户端设置页与镜头卡仍显示之前选过的模型,全局视频引擎切到内置渠道时下拉里甚至列出的是即梦的模型。前者的根因是「目录已加载」按数组长度判断,而全部下架时目录正好是空数组,被当成「还没加载」;后者是下拉漏了内置分支。现在用独立的「目录已就绪」标记区分两者,空目录会清空旧选择并要求重选,下拉也绑到正确的字段。
任务表、积分账本、上游开销台账、素材与成片暂存原来散在存储根上,现在统一收进 builtin/ 子目录;旧文件在启动时自动搬进去,回滚旧版本仍能读旧位置。同一轮里修掉的客户可见问题包括:生图的在途标记打在扣费之后、超时重发会再扣一次;退款写盘失败被静默吞掉、界面说「已退回」而余额没回;镜头卡只拦「没选模型」,维护中或已下架的模型要点下去才被服务端拒绝;关掉「使用内置模型」后仍拿目录 id 去请求自家 API。
客户端在图片设置里选「服务器内置模型」,界面显示已选中,直到出图才报「请先在图片设置中配置图片模型 API Key」——那本是给通用 API 渠道的提示。根因是服务端另有一份更窄的渠道白名单,加载与保存两条路径都会跑它,认不出的值一律改写成别的渠道、且不报错;而前端那份是齐的,所以界面看起来完全正常。同类的还有视频渠道。现在白名单只有一份,往返读写原样保留,认不出的值也不会再被悄悄换掉。
落盘函数在「项目写回失败 / 取不到项目 / 那一集已被删掉」时是返回失败而不抛错,丢掉返回值的地方照样标完成、摘掉待办,客户看到「已完成」而项目里没有这条视频,且不会再重试。现在两步都要过同一个校验,任一步没成就抛错、留在待办里继续重试,12 处落盘点一并收口。
启动恢复有两份实现,跑着的是旧的那份(带 24 小时截止线、见到视频就跳过),改好的那份零调用者——跨天重启丢任务、重做之后的新任务永久失联、内置渠道的片子拉不回来。现在只保留改好的那一份,并补上真实恢复流程的回归测试。
账号详情新增「缓存占用」区块,分参考素材与成片暂存两组,列出该账号有哪些文件、各多大、是否在保留窗口内、被哪次出片引用过,并可就地清理;只删这个账号的、跳过保留窗口内的,跳过多少如实回报。
模型增加「上游单价(元)」(口径与客户计费方式独立),页面顶部增加「1 积分 = ? 元」;查不出收入或成本时看板显示「—」而不是 0,免得看着像全是利润。上游开销按天另记一份台账,免费模型的开销也留痕。
按「今天赚不赚 → 交付 → 容量 → 需要关注 → 明细」重排:钱当主角、毛利按正负着色,容量带占用条,三条故障信号单独成段(全为零时收成一句绿色提示),明细垫底。
原来的固定总预算必然在某条链路上比真实传输还短(低带宽下会把正常传输判成超时、重发再白烧一遍)。现在每有进展就重新计时、60 秒毫无进展才判死,另留 2 小时兜底;请求体也换成会报告进展的流。
客户端上传前先算内容摘要问一句「这份你已经有吗」,命中就只取一个新签的地址、一个字节都不传;服务端本来就按内容只存一份。判定只认本账号前缀,探测失败一律回落正常上传。顺带把素材改成流式落盘、上传失败自动重试。
素材全局 8GB、单账号 600MB(必须大于单文件上限 512MB,否则一份接近上限的素材永远传不上去);成片暂存全局 20GB、单账号 1GB(超限先删本账号最旧的副本腾地方,并让对应任务回落到上游地址)。
「查询一直失败」不等于「任务跑了太久」,到点时上游很可能其实已经出片。直接退款会落成「钱退了、片子后来也出了」,所以到点先补一次复查,复查通了就按正常结果处理,还是不通才退款。
镜头卡新增纯图标入口,把这次提交带上的参考与成片并排摆出来(打开时现算);失败原因的旁边就是「重新生成视频」按钮;服务端 5xx / 连不上这类「上游大概率没接单」的失败会自动重试一次,参数或模型不对则不重试。
上游并发闸门与状态查询节流(排队会告诉客户「前面还有 N 个任务」)、成片拉回自有盘再下发(上游地址过期也能补)、参考素材取用回执(「传了参考图却没用上」不必等客户肉眼发现)、模型能力声明、失败文案统一三段式(原因 + 积分怎么办 + 下一步),以及运营看板。
素材地址改成上游凭签名的拉取(此前只认本机授权,上游拉不到又不报错,只会按「没有参考图」出片);生图接口真的用上传上来的参考图;任务表与付费幂等键改为落盘,一次重启不再同时造成「任务失联、分已扣不退」与「去重失效、重发再扣一次」。
镜头卡高度不再随滚动变化(去掉会按猜测值占位、进窗出窗就推拉整段列表的写法);视频区改成按项目里真实视频的比例定高,不再写死 16:9 或压上限,左右不再出现黑边。
截帧参考可以从任意镜头截、目标分镜可任选(也允许留空);客户选过的模型即使被上游下架或临时停用,也不再被悄悄换成另一个模型去出片。
试用(含无码注册批准的 2 天)和试用卡期间可以直接换正式码,按剩余时间顺延,不必等现有授权到期;只有本就是长期授权、或顺延撞上时长上限才按「无需重复激活」拒绝,且不消耗激活码。已被后台取消授权的设备仍先提示恢复授权,不让客户白丢一张码。
幂等键改由「内容摘要 + 尝试标识」派生,服务端把在途标记打在扣费之前,同一次请求被投递两次不再扣两次分;客户端轮询上限由 5 分钟改为与上游预算一致的 15 分钟,不再出现「客户端已经放弃、服务端还在生成、分已经扣了」。
任务列表、任务详情和「清空已完成」都只认当前账号;拿到别人的任务编号既看不到也删不掉,越权一律按「不存在」处理,不泄露编号是否存在。
授权凭证整体签名,客户端就地改写用户名会让签名当场失配,界面刚提示「改成功了」,下一次复验就把应用锁上。现在改由服务端按本机设备重算一份凭证随结果下发、客户端整份覆盖;服务端没回凭证时保持原样,等下一次复验自然更新。
这类操作要先取草稿快照、再等模型跑完,回写时改为只写本次真正改动的字段。窗口期内新增的章节不会消失、删除的章节不会复活,同一时间改的其它章节也原样保留。
开场帧的引用与物理文件都按镜号存放,而增删镜头只重命名视频文件、不重编号尾帧目录,位移过的引用会静默指到另一张图。现在能保就保(末尾追加、删除末镜),引用落在受影响区间就整块清空并提示重新设置,不再悄悄用错素材。
即梦 Agent 不再在入队时删掉暂存目录,开场帧与参考图不会丢;Neowow 素材审核失败会在真实轮询路径上自动重新送审并重提一次(同一镜头只做一次);删除章节补上与「删除单集」同等的媒体与待办清理,不再留下孤儿目录和永远不会出结果的记录。
所有询问共用同一个对话框,被 Esc 关掉的那一次不会触发提交,早先留在表单上的监听器会让之后任意一次「确认」把它一起兑现。现在改成单一监听器只认当前这一次询问,回车也明确绑成确认。
安装包里不再包含只属于服务端的本机授权模式模块,打包产物只认包内的更新源配置,并开启 asar 完整性等加固开关;同时补上「提交时校配置、发布前核产物」两道发布门禁。
Electron 默认会为了「浮在全屏窗口之上」把整个应用切换成后台类型,程序坞图标与应用菜单栏一起消失且不会恢复。常驻的桌宠、伙伴窗口现在带上跳过类型转换的标记,应用始终是前台类型。
由授权后台发布、随授权复验下发(保底约 2 分钟可见);支持多条公告、生效时间段与跳转链接;文案放不下时从右侧匀速滚过、放得下时居中显示,之后自动收起,客户也可随时关闭。公告与租约分开签名,断网时从本地缓存验签回放。
只关「启用」的模型不再从客户端整个消失,而是留在下拉里标为不可选并说明正在维护;能不能调用仍由服务端统一拦住。
与「解绑」分开:解绑保留该设备剩余时长、供换机后领回;删除连同权益一起作废,用于机器彻底不再使用或当初绑错。单台设备动作统一为「调整时长 / 取消授权 / 解绑 / 删除」四个行内按钮。
数据不再住在安装目录里,覆盖升级程序目录不会波及配置、项目素材与本机授权;旧目录启动时自动迁移一次并原样保留作恢复副本,便携版数据落在程序旁边。
长文案在后台可以直接换行书写;每条公告各自选择「按公告版本记忆」还是「仅本次运行隐藏」,改一条公告不会再让客户已经关掉的其他公告一起弹回来。
项目分片损坏时改从最新快照自愈,不再读成空项目;辅助窗口崩溃后自动重载;元素与场景提取遇到一次瞬时 5xx 不再丢掉整段。
更新装上却没有生效时直接说明原因,不再反复提供同一个更新让用户重复点击。
长剧本也能一次绑定;远端任务优先按任务 ID 认回镜头,文本匹配退为兜底,不在分数接近的候选之间猜测。
客户端保存载荷会剥掉绑定字段,合并后再按镜号把服务端那一份盖回去,任务与镜头不会失联。
开场帧支持多张参考图,并接入后续的生成链路。
批量出片前先确认,失败时逐条列出是哪个元素、什么原因,不再只给一个总数。
硬件发生变化时按加权比例与高权信号重新认出同一台机器,而不是一律要求重新激活。
主板标识只取序列号,命中比例上调,避免同型号的另一台机器被误判成同一台。
把传输层原因展开成中文并脱敏,能看到是超时、连不上还是被中断。
付费端点带幂等键去重并回放上一次结果,出口同时强制 HTTPS。
可以直接导入 API 格式工作流,内置模型目录接口改为按 ETag 缓存,轮询不再重复拉整包目录。
两个重量级视图延后到首次进入时动态加载,首屏少下载约 76 KB。
每台设备独立计时,账号级时长只作为新账号的默认值,一台设备续期不再影响另一台。
单台取消 / 恢复、单台调整时长与解绑各自独立,不再出现一次操作改动两个范围。
被移除设备当时仍有效的时长会记入待继承权益,换机时按到期时间依次领回,不会凭空增减。
每台绑定设备生成 6 位短 ID,用户可以念出本机标识,后台也能按它搜索。
输入框被清空后确认会把时长瞬间清零、字段缺失时谎报「0 天」、把设备聚合值当成默认值展示。
修复路径穿越、命令注入与后台登录缺少失败限流的问题,审计类接口共用同一份限流实现。
授权后台改为蓝紫白毛玻璃主题,样式合并为单一样式表,删除被遮蔽规则与零引用声明。
模型改为通过连接标识引用服务商,密钥只保存在服务端并以掩码回显,不再与单一上游绑定。
客户端看到的报错、任务状态与模型状态不再暴露服务端配置、服务商名称、上游地址和本机路径。
心跳时记录自然日活跃,昨日活跃按记录去重统计,并统一指标卡尺寸与对齐口径。
可按素材反查使用它的镜头并筛选出片,批量出片按当前筛选提交,镜头卡片可就地生成。
清理不可达模块、重复实现与无引用导出,并把静态检查纳入持续集成门禁。
补齐内置文本、生图与任务视图,升级桌面运行时,并加入持续集成质量门禁。
x64 包按目标架构打包,声明中文本地化,中文系统下原生文件选择框显示正确。
修正画布 Agent 快捷键提示,并让分镜跳转舵轮在鼠标移开后正常收回。
多 TXT 或粘贴内容可追加到本集末尾,编号顺延;上传图片统一大小和格式。
对齐阶段标签、镜号状态和元素标签样式,修复评审标签进场缩放与消息盒标题字重。
补齐第三方组件许可与项目说明,让公开记录和源码边界保持一致。
补齐停笔恢复、光标续写、章节管理、下一卷规划、连续性记忆校正和直接成稿模式。
正文选中态可直接触发常用改稿动作,当前章节硬伤在正文附近集中展示。
新增帧精确切割、流式落盘、断点续传、Range / ETag 校验和空闲超时。
原生窗口保留“跟随系统”偏好,并接入高燃分镜、严格写实两套模板。
收口 Agent 队列、参考素材、封面共享规则和画布视频单飞保护,补充领域回归测试。
整理两种测试方式的适用范围、账号边界和数据目录,切换前先关闭应用,避免本地与远程状态混用。
新增“关于与法律信息”区域,首次使用明确同意;发生重大变更时重新确认,普通登录不会重复弹出。
模型状态会跟随后台信息更新;授权服务异常时返回明确的暂不可用提示,不再误报为无效数据。
账号列表可直接查看可用状态与更新时间,查询结果会持久化,方便在生成前核对渠道账号。
补齐视频渠道能力,完善提交、轮询、失败恢复和镜头任务绑定的可靠性。
让已有小说内容更容易进入工作台,并为封面生成保留更明确的风格选择。
聊天消息改为独立渲染区域,并继续拆分 Agent 与剧本保存逻辑,降低长任务对界面的影响。
补充在线、活跃、设备心跳和运行时长统计,让授权后台的运行状态更容易核对。
同步项目阶段、开发记录和公开说明,并在页脚补充 ICP 与公安备案信息。
完善服饰、Logo 参考图与人物造型生成流程,并继续对齐跨平台资源执行。
没有匹配的更新记录,换个关键词或类型试试。
ABOUT THIS SITE
本站是个人非经营性网站,只用于记录个人项目、学习过程和技术内容。 页面不提供在线业务功能,不收集访客提交的数据,也不展示用户项目内容。 网站备案与公安联网备案信息统一展示在页脚。