TRIBE v2 × RTX 5090

Operator runbook for a clean, reproducible 10–30 second multimodal smoke test on the 5090 rig.

June 1, 2026· Prepared by Hermes· Research sandbox only
Goal

Prove that the RTX 5090 rig can load Meta’s released TRIBE v2 cortical checkpoint, authenticate for its gated Llama dependency, extract video, audio, and text features from one short public clip, and write a valid (n_timesteps, 20484) cortical-response array.

TRIBE checkpoint
676 MiB
already copied to NAS
Expected output width
20,484
fsaverage5 cortical vertices
Local NVMe budget
20–30 GiB
runtime weights + feature cache
First test clip
10–30 sec
keep the first pass small
!
License boundary

TRIBE v2 source and weights are released under CC-BY-NC-4.0. Run this as an internal research spike only. Do not connect it to production ranking, monetized creative optimization, or ad decisions until Meta grants commercial permission or counsel confirms an acceptable path.

1. What this test exercises

TRIBE v2 is a multimodal brain-response predictor, not a chat model and not a built-in virality scorer. For a video, the released demo pipeline extracts audio, transcribes speech into timed word events with WhisperX, computes visual features, audio features, and contextualized text features, then predicts one cortical activity map per second.

StagePrimary model or toolWhat the smoke test proves
Video ingestffmpeg / MoviePyThe clip can be decoded and its audio extracted.
TranscriptionWhisperXSpeech becomes timestamped word events.
Language featuresmeta-llama/Llama-3.2-3BHugging Face gated-model access works.
Audio featuresfacebook/w2v-bert-2.0The audio encoder runs on the Blackwell GPU.
Video featuresfacebook/vjepa2-vitg-fpc64-256The large video encoder runs and caches features.
Brain predictionfacebook/tribev2The cortical transformer emits an array with 20,484 vertices per retained second.

The official notebook also describes DINOv2 visual extraction. The active public cortical checkpoint config selects the text/audio/video feature path above. Treat DINOv2 as an optional follow-up until the first run confirms it is needed by the installed extractor stack.

2. Known RTX 5090 compatibility wrinkle

!
Patch the package bounds before installation

The released package currently pins torch>=2.5.1,<2.7 and torchvision>=0.20,<0.22. PyTorch 2.7 is the official release that added NVIDIA Blackwell support and CUDA 12.8 wheels. For this 5090 smoke test, use a local source copy and relax the bounds to the PyTorch 2.7 generation.

Reference: PyTorch 2.7 release notes.

3. NAS snapshot already prepared

Snapshot root
~/agents/models/facebook/tribev2 on the NAS-backed agents share
Weights directory
~/agents/models/facebook/tribev2/weights
Official source directory
~/agents/models/facebook/tribev2/source
Total snapshot size
680M
Checkpoint size
708,856,138 bytes
Checkpoint SHA-256
9c79ffff6b642b7b0c71d558c935fb3fa33f2788bfb509feead94fafbba2f321
Official source revision
34f52344e5ba96660fac877393e1954e399d3ef3

The rig may mount the NAS at a different location. The commands below deliberately use /path/to/mounted/agents as a placeholder rather than exposing NAS connection details.

4. Preflight checklist

Before touching Python, confirm the rig has a recent NVIDIA driver, Python 3.11, uv, Git, and ffmpeg. The commands assume Linux and a fresh work directory under ~/Developer.

nvidia-smi
python3.11 --version
uv --version
git --version
ffmpeg -version | head -n 2

# Optional Ubuntu package install if ffmpeg or git is missing:
sudo apt-get update
sudo apt-get install -y ffmpeg git

Create stable paths for this spike:

export NAS_AGENTS_ROOT="/path/to/mounted/agents"
export NAS_TRIBE_ROOT="$NAS_AGENTS_ROOT/models/facebook/tribev2"
export WORK_ROOT="$HOME/Developer/tribev2-smoke"
export TRIBE_MODEL_DIR="$WORK_ROOT/model"
export TRIBE_CACHE="$WORK_ROOT/feature-cache"
export HF_HOME="$WORK_ROOT/hf-cache"
export TRIBE_OUT="$WORK_ROOT/outputs"
export TRIBE_VIDEO="$WORK_ROOT/inputs/sintel_trailer-480p.mp4"

mkdir -p "$WORK_ROOT" "$TRIBE_MODEL_DIR" "$TRIBE_CACHE" "$HF_HOME" "$TRIBE_OUT" "$WORK_ROOT/inputs"

# Copy the official snapshot onto local NVMe for the smoke test.
rsync -a "$NAS_TRIBE_ROOT/source/" "$WORK_ROOT/tribev2/"
rsync -a "$NAS_TRIBE_ROOT/weights/" "$TRIBE_MODEL_DIR/"

# Verify the local checkpoint before running it.
printf '%s  %s\n' \
  '9c79ffff6b642b7b0c71d558c935fb3fa33f2788bfb509feead94fafbba2f321' \
  "$TRIBE_MODEL_DIR/best.ckpt" | sha256sum --check -

