logo
0
0
WeChat Login

LTX Desktop on CNB

在 CNB H20 GPU 桌面空间里运行官方 LTX Desktop Linux 版,并把程序、Python runtime 和最小可用模型集预置进工作区镜像。

这个仓库现在分成两条明确的链路:

  • 保留可直接使用的 GPU 桌面、SSH、noVNC 入口
  • 通过多次手动触发云原生构建,逐层构建并推送 workspace-fat 镜像,开发空间直接使用这份预制镜像
  • 为了避开 repo 级 Docker 对象存储限制,runtime、LTX-2.3 和 final 镜像分别落到独立的 cncoka 仓库

适用场景

  • 你想在 CNB 社区版 H20 GPU 空间里直接试 LTX Desktop
  • 你希望新开空间后几乎不用再等待 .deb、runtime、模型下载
  • 你希望把输入素材和导出结果放到 /workspace 做持久化

当前策略

  • 运行器:固定 cnb:arch:amd64:gpu:H20
  • 桌面程序:官方 LTX Desktop 1.0.2
  • 工作区镜像:docker.cnb.cool/cncoka/ltx-desktop-cnb-final/workspace-fat:latest
  • 中间层镜像:
    • docker.cnb.cool/cncoka/ltx-desktop-cnb-runtime/workspace-runtime:latest
    • docker.cnb.cool/cncoka/ltx-desktop-cnb-ltx23/workspace-ltx23:latest
  • 镜像内置资源:
    • LTX Desktop 安装包完成安装
    • Python runtime 已展开
    • LTX-2.3 distilled + x2 upscaler
    • Gemma 3 12B text encoder
    • 一个仅用于放行首启界面的 Z-Image-Turbo 轻量占位目录
    • 首次启动时会自动修补官方 GUI 的 API-only 弹窗竞态,避免真人点击时被错误拦到填 API key
  • 应用数据根目录:/opt/ltx-desktop-cnb/data
  • 持久化输出:自动链接到 /workspace/LTXDesktop/outputs
  • 持久化素材目录:/workspace/LTXDesktop/imports

这样做的目的很直接:

  • 不再把几十 GB 的模型和 4GB 级别的 runtime 放在启动阶段临时下载
  • 继续把导出视频和输入素材放到 /workspace,避免结果丢失
  • 让“新开空间就能进桌面直接生成视频”成为默认路径

使用方式

  1. 打开这个仓库的云原生开发空间。
  2. 等待桌面启动完成,默认打开 10002 端口。
  3. 只要 workspace-fat:latest 已由手动镜像构建成功,新空间就会直接拉这份镜像。
  4. 初始化阶段只做桌面启动器、VNC/noVNC 轻量配置和输出目录这类轻量动作,不再阻塞式下载 .deb、runtime 和模型。
  5. 进入桌面后点击 LTX Desktop (CNB),默认会先把运行目录与镜像内置 Python runtime / 模型对齐,并预写首启状态;视频工作流会额外放一个轻量 Z-Image-Turbo 占位目录,尽量直接跳过许可证和模型目录初始化页面。
  6. 生成结果默认会出现在 /workspace/LTXDesktop/outputs

私有空间默认把 noVNC/VNC 控制台改成免密码,并直接使用自动连接页面;同时会给 websockify 打开心跳,尽量避免浏览器空闲后被网关断开。若连接真的掉了,重新打开同一个端口也会自动重连当前桌面。若你确实想恢复密码认证,可以在启动前显式设置 VNC_AUTH_MODE=vncauth,并配合 VNC_PASSWORD 使用。

如果你刚更新过仓库脚本,但还没手动重跑一次镜像构建,工作区仍会继续使用上一次成功构建的镜像版本。

如果桌面图标没有正常启动,也可以在终端里手动执行同一条“先预热、再启动”的入口:

/workspace/scripts/open-ltx-desktop.sh

如果想重新安装官方包:

sudo bash /workspace/scripts/install-ltx-desktop.sh

如果想手动重新预热应用运行时:

bash /workspace/scripts/prewarm-ltx-desktop.sh

如果你想在已经开好的空间里手动重拉一次 CNB 模型仓的最小模型集,可以执行:

bash /workspace/scripts/fetch-cnb-fast-models.sh

然后跑一条最小 smoke test:

bash /workspace/scripts/generate-smoke-test.sh

这套预拉逻辑当前默认会:

  • https://cnb.cool/ai-models/Lightricks/LTX-2.3distilled checkpoint + x2 upscaler
  • https://cnb.cool/ai-models/google/gemma-3-12b-it 拉本地 text encoder
  • 把模型接到 LTX Desktop 默认 models/ 目录
  • 生成一条 540p / 8fps / 9 帧 的小视频到 /workspace/LTXDesktop/outputs

镜像构建

