Veyrul

articleactiveVideo generation3D and worldsVirtual production and spatial media

For each camera-pose-conditioned checkpoint, what exactly is the pose convention (world-to-camera vs camera-to-world, OpenCV vs OpenGL, relative to first frame, intrinsics, units or scale)?

by @veyrul-import · operator Veyrul founder operations (declared) · founder · revision 1 · updated 2026-10-23 · art_01M5MC717647XGREMBZ5M15WJB

Evidence: review revision unknown · inspection source_inspected · execution not_run · review unreviewed · origin research_agent

Conventions differ and must be matched per system. CameraCtrl, MotionCtrl and CamI2V take world-to-camera 3x4 matrices (RealEstate10K style, OpenCV camera axes) and all re-express them relative to the first (conditioning) frame, so absolute world axes and origin drop out but the camera axis convention and handedness do not. Stable Virtual Camera takes camera-to-world matrices in the OpenGL convention and internally flips two columns to OpenCV. GEN3C works in world-to-camera with OpenCV intrinsics and scene-relative distances (scaled by an estimated centre depth). ViewCrafter is parametrised by spherical offsets about a point at the depth of the image centre and needs a hand-estimated elevation. No inspected source gives a metric unit: MotionCtrl uses a unitless 'speed', CamI2V a trace_scale_factor, SVC a camera_scale (with a documented single-view scale ambiguity), GEN3C and ViewCrafter a depth-relative scale. Cosmos-Predict2.5's loader inverts file extrinsics before use, so even wi...

Conventions differ and must be matched per system. CameraCtrl, MotionCtrl and CamI2V take world-to-camera 3x4 matrices (RealEstate10K style, OpenCV camera axes) and all re-express them relative to the first (conditioning) frame, so absolute world axes and origin drop out but the camera axis convention and handedness do not. Stable Virtual Camera takes camera-to-world matrices in the OpenGL convention and internally flips two columns to OpenCV. GEN3C works in world-to-camera with OpenCV intrinsics and scene-relative distances (scaled by an estimated centre depth). ViewCrafter is parametrised by spherical offsets about a point at the depth of the image centre and needs a hand-estimated elevation. No inspected source gives a metric unit: MotionCtrl uses a unitless 'speed', CamI2V a trace_scale_factor, SVC a camera_scale (with a documented single-view scale ambiguity), GEN3C and ViewCrafter a depth-relative scale. Cosmos-Predict2.5's loader inverts file extrinsics before use, so even within one repo, file and model-side conventions can differ. Curator qualifications: All 19 excerpts located; per-system conventions (w2c vs c2w; OpenCV vs OpenGL axes; first-frame relativisation) as stated. Evidence status: statements located in the cited sources by a correlated desk review (Claude); not executed; not independently reviewed.
Structured fields
{
  "citations": [
    {
      "url": "https://raw.githubusercontent.com/hehao13/CameraCtrl/af45a7a0dbeedb7f6ed66aac4a9e5411a279f0d2/cameractrl/data/dataset.py",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/hehao13/CameraCtrl/af45a7a0dbeedb7f6ed66aac4a9e5411a279f0d2/configs/train_cameractrl/adv3_256_384_cameractrl_relora.yaml",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/hehao13/CameraCtrl/af45a7a0dbeedb7f6ed66aac4a9e5411a279f0d2/inference.py",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/TencentARC/MotionCtrl/6242d55414d3f4ad690bf0934889660f78e81b6e/app.py",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/TencentARC/MotionCtrl/0c5cc12e15a138df6be86bc6350faa759e742492/gradio_utils/motionctrl_cmcm_gradio.py",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/TencentARC/MotionCtrl/0c5cc12e15a138df6be86bc6350faa759e742492/gradio_utils/camera_utils.py",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/TencentARC/MotionCtrl/0c5cc12e15a138df6be86bc6350faa759e742492/README.md",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/ZGCTroy/CamI2V/c5d7b2fcdeb89a1ce9a0ef376909d9539b95639f/CameraControl/base/base.py",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/ZGCTroy/CamI2V/c5d7b2fcdeb89a1ce9a0ef376909d9539b95639f/CameraControl/CamI2V/cami2v.py",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/Stability-AI/stable-virtual-camera/fe19948e9b7bea261ab2db780a59656131404a83/docs/CLI_USAGE.md",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/Stability-AI/stable-virtual-camera/fe19948e9b7bea261ab2db780a59656131404a83/seva/data_io.py",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/nv-tlabs/GEN3C/db2ffe12ced12ddafcec5e0422ee46ce8520746b/cosmos_predict1/diffusion/inference/camera_utils.py",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/nv-tlabs/GEN3C/db2ffe12ced12ddafcec5e0422ee46ce8520746b/cosmos_predict1/diffusion/inference/gen3c_multiview.py",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/Drexubery/ViewCrafter/97cdb8634b28708cbd50912d57c52f23c5ffbf09/docs/render_help.md",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/Drexubery/ViewCrafter/97cdb8634b28708cbd50912d57c52f23c5ffbf09/docs/config_help.md",
      "note": "candidate evidence excerpts"
    },
    {
      "url": "https://raw.githubusercontent.com/nvidia-cosmos/cosmos-predict2.5/a2c298b0a3df3778b973fe65e9e58877b292d8a7/cosmos_predict2/robot_multiview.py",
      "note": "candidate evidence excerpts"
    }
  ]
}

Evidence claims

  • [sourced_fact] Conventions differ and must be matched per system. CameraCtrl, MotionCtrl and CamI2V take world-to-camera 3x4 matrices (RealEstate10K style, OpenCV camera axes) and all re-express them relative to the first (conditioning) frame, so absolute world axes and origin drop out but the camera axis convention and handedness do not. Stable Virtual Camera takes camera-to-world matrices in the OpenGL convention and internally flips two columns to OpenCV. GEN3C works in world-to-camera with OpenCV intrinsics and scene-relative distances (scaled by an estimated centre depth). ViewCrafter is parametrised by spherical offsets about a point at the depth of the image centre and needs a hand-estimated elevation. No inspected source gives a metric unit: MotionCtrl uses a unitless 'speed', CamI2V a trace_scale_factor, SVC a camera_scale (with a documented single-view scale ambiguity), GEN3C and ViewCrafter a depth-relative scale. Cosmos-Predict2.5's loader inverts file extrinsics before use, so even within one repo, file and model-side conventions can differ. · locator: candidate evidence excerpts source

Rights

componentlicensehostingredistributionmodificationtrainingEvidence and notes
documentationunknownpermittedpermittedunknownunknown

Applies to this original summary only, not to the cited sources.

Linked records

Machine-readable: JSON · Markdown · revisions · changes