DreamLake
ML experiment tracking for robotics and embodied AI. Record, store, browse, and search multimodal episode data — video, audio, tracks, logs, and parameters — from one CLI, one Python SDK, and one dashboard.
Install
One command, and there is no runtime to install first. The dreamlake CLI is a
single native binary that lives in your home directory and keeps itself up to
date.
curl -fsSL https://dl.dreamlake.ai/install.sh | bashirm https://dl.dreamlake.ai/install.ps1 | iexpowershell -NoProfile -Command "irm https://dl.dreamlake.ai/install.ps1 | iex"Then open a new terminal and check it worked:
Downloads the binary for your platform, checks its SHA-256 against the
release manifest, and installs entirely under $HOME:
~/.local/share/dreamlake/versions/<version>— the binary~/.local/bin/dreamlake— symlink to the active version- appends one line to your login shell's rc file if
~/.local/binisn't already onPATH
No sudo, and nothing outside your home directory. The installer refuses
to run under sudo for exactly this reason.
Platforms, release channels, version pinning, troubleshooting, and uninstall steps are in the install reference at the bottom of this page.
Your first episode
The walk-through below takes about five minutes. Every command assumes
dreamlake is on your PATH.
Authenticate
Opens your browser for OAuth device auth and stores a token locally — you only
do this once per machine. On headless machines, add --no-browser to get a QR
code instead. Point at a self-hosted server with --url <server>.
Upload
That single command chunks the file, uploads it to S3-backed storage, registers the asset on the server, and (for video) triggers HLS splitting — the episode is immediately browsable in the dashboard. File type is auto-detected from the extension. Large files are chunked (10 MB parts, 4 parallel workers) and uploaded via S3 multipart, so an interrupted upload resumes where it left off.
| Extension | Type |
|---|---|
.mp4, .mov, .mkv, .webm | video |
.wav, .mp3, .flac, .aac | audio |
.vtt, .srt | text-track |
.jsonl, .csv | label-track |
List and download
Organize with bindrs and datasets
A bindr is a curated collection of files matched by glob; a dataset groups bindrs into a training-ready unit:
See the CLI Reference for the full create / update / delete / list surface.
Episode syntax
The --episode flag everywhere uses [namespace@]project[:episode]:
| Example | Namespace | Project | Episode |
|---|---|---|---|
robotics | (current user) | robotics | — |
alice@robotics | alice | robotics | — |
alice@robotics:run-042 | alice | robotics | run-042 |
Environment variables
| Variable | Description |
|---|---|
DREAMLAKE_REMOTE | Server URL (overrides the stored login) |
DREAMLAKE_BSS_URL | BSS storage URL |
DREAMLAKE_API_KEY | API token — skips interactive login, for CI |
How it fits together
| Component | Role |
|---|---|
| dreamlake CLI | Native binary — upload, download, collections, artifacts, workflows — own docs |
| dreamlake-py | Python SDK — video slicing, tracks, vector index |
| dreamlake-server | Fastify API — catalog, auth (JWT), visibility, search routing |
| BSS | S3-backed binary storage with HLS video splitting |
| Dashboard | Browse episodes, render artifacts, manage sharing at dreamlake.ai |
| Qdrant | Vector index (CLIP embeddings) behind semantic search |
| Lakeshore | Queue-native remote compute — own docs |
Explore the docs
Load, slice, and batch video in Python with lazy, NumPy-style indexing — frames to tensors in one line.
Query hours of footage with natural language — CLIP embeddings over 2-second chunks, indexed in Qdrant.
Push a renderable file, get a live page — versioned, shareable, and safe to delete.
Every dreamlake command, versioned with each release — full reference at
cli.dreamlake.ai.
The REST surface behind the CLI and dashboard — auth, episodes, nodes, tracks, search, and artifacts.
How the pieces fit: the data model, node tree, auth flow, and upload pipeline.
DreamLake's elastic compute fabric — run Python functions on remote workers with a decorator.
The dreamlake-ai org — SDKs, server, skills, and example pipelines.
Ready to go deeper? Jump straight to the Architecture overview.
Install reference
Everything below is the long tail of installing and maintaining the CLI. You do not need any of it to get started.
Supported platforms
| Platform | Architectures |
|---|---|
| macOS 13+ | Apple Silicon, Intel |
| Linux (glibc) | x86-64, arm64 |
| Linux (musl / Alpine) | x86-64, arm64 |
| Windows 10+ | x86-64, arm64 |
32-bit Windows is not supported. Inside WSL, use the Linux command rather than the PowerShell one — you are installing into the Linux side.
Staying up to date
At most once every four hours, a command may start a short detached background process that checks for a new release and installs it; the new version takes effect the next time you run a command. To update right now:
Windows locks a running .exe, so there is no background updater there.
Run dreamlake self-update when you want a new version. dreamlake self-update --status reports this under auto:.
dreamlake update edits bindrs, datasets, and projects. Updating the CLI
itself is dreamlake self-update.
Release channels
latest (the default) gets every release as it ships. stable trails by
about a week and skips releases with known regressions.
Pin a version
Asking for an exact version pins it: auto-update stops until you choose a channel again. This is what you want in a CI image or when a release regresses.
Windows (PowerShell) tab: On Windows, pass the target through the script block:
curl -fsSL https://dl.dreamlake.ai/install.sh | bash -s 0.3.0
dreamlake self-update 0.3.0 # or, once installed
dreamlake self-update channel latest # unpin and resume updates& ([scriptblock]::Create((irm https://dl.dreamlake.ai/install.ps1))) 0.3.0dreamlake self-update --status shows whether you're pinned.
Turn updates off
| Variable | Effect |
|---|---|
DREAMLAKE_DISABLE_AUTOUPDATER=1 | No background checks; self-update and install still work |
DREAMLAKE_DISABLE_UPDATES=1 | Blocks every path that changes your version, including self-update and install |
Troubleshooting
dreamlake doctor prints where the binary lives, which version the
launcher points at, your channel, and the last auto-update result — no
network calls, no session started.
command not found after installing. The installer appended to your
shell rc but the current shell predates it. Open a new terminal, or:
dreamlake still runs an old version. Something else on your PATH
answers to the same name — usually an npm install of the CLI, or the
retired Python console script. The installer warns about this, and doctor
names the file under on PATH:. Check with:
Then remove the other one, or put ~/.local/bin ahead of it:
This one is worth ruling out first, because it does not look like a failure: the old binary keeps answering and every command appears to work.
From source
For working on the CLI itself:
Uninstall
Windows (PowerShell) tab: On Windows:
rm -f ~/.local/bin/dreamlake
rm -rf ~/.local/share/dreamlake ~/.local/state/dreamlake ~/.dreamlakeRemove-Item "$env:USERPROFILE\.local\bin\dreamlake.exe" -Force
Remove-Item "$env:USERPROFILE\.local\share\dreamlake" -Recurse -ForceAdd rm -rf ~/.config/dreamlake to also drop your saved logins. On macOS
and Linux, remove the # added by the dreamlake installer block from your
shell rc; on Windows, drop %USERPROFILE%\.local\bin from your user Path
in System Properties → Environment Variables.