Skip to content
Open

gg #25

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
e5ecc9a
Add RTX PRO 6000 RunPod deployment
samuellucky2424-afk Aug 16, 2026
0a2b481
Add manual RunPod container build workflow
samuellucky2424-afk Aug 16, 2026
f32133f
Add H200 RunPod container build
samuellucky2424-afk Aug 16, 2026
becaa73
Add H200 container build workflow
samuellucky2424-afk Aug 16, 2026
c171b1a
Reduce H200 runtime image size
samuellucky2424-afk Aug 16, 2026
4caeccd
Add runtime compiler for Torch Inductor
samuellucky2424-afk Aug 16, 2026
2e690ac
Fix RunPod initializing health status
samuellucky2424-afk Aug 16, 2026
561db99
Skip VAE autotune when serverless compile is disabled
samuellucky2424-afk Aug 16, 2026
9058d6b
Disable VAE compilation in H200 serverless image
samuellucky2424-afk Aug 16, 2026
b2b3aea
Build H200 repair image on branch updates
samuellucky2424-afk Aug 16, 2026
3c10e73
Fix H200 FP8 CUTLASS target to sm_90a
samuellucky2424-afk Aug 16, 2026
64973d1
Fix VAE attention fallback on H200
samuellucky2424-afk Aug 16, 2026
f199c31
Build H200 image for VAE attention changes
samuellucky2424-afk Aug 16, 2026
9ca2543
Fix RunPod connection lifecycle and realtime proxy
samuellucky2424-afk Aug 16, 2026
fbf5343
Fix bounded RunPod connection warm-up
samuellucky2424-afk Aug 17, 2026
eca57f9
Handle proxy compression and Windows resets
samuellucky2424-afk Aug 17, 2026
398ad2b
Document RunPod connection safeguards
samuellucky2424-afk Aug 17, 2026
68215a5
Test RunPod connection safeguards
samuellucky2424-afk Aug 17, 2026
f0dcb82
Sync upstream and harden H200 launch flow
samuellucky2424-afk Aug 17, 2026
3e586e9
Launch-ready RunPod H200 image and connection flow (#2)
samuellucky2424-afk Aug 17, 2026
8d1df41
Optimize live-only streaming for weak networks
samuellucky2424-afk Aug 17, 2026
7b143dc
Trigger verified H200 image build
samuellucky2424-afk Aug 17, 2026
6c08352
Report H200 container build status
samuellucky2424-afk Aug 17, 2026
53d5882
Optimize live-only streaming for weak networks (#3)
samuellucky2424-afk Aug 17, 2026
fd21f4d
Remove fragile GitHub status reporting
samuellucky2424-afk Aug 17, 2026
9c5e87f
Prevent browser codec probes from locking startup
samuellucky2424-afk Aug 17, 2026
71e68e9
Add disabled-send-button regression coverage
samuellucky2424-afk Aug 17, 2026
89d094c
Tune live streaming for 20 FPS low latency
samuellucky2424-afk Aug 17, 2026
e340488
Tune live streaming for 20 FPS low latency (#6)
samuellucky2424-afk Aug 17, 2026
89001e8
Enable persistent compiled VAE on RunPod H200
samuellucky2424-afk Aug 17, 2026
4fc5ae0
Enable persistent compiled VAE for lower H200 latency (#7)
samuellucky2424-afk Aug 17, 2026
168b47b
Allow compiled pipeline warmup to finish
samuellucky2424-afk Aug 17, 2026
2debc56
Allow first compiled pipeline warmup to finish (#8)
samuellucky2424-afk Aug 17, 2026
2d0d27b
Serialize compiled VAE calls across streaming threads
samuellucky2424-afk Aug 17, 2026
c161943
Prevent compiled VAE races across streaming threads (#9)
samuellucky2424-afk Aug 17, 2026
317664d
Recover live streams from websocket stalls
samuellucky2424-afk Aug 17, 2026
590bb82
Recover live streaming after transient WebSocket stalls (#10)
samuellucky2424-afk Aug 18, 2026
8d868b4
Keep live streams pinned to one RunPod worker (#11)
samuellucky2424-afk Aug 18, 2026
9beab8c
Unblock the RunPod WebSocket handshake (#12)
samuellucky2424-afk Aug 18, 2026
eb179bb
Stabilize reference-person switching over WebSocket (#13)
samuellucky2424-afk Aug 18, 2026
3a3e31d
Verify and pin the upgraded RV2V checkpoint (#14)
samuellucky2424-afk Aug 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
.git
.github
.vscode
.idea

__pycache__
*.pyc
*.pyo
*.log

.venv
venv
env

deploy/deps
deploy/tmp
deploy/recordings

*.pth
*.pt
*.safetensors
*.onnx
76 changes: 76 additions & 0 deletions .github/workflows/build-runpod-h200.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Build RunPod H200 container image

on:
workflow_dispatch:
push:
branches:
- main
- "agent/**"
paths:
- .dockerignore
- .github/workflows/build-runpod-h200.yml
- Dockerfile.h200
- deploy/**
- runpod/**

permissions:
contents: read
packages: write

concurrency:
group: runpod-h200-image-${{ github.ref }}
cancel-in-progress: true

env:
REGISTRY: ghcr.io
IMAGE_NAME: samuellucky2424-afk/joyai-video-edit

jobs:
build-and-push:
name: Build and publish H200 image
runs-on: ubuntu-24.04
timeout-minutes: 330

steps:
- name: Free disk space for the CUDA image
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be
with:
tool-cache: false
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: true
swap-storage: false

- name: Check out the repository
uses: actions/checkout@v6

- name: Log in to GitHub Container Registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and publish the H200 container image
id: build
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
file: ./Dockerfile.h200
platforms: linux/amd64
push: true
provenance: false
build-args: |
MAX_JOBS=2
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:runpod-h200
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:h200-sha-${{ github.sha }}
labels: |
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.description=JoyAI Video Edit for RunPod H200

- name: Show immutable deployment reference
run: echo "${REGISTRY}/${IMAGE_NAME}@${{ steps.build.outputs.digest }}"
65 changes: 65 additions & 0 deletions .github/workflows/build-runpod-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Build RunPod container image

on:
workflow_dispatch:

permissions:
contents: read
packages: write

concurrency:
group: runpod-image-${{ github.ref }}
cancel-in-progress: false

env:
REGISTRY: ghcr.io
IMAGE_NAME: samuellucky2424-afk/joyai-video-edit

jobs:
build-and-push:
name: Build and publish RTX PRO 6000 image
runs-on: ubuntu-24.04
timeout-minutes: 330

steps:
- name: Free disk space for the CUDA image
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be
with:
tool-cache: false
android: true
dotnet: true
haskell: true
large-packages: true
docker-images: true
swap-storage: false

- name: Check out the RunPod branch
uses: actions/checkout@v6

- name: Log in to GitHub Container Registry
uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and publish the container image
id: build
uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
with:
context: .
file: ./Dockerfile
platforms: linux/amd64
push: true
build-args: |
MAX_JOBS=2
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:runpod-rtx-pro-6000
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:sha-${{ github.sha }}
labels: |
org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
org.opencontainers.image.revision=${{ github.sha }}
org.opencontainers.image.description=JoyAI Video Edit for RunPod RTX PRO 6000

- name: Show immutable deployment reference
run: echo "${REGISTRY}/${IMAGE_NAME}@${{ steps.build.outputs.digest }}"
80 changes: 80 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# syntax=docker/dockerfile:1.7

FROM nvidia/cuda:12.8.1-devel-ubuntu22.04

ARG DEBIAN_FRONTEND=noninteractive
ARG MAX_JOBS=8

ENV PYTHONUNBUFFERED=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
PIP_NO_CACHE_DIR=1 \
CUDA_HOME=/usr/local/cuda \
TORCH_CUDA_ARCH_LIST=12.0 \
JOYOMNI_OPS_CUDA_ARCHS=120a \
MAX_JOBS=${MAX_JOBS}

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
ca-certificates \
curl \
ffmpeg \
git \
libglib2.0-0 \
libgl1 \
ninja-build \
python3 \
python3-dev \
python3-pip \
python3-venv \
python-is-python3 \
&& rm -rf /var/lib/apt/lists/* \
&& python3 -m pip install --upgrade pip setuptools wheel

WORKDIR /opt/joyai

COPY deploy/requirements.txt /tmp/requirements.txt

RUN python3 -m pip install -r /tmp/requirements.txt

# Install patched SageAttention for RTX PRO 6000 Blackwell.
COPY deploy/sageattention-cudagraph-stream.patch /tmp/sageattention.patch

RUN git clone https://github.com/thu-ml/SageAttention.git /tmp/SageAttention \
&& git -C /tmp/SageAttention checkout d1a57a546c3d395b1ffcbeecc66d81db76f3b4b5 \
&& git -C /tmp/SageAttention apply /tmp/sageattention.patch \
&& cd /tmp/SageAttention \
&& EXT_PARALLEL=4 NVCC_APPEND_FLAGS="--threads 8" python3 setup.py install \
&& rm -rf /tmp/SageAttention

# Build the repository's original FP8 CUDA operations.
COPY deploy/joyomni_ops /opt/joyai/deploy/joyomni_ops

RUN git clone https://github.com/NVIDIA/cutlass.git /tmp/cutlass \
&& git -C /tmp/cutlass checkout dcf215af \
&& JOYOMNI_OPS_CUTLASS_DIR=/tmp/cutlass \
python3 -m pip install --no-build-isolation /opt/joyai/deploy/joyomni_ops \
&& rm -rf /tmp/cutlass /root/.cache/pip

COPY . /opt/joyai

RUN chmod +x /opt/joyai/deploy/run_server.sh \
&& mkdir -p /runpod-volume/joyai \
&& mkdir -p /tmp/joyomni-recordings

ENV JOYOMNI_DEVICE=cuda:0 \
JOYOMNI_HOST=0.0.0.0 \
JOYOMNI_PORT=8080 \
JOYOMNI_CKPT_ROOT=/runpod-volume/joyai/checkpoints \
JOYOMNI_WIDTH=840 \
JOYOMNI_HEIGHT=480 \
JOYOMNI_FPS=24 \
JOYOMNI_FP8_IMG=1 \
JOYOMNI_FP8_TXT=1 \
JOYOMNI_CUDA_GRAPH=1 \
JOYOMNI_SAGE_ATTN=1 \
JOYOMNI_TXT_PARALLEL=1 \
JOYOMNI_RECORD_DIR=/tmp/joyomni-recordings

EXPOSE 8080 8081

CMD ["python3", "/opt/joyai/runpod/start.py"]
119 changes: 119 additions & 0 deletions Dockerfile.h200
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# syntax=docker/dockerfile:1.7

ARG PYTORCH_IMAGE_VERSION=2.9.1-cuda12.8-cudnn9

# Compile the Hopper-specific CUDA extensions in a development image. Nothing
# from this stage is shipped except the two finished Python wheels.
FROM pytorch/pytorch:${PYTORCH_IMAGE_VERSION}-devel AS extensions

ARG DEBIAN_FRONTEND=noninteractive
ARG MAX_JOBS=8

ENV PIP_DISABLE_PIP_VERSION_CHECK=1 \
PIP_NO_CACHE_DIR=1 \
CUDA_HOME=/usr/local/cuda \
TORCH_CUDA_ARCH_LIST=9.0 \
JOYOMNI_OPS_CUDA_ARCHS=90a \
MAX_JOBS=${MAX_JOBS}

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
ca-certificates \
git \
ninja-build \
&& rm -rf /var/lib/apt/lists/* \
&& python -m pip install --upgrade pip setuptools wheel

WORKDIR /opt/joyai
RUN mkdir -p /wheels

# SageAttention supports Hopper GPUs. Compile its CUDA extension for H200
# (sm_90) and keep only the resulting wheel.
COPY deploy/sageattention-cudagraph-stream.patch /tmp/sageattention.patch

RUN git clone https://github.com/thu-ml/SageAttention.git /tmp/SageAttention \
&& git -C /tmp/SageAttention checkout d1a57a546c3d395b1ffcbeecc66d81db76f3b4b5 \
&& git -C /tmp/SageAttention apply /tmp/sageattention.patch \
&& cd /tmp/SageAttention \
&& EXT_PARALLEL=4 NVCC_APPEND_FLAGS="--threads 8" \
python setup.py bdist_wheel --dist-dir /wheels \
&& rm -rf /tmp/SageAttention

# Build JoyAI's FP8 CUDA operations for Hopper (sm_90a) as a wheel.
# CUTLASS WGMMA instructions are architecture-accelerated and abort at runtime
# when the extension is compiled only for the generic sm_90 target.
COPY deploy/joyomni_ops /opt/joyai/deploy/joyomni_ops

RUN git clone https://github.com/NVIDIA/cutlass.git /tmp/cutlass \
&& git -C /tmp/cutlass checkout dcf215af \
&& JOYOMNI_OPS_CUTLASS_DIR=/tmp/cutlass \
python -m pip wheel --no-build-isolation --no-deps \
--wheel-dir /wheels /opt/joyai/deploy/joyomni_ops \
&& rm -rf /tmp/cutlass /root/.cache/pip


# The final image already contains CUDA 12.8, cuDNN 9, PyTorch 2.9.1, and
# torchvision. Keep the small host compiler toolchain as an escape hatch for
# deployments that explicitly re-enable Torch Inductor VAE compilation.
# CUDA extensions and the full CUDA development toolchain stay in the builder.
FROM pytorch/pytorch:${PYTORCH_IMAGE_VERSION}-runtime

ARG DEBIAN_FRONTEND=noninteractive

ENV PYTHONUNBUFFERED=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
PIP_NO_CACHE_DIR=1 \
CC=gcc \
CXX=g++

RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
ca-certificates \
ffmpeg \
libglib2.0-0 \
libgl1 \
libgomp1 \
&& rm -rf /var/lib/apt/lists/*

WORKDIR /opt/joyai

COPY deploy/requirements-h200-runtime.txt /tmp/requirements.txt
RUN python -m pip install -r /tmp/requirements.txt \
&& rm -f /tmp/requirements.txt

COPY --from=extensions /wheels /tmp/wheels
RUN python -m pip install --no-deps /tmp/wheels/*.whl \
&& rm -rf /tmp/wheels

COPY . /opt/joyai

RUN chmod +x /opt/joyai/deploy/run_server.sh \
&& mkdir -p /runpod-volume/joyai

ENV JOYOMNI_DEVICE=cuda:0 \
JOYOMNI_HOST=0.0.0.0 \
JOYOMNI_PORT=8080 \
JOYOMNI_CKPT_ROOT=/runpod-volume/joyai/checkpoints \
JOYOMNI_CACHE_ROOT=/runpod-volume/joyai/cache/h200-torch291-cu128 \
JOYOMNI_CACHE_READY_MARKER=/runpod-volume/joyai/cache/h200-torch291-cu128/ready.json \
JOYOMNI_PRELOAD=1 \
JOYOMNI_WIDTH=840 \
JOYOMNI_HEIGHT=480 \
JOYOMNI_FPS=20 \
JOYOMNI_FP8_IMG=1 \
JOYOMNI_FP8_TXT=1 \
JOYOMNI_CUDA_GRAPH=1 \
JOYOMNI_SAGE_ATTN=1 \
JOYOMNI_TXT_PARALLEL=1 \
JOYOMNI_VAE_COMPILE=1 \
JOYOMNI_VAE_COMPILE_STRICT=1 \
JOYOMNI_LOAD_WARMUP_STRICT=1 \
JOYOMNI_FULL_WARMUP_TIMEOUT_SECONDS=300 \
JOYOMNI_WARMUP_BOTH_ORIENTATIONS=0 \
JOYOMNI_WARMUP_REFERENCE_BUCKETS=0 \
JOYOMNI_RECORD_ENABLED=0 \
JOYOMNI_ONLINE_GATE_ENABLED=0

EXPOSE 8080 8081

CMD ["python", "/opt/joyai/runpod/start.py"]
16 changes: 16 additions & 0 deletions deploy/requirements-h200-runtime.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
transformers>=4.57.1,<4.58
accelerate==1.10.1
diffusers==0.36.0
einops==0.8.2
numpy==2.2.6
pillow==12.2.0
opencv-python-headless==4.13.0.92
av==13.1.0
imageio-ffmpeg==0.6.0
fastapi==0.117.1
uvicorn==0.37.0
uvloop==0.22.1
ninja==1.13.0
websockets==16.0
openai==2.41.0
loguru==0.7.3
Loading