• _load_jobs() 里 status=='running' 的任务之前直接判 failed("无法恢复")。实测踩坑:
    等当前任务跑完再重启,下一条排队任务在 worker 零延迟捞起的瞬间被判死——请求参数本身
    完好,跟手动点"重跑"没区别,没理由不能自动重试。改成退回 queued 重新跑,
    Job.restart_recoveries 封顶 2 次,避免毒药请求无限重试拖垮队列。
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SBpJTe8WfuYkKwjMaRSDg6
    yibo authored
     
    Browse File »
  • Q.qsize() 是底层 PriorityQueue 的原始元素数,取消一条排队中的任务只是把
    JOBS 里的 status 标成 cancelled,不会把它从队列摘除,worker 要等真正
    Q.get() 到它才跳过丢弃。堆量取消场景下 queued 数字会明显偏高(比如
    "排队 253")。改成跟 running 同口径,直接数 JOBS 里 status=='queued' 的
    条目。
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01SBpJTe8WfuYkKwjMaRSDg6
    yibo authored
     
    Browse File »

  • 排查任务时经常要么去问 sqlite 里存的原始请求参数,要么去查 ComfyUI 自己的 /history
    拿实际发给模型的完整 workflow graph——两者详情页都没有,只能手动 SSH 上去查。
    
    - raylight/server.py 加 GET /v1/videos/{jid}/comfy_history,透传 ComfyUI 的
      /history/{prompt_id}(这份数据在 ComfyUI 进程内存里,没有落盘,ComfyUI 重启后
      查不到,接口会给出明确提示而不是裸错误)。
    - h3-console/server.py 加对应代理。
    - 详情页底部加两个默认折叠的区块:原始参数(req 原样 JSON,纯前端渲染,不用额外
      请求)、ComfyUI History(懒加载,点开才去问后端,避免 queued/running 状态每次
      轮询详情都多打一次 ComfyUI)。
    - 顺带把生成结果视频从页面底部挪到状态/操作按钮那一行下面,不用再滚到底部看结果。
    
    已在服务器重启验证:接口对已经清空 history 的任务(ComfyUI 重启后)正确返回明确
    错误而不是裸 500;重启期间 14 条排队任务原样保留。
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01PA1AWh8e7wJ3vyhKBAEQux
    yibo authored
     
    Browse File »
  • /v1/models 之前硬编码3个预设,模型文件名对应的是已删除的 api.py/gateway.py 那套旧
    架构(minimax-h3-fl2va-nf4.safetensors 等),跟 raylight 现在实际加载的模型
    (minimax_h3_fl2va_pruned_int8_convrot.safetensors 等)完全对不上,档位也只有3个,
    跟前端下拉框实际支持的8个分辨率(RESOLUTION_CEILINGS)不一致——外部调这个接口查
    "支持哪几档"拿到的是错的过期数据。
    
    raylight/server.py 加 GET /v1/resolutions,返回 RESOLUTION_CEILINGS 的实时内容;
    h3-console 的 /v1/models 改成实时调这个接口拼 presets,顺带把 partitions 里的模型
    文件名也换成当前实际使用的。
    
    已在服务器上重启验证:/v1/resolutions 返回全部8档,h3-console /v1/models 端到端
    拿到一致数据;重启过程中17条排队任务全部保留(用到了上一次改的排队恢复逻辑)。
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01PA1AWh8e7wJ3vyhKBAEQux
    yibo authored
     
    Browse File »
  • 任务 f2de718e1e30(参考视频文件名带中文)秒失败:h3-console 上传时的文件名清洗用了
    Python 3 默认的 Unicode \w,中文被当合法字符保留,资源 URL 里带着原始中文传给
    urllib.request.urlopen,http.client 构造请求行要求纯 ASCII 直接炸了。改成请求前对
    URL 的 path 部分 quote 一遍。
    
    排查时发现 raylight 重启会把所有排队中的任务直接标记 cancelled(内存队列重启即清空,
    sqlite 里的 queued 记录没有任何路径被重新入队)。改成 Job 加 queue_seq、Q 换成
    PriorityQueue,重启时排队任务原样保留、按序重新入队;顺带加了 POST
    /v1/videos/{jid}/prioritize 插队接口和对应的 h3-console 代理 + 前端"优先插队"按钮。
    
    另外把 8月24日提交过、但实际从未部署到服务器的 ComfyUI 存活探测(_comfyui_alive)
    重新加回,并解决了 raylight/server.py 和 raylight/scripts/server.py 长期分叉的问题。
    
    已在服务器上验证:重启后 17 条排队任务原样保留、顺序不变;插队接口直接测试和通过
    console 代理都验证通过;/health 的 comfy_alive 检查确认生效。
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    Claude-Session: https://claude.ai/code/session_01PA1AWh8e7wJ3vyhKBAEQux
    yibo authored
     
    Browse File »

  • /health 之前只读 STATE["model"](worker()线程启动时设一次"ready",之后再不更新),
    一次OOM把ComfyUI(8188)进程本身搞崩溃退出后,server.py这层壳没死,/health继续骗人报
    ready近20分钟,期间提交的任务全部秒失败(ConnectError)才被人工发现。改成每次/health都
    真的探测一次8188(GET /system_stats,2秒超时,跟start.sh自己的就绪检测用同一个端点)。
    不解决actor崩溃不自愈本身(上游代码问题),只是让崩溃能被更快发现。
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    yibo authored
     
    Browse File »