---
title: "ClikaRT::processor::VideoProcessor"
sidebar_label: "VideoProcessor"
description: "A config-driven video preprocessor: temporal frame sampling composed over the channels-last image pipeline. Move-only. It operates on ALREADY-DECODED frames; ClikaRT ships no video reader."
---

<!-- Generated by tools/doxygen2mdx from Doxygen XML. Do not edit. -->

<span class="api-kind api-kind--class">class</span>

**Header:** `ClikaRT/processor/processor.h`

A config-driven video preprocessor: temporal frame sampling composed over the channels-last image pipeline. Move-only.

It operates on ALREADY-DECODED frames; [ClikaRT](../../index.md) ships no video reader. Pass a `[T, H, W, C]` UInt8 [`Tensor`](../Tensor.md) (or per-frame encoded images); it samples (`num_frames` / `fps`) and runs the per-frame image pipeline, returning a channels-last clip `[num_sampled, H, W, C]` Float32. Every fallible operation returns [`Result`](../Result.md)`<T>`; the library never throws.

## Static member functions

### from\_huggingface() {#from_huggingface}

<div class="api-signature">

`static` [`VideoProcessor`](./VideoProcessor.md) **`from_huggingface`**(`std::string_view` `path`, [`StreamOrDevice`](../StreamOrDevice.md) `where` `=` `{}`)

</div>

Load a HuggingFace video preprocessor (`preprocessor_config.json`). `path` is the model directory OR the json file itself. `where` binds the default placement. `path` is copied, not retained.

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 368

</div>

### from\_directory() {#from_directory}

<div class="api-signature">

`static` [`VideoProcessor`](./VideoProcessor.md) **`from_directory`**(`std::string_view` `path`, [`StreamOrDevice`](../StreamOrDevice.md) `where` `=` `{}`)

</div>

Load from a model directory, detecting the preprocessor format present (currently HuggingFace). `path` is copied, not retained.

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 373

</div>

### from\_config() {#from_config}

<div class="api-signature">

`static` [`VideoProcessor`](./VideoProcessor.md) **`from_config`**(`const` [`VideoProcessorConfig`](./VideoProcessorConfig.md)`&` `config`, [`StreamOrDevice`](../StreamOrDevice.md) `where` `=` `{}`)

</div>

Build from an explicit config; no config file needed. `config` is read during the call.

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 378

</div>

### from\_args() {#from_args}

<div class="api-signature">

`static` [`VideoProcessor`](./VideoProcessor.md) **`from_args`**(<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::optional<`[`ImageProcessorConfig`](./ImageProcessorConfig.md)`>` `image` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::optional<std::int64_t>` `num_frames` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::optional<double>` `fps` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`StreamOrDevice`](../StreamOrDevice.md) `where` `=` `{}`<br />
)

</div>

Build directly from the COMMON knobs: no config file, no config object. The per-frame spatial pipeline comes from `image` (its own [`from_args`](./VideoProcessor.md#from_args)-style config; `{}` = image defaults); `num_frames` / `fps` set the temporal sampling (`{}` = keep all / use num\_frames). For full control build a [`VideoProcessorConfig`](./VideoProcessorConfig.md) and use [`from_config`](./VideoProcessor.md#from_config).

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 386

</div>

## Member functions

### VideoProcessor() {#VideoProcessor}

<div class="api-signature">

**`VideoProcessor`**(`VideoProcessor&&`) `noexcept`

</div>

move-construct (the source becomes an empty shell)

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 398

</div>

### operator=() {#operator-assign}

<div class="api-signature">

[`VideoProcessor`](./VideoProcessor.md)`&` **`operator=`**([`VideoProcessor`](./VideoProcessor.md)`&&`) `noexcept`

</div>

move-assign

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 399

</div>

### \~VideoProcessor() {#VideoProcessor-2}

<div class="api-signature">

**`~VideoProcessor`**()

</div>

destructor

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 400

</div>

### process(Tensor, VideoMetadata, StreamOrDevice) {#process}

<div class="api-signature">

[`Tensor`](../Tensor.md) **`process`**(<br />
&nbsp;&nbsp;&nbsp;&nbsp;`const` [`Tensor`](../Tensor.md)`&` `frames`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`VideoMetadata`](./VideoMetadata.md) `meta` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`StreamOrDevice`](../StreamOrDevice.md) `where` `=` `{}`<br />
) `const`

</div>

Already-decoded frames `[T, H, W, C]` (UInt8) → sampled + per-frame processed `[num_sampled, H', W', C]` Float32. `frames` is read during the call. `where` overrides the bound placement.

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 406

</div>

### process(Span\< Span\< uint8\_t\>\>, VideoMetadata, StreamOrDevice) {#process-2}

<div class="api-signature">

[`Tensor`](../Tensor.md) **`process`**(<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`ClikaRT::Span`](../Span.md)`<const` [`ClikaRT::Span`](../Span.md)`<const std::uint8_t>>` `frames`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`VideoMetadata`](./VideoMetadata.md) `meta` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`StreamOrDevice`](../StreamOrDevice.md) `where` `=` `{}`<br />
) `const`

</div>

Already-decoded frames `[T, H, W, C]` (UInt8) → sampled + per-frame processed `[num_sampled, H', W', C]` Float32. `frames` is read during the call. `where` overrides the bound placement.

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 411

</div>

### process(Tensor, VideoProcessOptions, VideoMetadata, StreamOrDevice) {#process-3}

<div class="api-signature">

[`Tensor`](../Tensor.md) **`process`**(<br />
&nbsp;&nbsp;&nbsp;&nbsp;`const` [`Tensor`](../Tensor.md)`&` `frames`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`const` [`VideoProcessOptions`](./VideoProcessOptions.md)`&` `options`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`VideoMetadata`](./VideoMetadata.md) `meta` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`StreamOrDevice`](../StreamOrDevice.md) `where` `=` `{}`<br />
) `const`

</div>

Already-decoded frames `[T, H, W, C]` (UInt8) → sampled + per-frame processed `[num_sampled, H', W', C]` Float32. `frames` is read during the call. `where` overrides the bound placement.

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 420

</div>

### process(Span\< Span\< uint8\_t\>\>, VideoProcessOptions, VideoMetadata, StreamOrDevice) {#process-4}

<div class="api-signature">

[`Tensor`](../Tensor.md) **`process`**(<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`ClikaRT::Span`](../Span.md)`<const` [`ClikaRT::Span`](../Span.md)`<const std::uint8_t>>` `frames`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`const` [`VideoProcessOptions`](./VideoProcessOptions.md)`&` `options`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`VideoMetadata`](./VideoMetadata.md) `meta` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`StreamOrDevice`](../StreamOrDevice.md) `where` `=` `{}`<br />
) `const`

</div>

Already-decoded frames `[T, H, W, C]` (UInt8) → sampled + per-frame processed `[num_sampled, H', W', C]` Float32. `frames` is read during the call. `where` overrides the bound placement.

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 425

</div>

### process(string\_view, VideoProcessOptions, StreamOrDevice) {#process-5}

<div class="api-signature">

[`Tensor`](../Tensor.md) **`process`**(<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::string_view` `path`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`const` [`VideoProcessOptions`](./VideoProcessOptions.md)`&` `options` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`StreamOrDevice`](../StreamOrDevice.md) `where` `=` `{}`<br />
) `const`

