Skip to content

Interactive Drive

Interactive Drive is a long-running FlashDreams v2 driving application with scene and variant selection, driving telemetry, post-processing controls, and a BEV minimap.

Four-second Interactive Drive demo preview generated by FlashDreams.

Quick Start:


Controls

Keyboard

Key Action
W or Up arrow Accelerate forward.
S or Down arrow Accelerate in reverse.
A or Left arrow Steer left.
D or Right arrow Steer right.
Space Brake; while held, throttle is suppressed.
1 Show the RGB view.
2 Show the HD-map conditioning view.
3 Show the PhysX collider view.

Controller

Standard-mapped gamepads use these controls:

Control Action
Left stick, push forward+tilt Steer.
Right trigger Accelerate in the selected gear.
Left trigger Brake.
R (hold) Select reverse gear; releasing returns to Drive.
Start / + (Plus) Restart the current rollout.

View selection does not currently have controller bindings. No other gamepad sticks, axes, or buttons are used. A connected steering wheel uses its steering, throttle, and brake inputs directly.

Steering wheel setup

Calibrate a wheel and pedals with:

uv run --package flashdreams-interactive-drive-v2 interactive-drive-configuration

Interactive Drive loads the default profile on later launches. One profile can bind a wheel and separately connected pedals. Force feedback requires write access to /dev/input/* and the appropriate Linux driver:

Vendor Driver
Thrustmaster hid-tmff2, plus hid-tminit or tmdrv for wheel-mode initialization
Fanatec hid-fanatecff, with the base in PC mode
Logitech In-kernel hid-lg4ff, new-lg4ff, or the HID++ driver for the G920 and Xbox/PC G923

Its InteractiveDriveUILoop HUD contains steering-wheel and pedal sprites. Dear ImGui builds the immediate-mode HUD and SlangPy renders it with GPU textures; the application does not use CSS.

The package also owns its model-neutral scene loading, simulation, rendering, input handling, and wheel-configuration support. Its world-model binding is supplied by an integration adapter.


Demo Arguments

Argument Description
--scene PATH Use a local USDZ scene instead of downloading the default scene.
--prompt TEXT Override the prompt stored in the selected scene variant.
--camera NAME Select a camera from the scene. Default: camera_front_wide_120fov.
--variant NAME Select the scene's initial-frame and prompt variant. Default: default.
--total-blocks N Stop after this many generated blocks; 0 runs until the session is stopped. Default: 0.
--fps N Set the application frame rate. Default: 30.
--width N Set the output width. The selected demo-model slug supplies the default.
--height N Set the output height. The selected demo-model slug supplies the default.
--view {rgb,hdmap,physx} Select the initial RGB, HD-map conditioning, or PhysX collider view. Default: rgb.
--no-ui Present model output directly without creating the HUD or rendering its BEV minimap.
--game-mode Enable the speed limit and collisions with scene actors and static map geometry.
--postprocess-preset NAME Start with a registered video post-processing preset enabled. Default: none.
--postprocess-device DEVICE Select the postprocessor device independently. Default: cuda:0.
--world-model-device DEVICE Select the model device. Default: cuda:0.
--raster-device DEVICE Select the Ludus raster device independently. Default: cuda:0.
--world-model-seed N Pin the seed used for each rollout.
--world-model-debug-condition-frame-dir PATH Override first-chunk condition frames for debugging.

For example, use the default scene, select its rain variant, override its prompt, and enable RTX super resolution:

uv run flashdreams-run-v2 DEMO_MODEL_SLUG --mode webrtc -- \
    --variant rain --prompt "A rainy night drive" \
    --game-mode --postprocess-preset rtx-super-resolution

For example, render every generated frame once, in order, with the HUD disabled (for quality evaluation):

uv run flashdreams-run-v2 DEMO_MODEL_SLUG \
    --mode mp4 --output-path artifacts/test/interactive-drive.mp4 \
    --timeout unbound \
    --backpressure-mode block --presentation-mode on_demand -- \
    --no-ui --total-blocks 60

This is frame-lossless presentation: the runtime neither drops nor repeats generated frames. The MP4 itself is currently encoded as H.264 at CRF 18, so it is not mathematically lossless at the pixel/codec level.

For example, render a native-window with game-mode collisions enabled:

uv run flashdreams-run-v2 DEMO_MODEL_SLUG --mode native-window -- \
    --game-mode

The HUD's view button cycles through RGB → HDMAP → PHYSX.

When --postprocess-preset is set, the preset starts enabled and the HUD's Post-processing checkbox can toggle it between generated chunks. Without a preset, the checkbox is hidden. Run the application-help command above to see the presets registered in the current environment. The built-in rtx-* presets require the optional NVIDIA VFX dependency, installable with uv pip install 'flashdreams[rtx-postprocess]', and supported RTX hardware.

The downloaded default scene is scenes/clipgt-0d404ff7-2b66-498c-b047-1ed8cded60d4.usdz. Pass -- --scene scene.usdz to use a local scene instead.


Tests

uv run --no-sync pytest apps/interactive_drive -m ci_cpu -v


Logging

set LOGURU_LEVEL to DEBUG to see more logging. Default is INFO.