Capture Manager exposes Blueprint and Python functions that connect to capture devices, download takes, and ingest footage and calibration files into Unreal Editor to create capture data assets. This function runs in the editor, without Live Link Hub.
This page covers the in-editor path and provides example snippets. To use Capture Manager from the Live Link Hub application instead, see Python Scripting in the Unreal Engine documentation. That page is the reference for the Live Link Hub download and ingest mechanics, including using LiveLinkHub.exe -ExecutePythonScript and the shipped example scripts such as live_link_face_download_only.py and take_archive_ingest.py.
With the in-editor application programming interface (API), you can:
Connect to capture devices (such as Live Link Face on an iPhone or iPad), list the takes stored on them, and download those takes to local storage.
Ingest takes, standalone video files, and standalone calibration files into Unreal Engine as capture data assets, ready for MetaHuman Animator processing.
A typical workflow is: connect to a device, download takes, then ingest them. Each step is also useful on its own. You can ingest files from disk without connecting to a device, and you can download takes and ingest them later.
The Blueprint and Python functions mirror each other, so the examples on this page show both. The Capture Manager Editor plugin includes more complete Python examples as plugin content.
Asynchronous and Synchronous Operations
Most operations are available in the two forms represented in the table.
| Form | Behavior | Use |
|---|---|---|
Asynchronous (async) | Returns immediately. The operation runs in the background and reports completion, progress, and failure through delegates you bind. | Use this form in a Blueprint event graph, and in any Editor Utility Widget that must stay responsive while a batch downloads. |
Synchronous (sync) | Blocks the calling thread until the operation finishes, then returns its results directly. | Use this form in a Python script that runs start to finish, or anywhere that blocking is acceptable. |
The Python examples use the blocking versions of the relevant functions for simplicity.
Connect to a Device and List Takes
Connect to a device by IP address to start a session. Use the session to retrieve the list of takes stored on the device. The device name is optional (it will default to IP:Port) and is there to add context in callbacks and logging.
You must disconnect from the device when you finish the session.
cmdev = unreal.CaptureManagerDeviceBlueprintLibrary
session, error_code, error_message = cmdev.connect_to_device_sync(
device_name="MyiPhone",
ip_address="192.168.1.100",
port=14785,
timeout_seconds=30
)
takes, error_code, error_message = cmdev.get_device_takes_sync(
Download a Single Take
Download a take from a connected device to a local directory. Pass that directory to an ingest function.
cmdev = unreal.CaptureManagerDeviceBlueprintLibrary
take_dir, error_code, error_message = cmdev.download_device_take_sync(
session=session,
take_name=takes[0].take_name,
download_root_directory="D:/Captures"
)
Batch Download with Filtering
Download multiple takes in one operation, optionally filtering by slate, date, or size. To cancel a batch in progress, call Cancel Batch Download with the session.
Filter Takes
Before starting a batch download, you can use the take filter functions to narrow the list.
cmdev = unreal.CaptureManagerDeviceBlueprintLibrary
cmbatch = unreal.CaptureManagerDeviceBatchDownloadLibrary
takes, error_code, error_msg = cmdev.get_device_takes_sync(session)
filtered = [t for t in takes if 'my_slate' in t.slate.lower()]
results = cmbatch.download_device_takes_batch_sync(
session=session,
takes=filtered,
Ingest a LiveLink Face Capture
Ingest a Live Link Face take directory — the folder structure that Live Link Face writes, or that a device download produces.
cmi = unreal.CaptureManagerIngestBlueprintLibrary
footage, error_message = cmi.ingest_live_link_face_sync(
take_directory_path="D:/Captures/MyTake",
params=unreal.CaptureManagerConversionParams()
)Ingest Video from Disk
Ingest video files directly from disk, without downloading from a device.
Mono Video
Ingest a single-camera video file (.mp4 or .mov). Optionally provide a separate audio file, slate name, and take number.
Stereo Video
Ingest a dual-camera stereo capture. Provide two video files (.mp4 or .mov) or two image-sequence folders. Optionally include a calibration file and audio.
cmi = unreal.CaptureManagerIngestBlueprintLibrary
# Mono
footage, error_message = cmi.ingest_mono_video_sync(
video_file_path="D:/Video/scene01.mp4",
audio_file_path="",
slate="Scene_01",
take_number=1,
params=unreal.CaptureManagerConversionParams()
)
Ingest a Take Archive
Ingest a .cptake archive file
cmi = unreal.CaptureManagerIngestBlueprintLibrary
footage, error_message = cmi.ingest_take_archive_sync(
take_archive_path="D:/Captures/MyTake",
params=unreal.CaptureManagerConversionParams()
)
Scan a Directory for Capture Content
Scan a directory to discover what capture content it contains, then pass each result to the matching ingest function.
When Is Take Archive is true, the file arrays such as Video Files are empty. The .cptake manifest is the authoritative source of that information, so pass the directory path directly to Ingest Take Archive instead of reading the arrays.
cmi = unreal.CaptureManagerIngestBlueprintLibrary
dirs = cmi.find_take_directories(
search_directory="D:/Captures",
recursive=True
)
for d in dirs:
if d.is_take_archive:
footage, error_message = cmi.ingest_take_archive_sync(
Ingest a Calibration File
Ingest a standalone JSON calibration file. The resulting Footage Capture Data asset exposes the imported Camera Calibration asset in its camera_calibrations array.
cmi = unreal.CaptureManagerIngestBlueprintLibrary
footage, error_message = cmi.ingest_calibration_sync(
calibration_file_path="D:/Calibration/calib.json",
calibration_name="StudioA_Calibration"
)
calibration = footage.camera_calibrations[0]
Download from a Device and Ingest in One Workflow
This workflow connects to a device, filters and downloads takes, ingests each one into Unreal Engine, then disconnects.
cmdev = unreal.CaptureManagerDeviceBlueprintLibrary
cmi = unreal.CaptureManagerIngestBlueprintLibrary
cmbatch = unreal.CaptureManagerDeviceBatchDownloadLibrary
session, error_code, error_message = cmdev.connect_to_device_sync(
device_name="MyiPhone",
ip_address="192.168.1.100",
port=14785,
timeout_seconds=30
)
Cancellation
Both download and ingest operations support cancellation.
Downloads: Call Cancel Device Download with the session and take name to cancel a single download. Call Cancel Batch Download to cancel an entire batch. The current take and all remaining takes fail with a Canceled error. To detect this, check the Success and Error Message members of each batch result.
Ingests: Each asynchronous ingest function returns an Ingest ID. Pass it to Cancel Ingest to stop a queued or running ingest. Queued ingests are removed immediately. Running ingests stop at their next cancellation checkpoint and clean up partial output.
Editor Preferences and Storage Locations
Download and ingest in Unreal Editor use the same settings mechanisms that exist in Live Link Hub. Configure storage, ingest, and conversion settings through the Capture Manager plugin's settings in Editor Preferences.