Pretrain, inspect and use LeJEPA self-supervised models on your own unlabeled data. Runs in the browser as a demo, or on your machine with the desktop app.
Developer toolsPython · JavaScriptGitHub @NormansruleOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Pretrain, inspect and use LeJEPA models on your own unlabeled data, with a planning bot in a learned world model. Web demo + desktop app.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
Pretrain, inspect and use LeJEPA models on your own unlabeled images, video or time series,
then drive a planning bot inside a learned latent world model. See it, run it, trust it.Read the full README ↗A local AI agent + JEPA models, on your own computer. JEV answers questions, writes and runs code, makes images and narrated videos, and simulates physics (the black hole above is one of its renders), with language models served by your own Ollama. Code runs in a sandbox folder; anything beyond it stops and asks you. The same app pretrains, inspects and uses LeJEPA self-supervised models on your unlabeled images, video or time series.
Download the desktop app (Windows, macOS, Linux) · Try it in your browser (the black hole, the simulations and the JEPA demo run in the tab; JEV itself needs the desktop app)
| What you ask | What JEV does, locally | |
|---|---|---|
| Answer | "Explain this paper", "What does this CSV say?" | reads the files you attach and quotes them; file contents are treated as data, never as instructions |
| Code | "Write and run code that fits this curve" | writes Python or Node.js, runs it in the conversation's sandbox folder with time and memory limits, reads the output, fixes errors |
| Images | "Plot …", "Make slides about …" | charts, diagrams, slides (Pillow, matplotlib), and image models you install yourself |
| Video | "Make a narrated video about …", "Find the best moments in my footage" | narrated explainers with local text-to-speech, highlight reels cut from your own clips (FFmpeg); docs/jev/media.md |
| Physics | "Render a spinning black hole", "Simulate a double pendulum" | a ray-traced Kerr black hole with Doppler beaming, N-body gravity, chaotic pendulums, waves, orbits; stills and MP4 |
Every tool call appears in the chat as a card with its risk level, its arguments, live progress, the result and the files it made; the files collect in the conversation's gallery.
127.0.0.1; the backend listens on 127.0.0.1
with a per-session token. No telemetry, no hosted service, no account.jev audit.brew install ollama (macOS), winget install Ollama.Ollama
(Windows), curl -fsSL https://ollama.com/install.sh | sh (Linux; read the script first if you
like).ollama pull qwen2.5-coder:7b (JEV's default, about 4.7 GB).
Without a GPU, a 3B model such as llama3.2:3b (about 2 GB) is faster, at some cost in
tool-calling quality. The table in
docs/jev/README.md matches models to memory.SHA256SUMS.txt). The first launch builds a private Python environment with
PyTorch (a few GB); later launches take seconds. The setup window and the JEV tab's Doctor
say whether Ollama is running and show the commands that fix what is missing.
Details: docs/desktop.md.From source instead (Python 3.10+):
git clone https://github.com/Normansrule/jev-jepa-studio && cd jev-jepa-studio
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[jev]" # JEPA tools + JEV; extras: video, assistant, dev
jev doctor # Ollama, models, sandbox, ffmpeg, GPU
jev chat "make a plot of sin(x) from 0 to 2 pi" # one turn in the terminal
jepa-studio serve # the app's backend on 127.0.0.1
The Science tab draws a black hole you can orbit (spin, distance, viewing angle, the disk, Doppler colour and beaming) and three simulations (N-body gravity, a double pendulum, waves on a membrane) live on your graphics card with WebGL, in the desktop app and on the website. The desktop app can also render them on your computer as high-quality MP4 videos with a physically based Kerr ray tracer; the physics and its approximations are written up in docs/jev/science.md.
| Website (browser tab) | Desktop app | |
|---|---|---|
| Install | none | the app, plus Ollama and a model for JEV |
| JEV agent | no: it needs Ollama and a backend that can run code; the tab explains and links the download | yes, with sandbox and approvals |
| Science | live black hole and simulations (WebGL) | the same, plus video renders on your computer |
| JEPA compute | JavaScript; WebGPU for the first layer when verified correct and faster | PyTorch on CPU, CUDA, ROCm or Apple MPS |
| JEPA encoders | mlp-tiny (218 512 parameters, 16 × 16 inputs) | convnet-tiny, convnet-small, vit-tiny, mlp-tiny, video-convnet, series-conv |
| JEPA data | Shapes, local images (≤ 2000), CSV preview | images, video clips, time series (CSV/TSV/NPY), Shapes |
| Your files | decoded in the page, never uploaded | read from folders you grant; leave the machine only through a tool you approve |
LeJEPA is a Joint-Embedding Predictive Architecture (JEPA) trained with Sketched Isotropic Gaussian Regularization (SIGReg): one loss, one knob, no teacher network (Balestriero & LeCun, 2025). The JEPA tabs show every step (views, loss terms, embedding cloud, collapse check, probes, planning), run on whatever machine you have, and write down every number and decision so you can check them.
| Tab | What you do there | Screenshot |
|---|---|---|
| Data | Pick Shapes, or choose, drop or paste your own images (a folder works) or a CSV; see one input next to its global and local views. | tab-data |
| Train | Pick a preset or set steps, λ, learning rate and SIGReg directions (validated against the config schema); watch the loss terms live, with a health check and the hardware card. | tab-train |
| Inspect | Explore the embedding cloud in 3-D or 2-D, read the collapse detector, browse nearest neighbours and saliency maps (plus [CLS] attention for ViT-tiny on desktop). | tab-inspect |
| Evaluate | Freeze the encoder; fit a linear probe and a kNN classifier on a few labels; compare with random-init and supervised baselines. | tab-evaluate |
| World model | The Cross-Entropy Method (CEM) planner imagines in latent space, acts, replans; compare with random actions. | tab-world |
| Explain | Optional. Passages quoted from these docs and your run log, with links; nothing is generated in the browser. | tab-explain |
| Export | Embeddings (CSV/.npy), weights (safetensors), the run report or a reproducibility bundle; edit and apply the run config as JSON. | tab-export |
The command line does the same without the app (jepa-studio <command> --help):
jepa-studio doctor # check the install
jepa-studio train --name shapes --epochs 2 --run-dir runs/my-shapes --eval
jepa-studio inspect --run-dir runs/my-shapes # isotropy + collapse verdict
jepa-studio export --run-dir runs/my-shapes # HTML report + reproducibility bundle
jepa-studio world --env two-room --out runs/my-two-room # world model + planning bot
hardware benchmarks the machine and explains each automatic setting (precision, workers,
batch size under 85% of memory, thermal pause; docs/hardware.md); bench
measures what each one buys; sign-weights / verify-weights handle Ed25519-signed manifests;
only safetensors weights are ever loaded.
| SIGReg at work | Predict embeddings, not pixels |
|---|---|
Every equation, exactly as coded, with worked examples that a test re-checks: docs/equations.md.
A JEPA world model learns to predict the next frame's embedding from the current one and an action (trained end-to-end from pixels with the same SIGReg, the LeWorldModel recipe). The CEM planner searches for five-step action sequences whose imagined embeddings reach the goal image's embedding, executes the first action, looks again and replans.
| two-room: go through the door | push-block: push the block to the goal |
|---|---|
The small frames on the right are retrieved, not generated: a JEPA has no decoder, so each imagined embedding is shown as the nearest real frame. Each GIF shows the first evaluation episode the planner solved; the success rates below are the representative numbers. Details: docs/world-model.md.
These come straight from files in this repo. They are tiny CPU runs meant to show the method working end to end, not benchmarks.
LeJEPA pretraining on Shapes (runs/shapes-desktop/eval.json): convnet-tiny (382 128
parameters with the projector), 8192 images of 32 × 32 px, 12 epochs = 768 steps at batch 128,
λ = 0.05, 256 SIGReg directions, on a 2-core CPU with no GPU (hardware.json), 853 s. Evaluated
with 655 labeled images for the probe and 1638 images held out from the probe (all 8192 were
seen, unlabeled, during pretraining, as is usual for self-supervised evaluation); chance is 10%.
| Encoder | Linear probe | kNN (k = 20) | Effective rank (of 16) | Collapse check |
|---|---|---|---|---|
| LeJEPA (this run) | 47.7% | 21.0% | 15.3 | healthy |
| random-init encoder (same architecture) | 17.9% | 12.8% | 2.6 | complete collapse |
| supervised on the 655 labels | 91.1% | 91.6% | 7.7 | healthy |
Honest reading:
eval.json (58.5 for LeJEPA) are computed over all 8192 images, and the
statistic grows with the number of samples, so they are not comparable with the training-batch
value (1.63 at step 768 over 128 samples, events.jsonl).World model + planner (runs/world-*/metrics.json, 20 evaluation episodes, 40 steps max,
same episodes for both policies):
| Environment | CEM success | Random-action success | Mean final distance: CEM / random / at start | Training time |
|---|---|---|---|---|
| two-room | 80% (16/20) | 15% | 0.144 / 0.380 / 0.428 | 134 s on 2 CPU threads |
| push-block | 25% (5/20) | 0% | 0.189 / 0.158 / 0.151 | 104 s on 2 CPU threads |
two-room works. push-block is weak: when the planner fails it often pushes the block the wrong
way, so its mean final distance is worse than random and worse than doing nothing. The latent
encodes the block's position poorly (R² 0.19 / 0.38 in metrics.json). One seed, 20 episodes.
JEV: overview and setup · safety model · HTTP API · the app's JEV and Science tabs · media · science.
JEPA: equations · data · hardware · world model · web demo · local API.
App and project: desktop app · security model · bibliography · reference repos · visual style · contributing. Index: docs/README.md.
jev/ JEV, the local agent: agent loop, policy (approvals), sandbox, Ollama client,
store (SQLite audit log), tools/, science/ (Kerr ray tracer, sims), media/
jepa_studio/ JEPA Studio: losses, models, training, hardware, evaluation, export,
the localhost server (mounts /api/jev), data loaders, world models
site/ the web app (static; also the desktop front end): js/tabs/, js/jev/, js/science/
desktop/ Tauri desktop shell (JEV Studio)
schema/, configs/ config schema and examples
runs/ real results quoted above
assets/ README figures, renders and screenshots
docs/ documentation (above); docs/jev/ for JEV
scripts/, tests/ docs-index builder and figure scripts; pytest suite (tests/js: Node checks)
JEV's sandbox and approvals are summarized above. For the rest of the app:
import-legacy). Optional SHA-256 checks and Ed25519-signed manifests (sign-weights,
verify-weights)..npy without pickle, CSV parsed as numbers only.Host and Origin checks, JSON-only
bodies capped at 2 MB, reads only folders you granted.What is not enforced yet (ONNX is export-only and never imported, no hash-locked Python installs, the memory guard only counts this process, no thermal pause without sensors, and more) is listed in docs/SECURITY_MODEL.md. Report vulnerabilities privately: SECURITY.md.
To cite JEV Studio (the Python package is jepa-studio), use CITATION.cff (GitHub's "Cite this repository" button).
Please also cite the methods it implements:
@misc{balestriero2025lejepa,
title = {LeJEPA: Provable and Scalable Self-Supervised Learning Without the Heuristics},
author = {Balestriero, Randall and LeCun, Yann},
year = {2025},
eprint = {2511.08544},
archivePrefix = {arXiv}
}
@misc{maes2026leworldmodel,
title = {LeWorldModel: Stable End-to-End Joint-Embedding Predictive Architecture from Pixels},
author = {Maes, Lucas and Le Lidec, Quentin and Scieur, Damien and LeCun, Yann and Balestriero, Randall},
year = {2026},
eprint = {2603.19312},
archivePrefix = {arXiv}
}
@article{epps1983test,
title = {A test for normality based on the empirical characteristic function},
author = {Epps, T. W. and Pulley, Lawrence B.},
journal = {Biometrika},
volume = {70},
number = {3},
pages = {723--726},
year = {1983},
doi = {10.1093/biomet/70.3.723}
}
Full, verified list: docs/bibliography.md.
MIT © 2026 Aleksander Norman (LICENSE).
losses.py implements the paper's equations, but its Epps–Pulley
quadrature (half line $[0, 3]$, 17 knots) follows the LeJEPA reference code rather than the
paper's Algorithm 1 ($[-5, 5]$), and the class closely parallels the reference one, so if you
need a licence-clean version for commercial use, have it reviewed or re-derived
(details in the losses.py docstring). The world model
is a re-implementation of the (MIT) LeWorldModel recipe. Per-repository details:
docs/references.md.runs/ and site/models/ were trained by this project and are covered by the
MIT license.site/fonts/ are under the GUST Font License
(site/fonts/GUST-FONT-LICENSE.txt).