git -C "$WORK_ROOT/tribev2" rev-parse HEAD

Expected verification output:

/home/.../Developer/tribev2-smoke/model/best.ckpt: OK
34f52344e5ba96660fac877393e1954e399d3ef3

5. Create the Python environment

Work only inside the local source copy. Do not modify the NAS snapshot.

cd "$WORK_ROOT/tribev2"
uv venv --python 3.11 .venv
source .venv/bin/activate

python - <<'PY'
from pathlib import Path

path = Path("pyproject.toml")
text = path.read_text()
text = text.replace('"torch>=2.5.1,<2.7"', '"torch>=2.7,<2.8"')
text = text.replace('"torchvision>=0.20,<0.22"', '"torchvision>=0.22,<0.23"')
path.write_text(text)
print("Patched local PyTorch dependency bounds for Blackwell.")
PY

uv pip install \
  --index-url https://download.pytorch.org/whl/cu128 \
  torch==2.7.0 \
  torchvision==0.22.0

uv pip install -e ".[plotting]"

Verify that the environment sees the 5090:

python - <<'PY'
import torch
import torchvision

print("torch:", torch.__version__)
print("torchvision:", torchvision.__version__)
print("compiled CUDA:", torch.version.cuda)
print("CUDA available:", torch.cuda.is_available())
assert torch.cuda.is_available(), "PyTorch cannot see CUDA"
print("GPU:", torch.cuda.get_device_name(0))
print("capability:", torch.cuda.get_device_capability(0))
PY

Success means PyTorch reports CUDA availability and identifies the RTX 5090. Do not continue on a CPU fallback.

6. Authenticate for the gated Llama dependency

TRIBE v2 itself is public, but its language pathway requires gated meta-llama/Llama-3.2-3B. Request or accept access in the Hugging Face browser UI first, then log in locally with a read token.

hf auth login
hf auth whoami

# Cheap auth/access probe before the expensive run:
hf download meta-llama/Llama-3.2-3B config.json --cache-dir "$HF_HOME"
Token handling

Paste the Hugging Face token only into the local CLI prompt. Do not put it into shell history, a checked-in file, screenshots, logs, or a shared document.

7. Download a safe public test clip

Use the same public Sintel trailer as Meta’s notebook for the first pass. A public clip avoids sending unreleased material through transcription services while the pipeline is still being characterized.

curl -fL \
  https://download.blender.org/durian/trailer/sintel_trailer-480p.mp4 \
  -o "$TRIBE_VIDEO"

ffprobe -v error \
  -show_entries format=duration \
  -of default=noprint_wrappers=1:nokey=1 \
  "$TRIBE_VIDEO"

If you want the very first pass to stay near 20 seconds, trim a short sample:

ffmpeg -y \
  -ss 10 -t 20 \
  -i "$TRIBE_VIDEO" \
  -c:v libx264 -c:a aac \
  "$WORK_ROOT/inputs/sintel-smoke-20s.mp4"

export TRIBE_VIDEO="$WORK_ROOT/inputs/sintel-smoke-20s.mp4"

8. Run the smoke test

Create a reusable script:

cat > "$WORK_ROOT/smoke_test.py" <<'PY'
import json
import os
import time
from pathlib import Path

import numpy as np
import torch
from tribev2.demo_utils import TribeModel

model_dir = Path(os.environ["TRIBE_MODEL_DIR"])
cache_dir = Path(os.environ["TRIBE_CACHE"])
video_path = Path(os.environ["TRIBE_VIDEO"])
out_dir = Path(os.environ["TRIBE_OUT"])
out_dir.mkdir(parents=True, exist_ok=True)

print("torch:", torch.__version__)
print("compiled CUDA:", torch.version.cuda)
print("CUDA available:", torch.cuda.is_available())
assert torch.cuda.is_available(), "Smoke test requires CUDA"
print("GPU:", torch.cuda.get_device_name(0))
print("capability:", torch.cuda.get_device_capability(0))
print("video:", video_path)

started = time.time()
model = TribeModel.from_pretrained(
    model_dir,
    cache_folder=cache_dir,
)
print("Loaded TRIBE model in %.1fs" % (time.time() - started))

events = model.get_events_dataframe(video_path=video_path)
print("Event counts:")
print(events["type"].value_counts().to_string())

preds, segments = model.predict(events=events)
elapsed = time.time() - started

assert preds.ndim == 2, preds.shape
assert preds.shape[0] > 0, preds.shape
assert preds.shape[1] == 20484, preds.shape
assert np.isfinite(preds).all(), "Predictions contain NaN or Inf"
assert len(segments) == preds.shape[0]

