Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Generate Camera Trajectory

Generate and visualize camera trajectories
one handcrafted shot at a time, or thousands under controlled randomness

A handcrafted multi-segment shot in the trajectory designer A randomized variation of the same shot Another randomized variation of the same shot
Human-centric trajectory


Demo Video

camtraj_small.mp4

To-do

  • Any SOMA sequence upload
  • Procedural Caption Generation
  • API generation
  • SOMA-X visualizations and Auteur DSL
  • Batched generation with randomized structure (which/how many segments)
  • Batched generation with given constraints
  • Visualise camera POV
  • Generate and visualise fine-grained camera trajectory

What is this?

A toolkit for authoring camera (and scene-object-human) motion: pick a motion primitive, shape it with a handful of continuous sliders, and get a clean, exportable 3D trajectory — one carefully handcrafted shot, or a large batch of independent variations sampled under ranges you control.

It reimplements the trajectory-generation logic behind CVPR'26 paper LAMP's language-driven motion DSL and Auteur's human-centric DSL for direct, LLM-free human use — continuous sliders instead of categorical tiers, purpose-built interactive apps instead of a script.

Note: This repository focuses on automatic camera-trajectory generation for general research purposes. For text-conditioned trajectory generation using LLMs, please refer to the original repositories: LAMP · Auteur.

Use cases

  • 🎬 Video & image generation — controllable camera-motion signals for training and conditioning camera-aware video/diffusion models, in bulk, with known ground truth.
  • 🤖 Robotics — trajectories with precisely controlled shape and speed for camera-in-hand motion planning, visual servoing, active perception.
  • 🛸 Drones & aerial cinematography — block out flight paths, or generate randomized batches for simulation and sim-to-real transfer.
  • 🧭 SLAM / SfM / NeRF benchmarking — reconstruction pipelines evaluated against trajectories with known, exportable ground-truth poses.
  • 🎥 Virtual production, previz & game cinematics — block camera moves before committing to a physical shoot or a hand-authored in-engine path.
  • 🕶️ Embodied AI & simulation — synthetic ego-motion camera paths for training and evaluating perception models at scale.

Features

  • Continuous, not categorical. Sliders throughout, with the original DSL's discrete tiers kept as reference tick marks.
  • Three apps, one shared engine — see below.
  • A scene anchor that can move. Every trajectory is built around "the box," which orbits/tracks/chases can target, and which can itself translate over time, independently of the camera.
  • Save, load, export. Recipes (the editable segment design) save/load as JSON; finished trajectories export as .npz (camera + object, separately) in your choice of pose convention (OpenGL, Blender, OpenCV, COLMAP).
  • Agent-friendly. Core math and logic are already implemented, tested, and documented (user-agent.md) — new output formats, constraints, or automated batch inference are a well-scoped extension for a coding agent, not a from-scratch effort.

Quick start

micromamba activate camera          # or any Python 3.10+ environment
pip install -e ".[dev,viz]"

## pip install -e ".[auteur]" # Additional SOMA packages for Auteur trajectories. auteur_designer.py will download SOMA-X model on the first run.

# Run the test suite (fast -- pure geometric invariants, no server)
python -m pytest tests/ -q

# Design one trajectory interactively
python -m apps.trajectory_designer

# Generate a batch under controlled randomness (values vary, structure fixed)
python -m apps.batch_generator

# Or the other way around (structure varies, values fixed)
python -m apps.structure_batch_generator

Each app prints a local URL and, by default, a public share link — open either in a browser to start.

Two ways to work

🎯 Single-trajectory designers (apps.trajectory_designer and apps.auteur_designer)

Handcraft one shot with immediate visual feedback: chain segments of different motion primitives, tune every parameter live, scrub/play the result, preview it from the camera's own point of view, and export.

  • Chain any number of segments, each its own motion primitive
  • Live 3D playback plus an on-demand camera-POV renderer
  • Per-segment box motion (the anchor object can move too)
  • Save/load the design as a recipe (.json)
  • Export camera + object as .npz, in your choice of pose convention

🎲 Batch generator (apps.batch_generator)

Load a recipe as a fixed skeleton, then turn any of its sliders into a range (drag both handles together to pin a value exactly, or spread them to let it vary) and any of its dropdowns into a multi-select (check one to pin, several to let it vary). Preview a random draw before committing, then generate N independent, reproducible trajectories in one click.

  • Every numeric parameter becomes a draggable min/max range

  • Every categorical choice becomes a checkbox multi-select

  • One-click preview of a random draw, before generating a full batch

  • Deterministic given a seed; downloads one .zip with a manifest.json (exactly what each draw sampled) plus a camera/object .npz pair per draw

  • 🧩 Structure batch generator (apps.structure_batch_generator): The complement to the batch generator above: values are fixed, structure varies.

Motion primitives

LAMP: free_form, orbit, tail_track, rotation_track — four handcrafted primitives grounded in cinematography literature.

Auteur: orientation,scale,dutch_angle,camera_level,lookat_level, and framing. 6 axes corresponding to 6-DoF following the representation by Auteur paper.

Citation

If you use this in your work, please consider citing LAMP and Auteur, whose DSL's this project's motion vocabulary is drawn from:

@misc{kizil2025lamp,
    title={LAMP: Language-Assisted Motion Planning for Controllable Video Generation},
    author={Muhammed Burak Kizil and Enes Sanli and Niloy J. Mitra and Erkut Erdem and Aykut Erdem and Duygu Ceylan},
    year={2025},
    eprint={2512.03619},
    archivePrefix={arXiv},
    primaryClass={cs.CV},
    url={https://arxiv.org/abs/2512.03619},
}
@misc{kizil2026auteur,
      title={Auteur: Language-Driven Cinematographic Framing for Human-Centric Video Generation}, 
      author={Muhammed Burak Kizil and Enes Sanli and Niloy J. Mitra and Xuelin Chen and Erkut Erdem and Aykut Erdem and Duygu Ceylan},
      year={2026},
      eprint={2606.01900},
      archivePrefix={arXiv},
      primaryClass={cs.CV},
      url={https://arxiv.org/abs/2606.01900}, 
}

About

A toolkit for controllable camera trajectory generation, visualization, and large-scale randomized sampling for video generation, robotics, and 3D vision.

Topics

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages