D
DreamLake

Overview

Quick Start

Get up and running with the DreamLake CLI in under 5 minutes.

1. Authenticate

# Login via device auth flow (opens browser)
dreamlake login --url http://localhost:10334
 
# Or for local dev, use --debug to skip login
dreamlake --debug upload ...

2. Upload Files

Video

dreamlake upload ./run01.mp4 \
  --episode alice@robotics:run-042 \
  --to /camera/front

Expected output:

Uploading run01.mp4 (video)
  episode: alice@robotics:run-042
  path:    /camera/front
  size:    12.5 MB
  parts:   2 × 10 MB
  part 1/2 uploaded
  part 2/2 uploaded
  splitting:    queued
✓ Uploaded: /camera/front
  bss id:       69df3ca3fde477c8641d3cbb
  dreamlake id: 69df3ca8df27a21701fc31d5

What happens under the hood:

  1. File is chunked (10 MB parts) and uploaded to BSS via multipart upload
  2. Asset is registered in DreamLake Server → creates episode node + folder hierarchy
  3. DreamLake Server returns a presigned Lambda URL
  4. CLI triggers HLS splitting via the presigned URL (no BSS auth needed)
  5. Lambda segments the video into HLS chunks in the background

Audio

dreamlake upload ./mic.wav \
  --episode alice@robotics:run-042 \
  --to /microphone/front

Labels

dreamlake upload ./detections.jsonl \
  --episode alice@robotics:run-042 \
  --to /labels/yolo

Text Tracks (Subtitles)

dreamlake upload ./captions.vtt \
  --episode alice@robotics:run-042 \
  --to /subtitles/en

All types follow the same flow — file type is auto-detected from extension.

3. Browse the Node Tree

After uploading, the folder hierarchy is:

/ (project root)
└── run-042/              (episode node)
    ├── camera/
    │   └── front/
    │       └── run01.mp4     (video leaf)
    ├── microphone/
    │   └── front/
    │       └── mic.wav       (audio leaf)
    ├── labels/
    │   └── yolo/
    │       └── detections.jsonl (label leaf)
    └── subtitles/
        └── en/
            └── captions.vtt  (text-track leaf)

Each file is a leaf node in the tree. Folders and episodes are browseable via the GET /nodes/children API.

4. List Assets

dreamlake list --episode alice@robotics:run-042
dreamlake list --episode alice@robotics:run-042 --type video

5. Download

dreamlake download \
  --episode alice@robotics:run-042 \
  --from /camera/front \
  -o ./video.mp4

Episode Syntax

The --episode flag uses the format [namespace@]space[:episode]:

ExampleNamespaceSpaceEpisode
robotics(current user)robotics(none — space-level)
alice@roboticsalicerobotics(none — space-level)
alice@robotics:run-042aliceroboticsrun-042
alice@robotics:2026/q1/run-042alicerobotics2026/q1/run-042

Without an episode, assets are uploaded to the project root (not under any episode node).