Model reference · open weights
LeVJEPA-VideoMix-Large is an open-weight embedding model from galilai-group. LeVJEPA-VideoMix-Large (FP32) weighs 606 MB; the smallest configuration that runs it is RTX 3060 12 GB.
For self-hosting, compare this build's requirements below with the GPU you plan to rent.
Summary of the galilai-group/LeVJEPA-VideoMix-Large model card, 2026-10-01
What it is
| Released by | galilai-group |
|---|---|
| Released | 2026-08-27 |
| Parameters | 303M |
| VRAM | 606 MB for the weights |
What it runs on
| Card | Runs | Memory |
|---|---|---|
| RTX 3060 12 GB | fits | 11.6 GB |
| RTX 4060 Ti 16 GB | fits | 15.4 GB |
| RTX 3090 24 GB | fits | 23.4 GB |
| RTX 4090 24 GB | fits | 23.4 GB |
| RTX 5090 32 GB | fits | 31.0 GB |
| L40S 48 GB | fits | 44.0 GB |
| A100 80 GB | fits | 78.2 GB |
| H100 80 GB | fits | 78.1 GB |
| RTX PRO 6000 Blackwell 96 GB | fits | 93.8 GB |
| DGX Spark (GB10) 128 GB unified | fits | 107 GB |
| H200 141 GB | fits | 138 GB |
| B200 180 GB | fits | 176 GB |
From the model card
A ViT-L/16 video encoder trained with LeV-JEPA, a self-supervised objective combining a multi-crop prediction loss with SIGReg. No labels are used at any point.
import torch
from transformers import AutoModel
model = AutoModel.from_pretrained(
"galilai-group/LeVJEPA-VideoMix-Large", trust_remote_code=True
).eval()
# (B, C, T, H, W), ImageNet-normalised
video = torch.randn(1, 3, 16, 224, 224)
with torch.no_grad():
out = model(pixel_values=video)
out.last_hidden_state # (1, 3137, 1024) -- CLS + 16*14*14 patch tokens
out["pooler_output"] # (1, 1024) -- the CLS token
trust_remote_code=True is required: this is a custom architecture (RoPE +
block-causal attention) rather than a stock transformers model, so the modeling
code ships with the weights.
Normalise with the ImageNet statistics used in training —
mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] — and resize/crop to 224.
Frames are sampled at roughly 7.5 fps in training, so a 16-frame clip covers about
two seconds.
For a single image, repeat it along the temporal axis:
image = torch.randn(1, 3, 224, 224)
video = image.unsqueeze(2).repeat(1, 1, 16, 1, 1)
The weights were trained with block-causal attention: bidirectional within a
temporal slot, causal across slots, with CLS as a read-only sink that sees the whole
clip while no patch attends to it. config.attn_mode defaults to "block_causal"
for this reason.
Running these weights under full attention will not raise an error — it will quietly return worse features. Leave
attn_modealone unless you know why you are changing it. An explicit attention mask also disqualifies SDPA's flash kernel, so expect higher memory than a full-attention ViT-L at the same batch size.
The released tensors are the EMA copy of the encoder (decay=0.9999,
update_every=32), which is what we evaluate. There is no separate LR-decay artifact
to apply — the cosine leg is already baked into these weights.
| Objective | multi-crop prediction + SIGReg (weight 0.02) |
| Crops | 1 global + 10 local |
| Token drop | 95%, random, applied inside the encoder forward (training only) |
| Optimizer | AdamW, lr 4e-4 flat then 1-sqrt → 0, weight decay 0.04 |
| Batch | 3072 global |
| Precision | bf16-mixed |
Token dropping is a training-time regulariser and is inert under eval(), so the
released model returns all 3137 tokens.
Frozen feature extraction for video and image understanding — attentive or linear probing, retrieval, and as a backbone for downstream heads. It is a self-supervised encoder with no classification head.
Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.