</div>

Already-decoded frames `[T, H, W, C]` (UInt8) → sampled + per-frame processed `[num_sampled, H', W', C]` Float32. `frames` is read during the call. `where` overrides the bound placement.

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 438

</div>

### process(Span\< uint8\_t\>, VideoProcessOptions, StreamOrDevice) {#process-6}

<div class="api-signature">

[`Tensor`](../Tensor.md) **`process`**(<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`ClikaRT::Span`](../Span.md)`<const std::uint8_t>` `bytes`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`const` [`VideoProcessOptions`](./VideoProcessOptions.md)`&` `options` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`StreamOrDevice`](../StreamOrDevice.md) `where` `=` `{}`<br />
) `const`

</div>

Already-decoded frames `[T, H, W, C]` (UInt8) → sampled + per-frame processed `[num_sampled, H', W', C]` Float32. `frames` is read during the call. `where` overrides the bound placement.

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 442

</div>

### process\_with\_indices(string\_view, VideoProcessOptions, StreamOrDevice) {#process_with_indices}

<div class="api-signature">

[`ProcessedVideo`](./ProcessedVideo.md) **`process_with_indices`**(<br />
&nbsp;&nbsp;&nbsp;&nbsp;`std::string_view` `path`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`const` [`VideoProcessOptions`](./VideoProcessOptions.md)`&` `options` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`StreamOrDevice`](../StreamOrDevice.md) `where` `=` `{}`<br />
) `const`

</div>

A video file → the processed clip + sampling metadata.

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 451

</div>

### process\_with\_indices(Span\< uint8\_t\>, VideoProcessOptions, StreamOrDevice) {#process_with_indices-2}

<div class="api-signature">

[`ProcessedVideo`](./ProcessedVideo.md) **`process_with_indices`**(<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`ClikaRT::Span`](../Span.md)`<const std::uint8_t>` `bytes`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`const` [`VideoProcessOptions`](./VideoProcessOptions.md)`&` `options` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`StreamOrDevice`](../StreamOrDevice.md) `where` `=` `{}`<br />
) `const`

</div>

A video file → the processed clip + sampling metadata.

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 455

</div>

### process\_with\_indices(Tensor, VideoMetadata, VideoProcessOptions, StreamOrDevice) {#process_with_indices-3}

<div class="api-signature">

[`ProcessedVideo`](./ProcessedVideo.md) **`process_with_indices`**(<br />
&nbsp;&nbsp;&nbsp;&nbsp;`const` [`Tensor`](../Tensor.md)`&` `frames`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`VideoMetadata`](./VideoMetadata.md) `meta` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`const` [`VideoProcessOptions`](./VideoProcessOptions.md)`&` `options` `=` `{}`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;[`StreamOrDevice`](../StreamOrDevice.md) `where` `=` `{}`<br />
) `const`

</div>

A video file → the processed clip + sampling metadata.

<div class="api-declared">

Declared in `ClikaRT/processor/processor.h`, line 460

</div>