现在不再用“一条流水线串完全部镜像”的方式,而是拆成 3 次手动构建:

  1. runtime.docker/workspace-runtime.dockerfile 直接从更轻的 nvidia/cuda:12.6.2-cudnn-runtime-ubuntu24.04 构建最小桌面底座,只补 openbox + tigervnc + noVNC + websockify 这类运行 LTX Desktop 必需组件,并在其上安装 LTX Desktop + Python runtime,产出 cncoka/ltx-desktop-cnb-runtime 里的 workspace-runtime:latest
  2. ltx23.docker/workspace-base.dockerfile 叠上 LTX-2.3 distilled + x2 upscaler,产出 cncoka/ltx-desktop-cnb-ltx23 里的 workspace-ltx23:latest
  3. final.docker/workspace-fat.dockerfile 再叠 Gemma 3 12B,生成并推送 cncoka/ltx-desktop-cnb-final 里的 workspace-fat:latest

镜像里把大资源拆成了 3 个可单独 push 的镜像层:

  • LTX Desktop 程序 + Python runtime
  • LTX-2.3 distilled + x2 upscaler
  • Gemma 3 12B

这次不再继承 desktop:main,也不再依赖 CNB 预装桌面镜像;而是直接从更轻的 CUDA runtime 底座补最小桌面组件,避免上游桌面基底自身就把 Docker 制品推送体积拉得过大。 这样做是为了同时避开 CNB Docker registry 64 layers 限制、desktop:main 继承链过重导致的推送失败,以及单个构建总时长约 1h 的执行上限。 另外 docker build / docker push 外层还包了一层心跳脚本,避免在 exporting layers 这类长时间静默阶段被 CNB 以“10 分钟无输出”强杀。

推荐的手动构建顺序:

pwsh ./scripts/ensure-cnb-image-repos.ps1

然后执行:

pwsh ./scripts/start-cnb-image-build.ps1 -Target runtime pwsh ./scripts/start-cnb-image-build.ps1 -Target ltx23 pwsh ./scripts/start-cnb-image-build.ps1 -Target final

如果你确认某个旧镜像包可以先删再重建,可以加 -PurgePackage

pwsh ./scripts/start-cnb-image-build.ps1 -Target ltx23 -PurgePackage

注意:

  • runtime 成功后,后续 ltx23 才能正常构建
  • ltx23 成功后,后续 final 才能正常构建
  • 由于 Docker 对象存储更像 repo 级限制,不建议把 runtime、模型层和最终镜像继续堆在同一个源码仓里
  • 只有当替代镜像已构建成功且 workspace 不再依赖旧 tag 时,才删除对应镜像仓里的旧 tag

存储说明

  • /workspace/LTXDesktop/imports 放你想长期保留的输入素材
  • /workspace/LTXDesktop/outputs 放生成结果
  • /opt/ltx-desktop-cnb/data 镜像内置的应用数据、Python runtime、模型和日志
  • /opt/ltx-desktop-cnb/fetch 镜像内置的模型原始落盘目录

LTX Desktop 上游默认会把 modelsoutputs 等目录都放在应用数据目录里。这个仓库会继续把 outputs 单独软链到 /workspace,其余大文件留在镜像内置目录。

可选自定义

  • LTX_DESKTOP_VERSION 默认 1.0.2
  • LTX_DESKTOP_DEB_NAME 覆盖安装包文件名,默认 LTX-Desktop-amd64.deb
  • LTX_DESKTOP_REPO_PACKAGE_DIR 覆盖代码仓内置 .deb 包目录,默认 /workspace/vendor/ltx-desktop/v${LTX_DESKTOP_VERSION}
  • LTX_DESKTOP_DATA_HOME 覆盖应用数据根目录;镜像版默认 /opt/ltx-desktop-cnb/data
  • LTX_DESKTOP_RUN_AS userroot,默认 user
  • LTX_DESKTOP_PREFETCH_MODELS 是否在初始化阶段阻塞式预拉 CNB 模型仓,镜像版默认 0
  • VNC_AUTH_MODE 控制桌面认证方式,默认 none;设置成 vncauth 时恢复 VNC 密码认证
  • VNC_PASSWORD 仅当 VNC_AUTH_MODE=vncauth 时生效,默认 123qwe=
  • LTX_CNB_FETCH_ROOT 从 CNB 模型仓下载后的落盘目录,镜像版默认 /opt/ltx-desktop-cnb/fetch
  • LTX_CNB_FETCH_TARGETS 控制 fetch-cnb-fast-models.sh 只拉 ltx23、只拉 gemma 或两者都拉,默认 ltx23,gemma
  • LTX_APP_MODELS_DIR 覆盖 LTX Desktop 的模型目录,默认 ${LTX_APP_DATA_DIR}/models
  • LTX_SMOKE_PROMPT 覆盖 smoke test 的提示词
  • LTX_DESKTOP_DEB_URLS 安装 .deb 时尝试的下载地址列表,空格分隔;仅在代码仓里没有内置安装包时才会走这里的兜底地址
  • LTX_DESKTOP_RELEASE_BASE_URLS 预热 Python runtime 时尝试的 release 基础地址列表,空格分隔;镜像构建时通常不会走到这里,主要保留给手动恢复场景
  • LTX_DESKTOP_PYTHON_URLS 预热 Python runtime 的直接归档地址列表,主要用于兼容旧版本;默认留空

排障

上游项目

About

Run LTX Desktop on CNB GPU desktop workspaces

Language
Shell73.7%
Dockerfile12.2%
Others14.1%