np.save(out_dir / "preds.npy", preds)
summary = {
    "video": str(video_path),
    "elapsed_seconds": elapsed,
    "prediction_shape": list(preds.shape),
    "segments": len(segments),
    "gpu": torch.cuda.get_device_name(0),
    "cuda_capability": list(torch.cuda.get_device_capability(0)),
    "torch": torch.__version__,
    "compiled_cuda": torch.version.cuda,
    "event_counts": {
        str(k): int(v) for k, v in events["type"].value_counts().items()
    },
}
(out_dir / "summary.json").write_text(json.dumps(summary, indent=2) + "\n")
print(json.dumps(summary, indent=2))
print("SMOKE TEST PASSED")
PY

cd "$WORK_ROOT/tribev2"
source .venv/bin/activate
python "$WORK_ROOT/smoke_test.py" 2>&1 | tee "$TRIBE_OUT/smoke-test.log"

In a second terminal, watch GPU memory during the run:

watch -n 1 nvidia-smi

9. Success criteria

CheckExpected resultStatus after run
Checkpoint integritysha256sum --check prints OKVerify
Source revision34f52344e5ba96660fac877393e1954e399d3ef3Verify
CUDA pathPyTorch identifies the RTX 5090; no CPU fallbackVerify
Gated dependencyhf download ... config.json succeeds for Llama 3.2 3BVerify
Multimodal ingestEvent counts include Video, Audio, and timestamped text events such as WordVerify
Cortical predictionsummary.json reports [N, 20484] with N > 0Verify
Numerical sanityPredictions contain no NaN or Inf valuesVerify
Artifactspreds.npy, summary.json, and smoke-test.log exist under $TRIBE_OUTVerify

10. Optional: render a brain-response image

Once the numeric smoke test passes, render the first few predicted seconds. This verifies the plotting dependencies and gives you a visual artifact for sanity checking.

cat > "$WORK_ROOT/render_preview.py" <<'PY'
import os
from pathlib import Path
import numpy as np
from tribev2.plotting import PlotBrain

out_dir = Path(os.environ["TRIBE_OUT"])
preds = np.load(out_dir / "preds.npy")
n = min(12, len(preds))
plotter = PlotBrain(mesh="fsaverage5")
fig = plotter.plot_timesteps(
    preds[:n],
    cmap="fire",
    norm_percentile=99,
    vmin=.6,
    alpha_cmap=(0, .2),
)
fig.savefig(out_dir / "brain-preview.png", dpi=180, bbox_inches="tight")
print(out_dir / "brain-preview.png")
PY

cd "$WORK_ROOT/tribev2"
source .venv/bin/activate
python "$WORK_ROOT/render_preview.py"

11. Expected downloads and storage

The NAS copy contains TRIBE v2 itself and the official source. The first rig run will fetch runtime dependencies into $HF_HOME. Keep those on local NVMe for fast iteration.

ArtifactApproximate sizeNotes
TRIBE v2 cortical checkpoint676 MiBAlready copied to NAS and verified
Llama 3.2 3B5.99 GiBGated; requires Hugging Face approval
V-JEPA2 Giant3.85 GiBActive public video path
Wav2Vec-BERT 2.02.16 GiBActive public audio path
DINOv2 Large1.13 GiBOptional follow-up if the installed path requests it
Whisper transcription model~3 GiBExact backend artifact can vary

Selected upstream model artifacts total roughly 16.7 GiB before extracted features, package caches, and input media. Reserve 20–30 GiB of local NVMe space.

12. Failure triage

SymptomLikely causeNext action
torch.cuda.is_available() is falseDriver, CUDA-wheel, or environment mismatchRe-check nvidia-smi; confirm the environment installed the cu128 torch wheel; do not continue on CPU.
Resolver tries to downgrade torch below 2.7The local pyproject.toml patch did not applyInspect the two dependency bounds and repeat the local patch before reinstalling.
HTTP 401 or 403 for Llama 3.2Missing Hugging Face token or gated access not approvedAccept the Llama terms in the browser, then rerun hf auth login and the cheap config probe.
CUDA out-of-memoryAn extractor exceeds available VRAM or another workload is using the GPUStop other GPU jobs, inspect nvidia-smi, keep the clip short, and capture the failing stage from the log before tuning batch sizes.
Transcription errorWhisperX dependency, ffmpeg, audio codec, or model-download issueConfirm ffprobe "$TRIBE_VIDEO" sees an audio stream and inspect the first transcription traceback.
Output width differs from 20,484Wrong checkpoint, wrong brain target, or incompatible code revisionVerify the checkpoint hash and source revision before debugging further.
Run is slow but progressingNormal cold-start downloads and feature extractionLet the first short clip finish. Repeated runs should benefit from local caches.

13. Privacy and safety notes

14. After the smoke test passes

  1. Archive summary.json, smoke-test.log, and brain-preview.png.
  2. Measure cold-run versus cached-run wall-clock time on the same 20-second clip.
  3. Try a tiny evaluation set of known strong and weak hooks.
  4. Inspect temporal response patterns rather than inventing a single “viral score.”
  5. If the signal looks useful, build a research-only batch worker that derives features and calibrates them against your own CTR, retention, conversion, and ad-performance data.
  6. Before any commercial use, get explicit license clearance.

Primary references