# How to Configure ProRes Encoding Profiles in Remotion: A Complete Guide

> Master ProRes encoding profiles in Remotion. Learn to configure using Config.setProresProfile, CLI flags, or the renderMedia API for optimal video output.

- Repository: [Remotion/remotion](https://github.com/remotion-dev/remotion)
- Tags: how-to-guide
- Published: 2026-02-16

---

**You can configure Apple ProRes encoding profiles in Remotion using `Config.setProResProfile()` in your configuration file, the `--prores-profile` CLI flag, or the `proResProfile` option in the `renderMedia()` API.**

The remotion-dev/remotion repository provides first-class support for Apple ProRes, a professional-grade intermediate codec widely used in video production workflows. Configuring the correct **ProRes encoding profile** ensures your output matches the quality and color-depth requirements of your post-production pipeline, whether you need high-quality 4:2:2 sampling or full-alpha 4:4:4:4 support.

## What Are ProRes Encoding Profiles?

ProRes profiles determine the compression ratio, bitrate, and color sampling of your video output. Remotion supports six distinct profiles that map to Apple's standard variants:

- **4444-xq**: Maximum quality 4:4:4:4 with alpha, 12-bit color depth
- **4444**: High-quality 4:4:4:4 with alpha, 12-bit color depth
- **hq** (default): High-quality 4:2:2, 10-bit color depth
- **standard**: Standard 4:2:2, 10-bit color depth
- **light**: Light 4:2:2, 10-bit color depth (smaller files)
- **proxy**: Proxy 4:2:2, 10-bit color depth (smallest files)

## Configuration Methods in Remotion

Remotion provides three interfaces for setting your ProRes profile, all converging on the same internal configuration system.

### Using the Config API in remotion.config.ts

The most common approach is setting the profile globally in your configuration file. In [`packages/cli/src/config/prores-profile.ts`](https://github.com/remotion-dev/remotion/blob/main/packages/cli/src/config/prores-profile.ts), the `setProResProfile()` function stores your selection in a module-scoped variable:

```typescript
// remotion.config.ts
import {Config} from '@remotion/cli/config';

// Set to Apple ProRes 4444 for alpha channel support
Config.setProResProfile('4444');

```

### Using CLI Flags

You can override the configuration file setting via the command line. The `--prores-profile` flag is parsed in [`packages/cli/src/parse-command-line.ts`](https://github.com/remotion-dev/remotion/blob/main/packages/cli/src/parse-command-line.ts) and forwarded to the same setter:

```bash
npx remotion render src/index.ts MyComposition out/video.mov \
  --codec prores \
  --prores-profile hq

```

### Programmatic Access in Components

If you need to read the currently configured profile at runtime, Remotion exposes internal getters through `ConfigInternals`:

```typescript
import {ConfigInternals} from '@remotion/cli/config';

const currentProfile = ConfigInternals.getProResProfile(); 
// Returns: 'hq' | '4444' | '4444-xq' | 'standard' | 'light' | 'proxy' | undefined

```

## How Remotion Processes ProRes Profiles Internally

Understanding the internal pipeline helps debug configuration issues. When you specify a profile, Remotion executes a five-stage validation and translation process:

1. **Configuration Storage**: Your profile is stored in [`packages/cli/src/config/prores-profile.ts`](https://github.com/remotion-dev/remotion/blob/main/packages/cli/src/config/prores-profile.ts) via `setProResProfile()`.

2. **Validation**: Before rendering, `validateSelectedCodecAndProResCombination()` in [`packages/renderer/src/prores-profile.ts`](https://github.com/remotion-dev/remotion/blob/main/packages/renderer/src/prores-profile.ts) ensures the codec is `prores` and the profile string is valid. This function throws a `TypeError` if you attempt to use a ProRes profile with an incompatible codec like `h264`.

3. **FFmpeg Translation**: The symbolic profile name (e.g., `'4444'`) must be converted to FFmpeg's numeric identifiers. The function `getProResProfileName()` in [`packages/renderer/src/get-prores-profile-name.ts`](https://github.com/remotion-dev/remotion/blob/main/packages/renderer/src/get-prores-profile-name.ts) performs this mapping:
   - `'proxy'` → `'0'`
   - `'light'` → `'1'`
   - `'standard'` → `'2'`
   - `'hq'` → `'3'`
   - `'4444'` → `'4'`
   - `'4444-xq'` → `'5'`

4. **Video Stitching**: The numeric value is injected into the FFmpeg command as `-profile:v <num>` in [`packages/renderer/src/stitch-frames-to-video.ts`](https://github.com/remotion-dev/remotion/blob/main/packages/renderer/src/stitch-frames-to-video.ts) and [`packages/renderer/src/prespawn-ffmpeg.ts`](https://github.com/remotion-dev/remotion/blob/main/packages/renderer/src/prespawn-ffmpeg.ts).

5. **Default Handling**: If no profile is specified, `getProResProfile()` returns `undefined`, and the system defaults to `'hq'` (high quality 4:2:2).

## Complete Implementation Examples

### Example 1: High-Quality Editing Intermediate

For sending footage to DaVinci Resolve or Final Cut Pro:

```typescript
// remotion.config.ts
import {Config} from '@remotion/cli/config';

Config.setCodec('prores');
Config.setProResProfile('hq'); // 4:2:2, 10-bit, high quality

```

### Example 2: Alpha Channel for Compositing

When you need transparency in your output:

```typescript
// remotion.config.ts
import {Config} from '@remotion/cli/config';

Config.setCodec('prores');
Config.setProResProfile('4444'); // 4:4:4:4 with alpha, 12-bit

```

### Example 3: CLI Batch Rendering

Rendering multiple compositions with different profiles:

```bash

# Render proxy version for offline editing

npx remotion render src/index.ts Comp out/proxy.mov --codec prores --prores-profile proxy

# Render HQ version for final delivery

npx remotion render src/index.ts Comp out/final.mov --codec prores --prores-profile hq

```

### Example 4: Programmatic Rendering with renderMedia

When using the Node.js API directly:

```typescript
import {renderMedia} from '@remotion/renderer';
import {ConfigInternals} from '@remotion/cli/config';

// Set configuration
Config.setCodec('prores');
Config.setProResProfile('4444-xq');

await renderMedia({
  composition: myComposition,
  serveUrl: bundled,
  codec: 'prores',
  proResProfile: ConfigInternals.getProResProfile(), // '4444-xq'
  outputLocation: 'out/video.mov',
});

```

## Summary

- **ProRes profiles** in Remotion control bitrate, color depth, and alpha channel support through six variants: `4444-xq`, `4444`, `hq`, `standard`, `light`, and `proxy`.
- **Configuration** happens via `Config.setProResProfile()` in [`remotion.config.ts`](https://github.com/remotion-dev/remotion/blob/main/remotion.config.ts), the `--prores-profile` CLI flag, or the `proResProfile` option in `renderMedia()`.
- **Internal pipeline**: The renderer validates your selection in [`packages/renderer/src/prores-profile.ts`](https://github.com/remotion-dev/remotion/blob/main/packages/renderer/src/prores-profile.ts), translates symbolic names to FFmpeg numeric values in [`get-prores-profile-name.ts`](https://github.com/remotion-dev/remotion/blob/main/get-prores-profile-name.ts), and injects `-profile:v` during stitching in [`stitch-frames-to-video.ts`](https://github.com/remotion-dev/remotion/blob/main/stitch-frames-to-video.ts).
- **Default behavior**: If unspecified, Remotion defaults to the **`hq`** profile (high-quality 4:2:2, 10-bit).

## Frequently Asked Questions

### What is the default ProRes profile in Remotion?

If you do not explicitly call `Config.setProResProfile()` or pass the `--prores-profile` flag, Remotion defaults to **`hq`**. This corresponds to Apple ProRes 422 HQ, which provides high-quality 4:2:2 chroma subsampling with 10-bit color depth. The default is enforced in the validation layer when the internal profile variable is `undefined`.

### Can I use ProRes profiles with other codecs like H.264 or HEVC?

No. The function `validateSelectedCodecAndProResCombination()` in [`packages/renderer/src/prores-profile.ts`](https://github.com/remotion-dev/remotion/blob/main/packages/renderer/src/prores-profile.ts) explicitly throws a `TypeError` if you specify a ProRes profile while using any codec other than `prores`. ProRes profiles are tightly coupled to the Apple ProRes codec and have no meaning in the context of H.264, HEVC, or VP8 encoding.

### How do I verify which ProRes profile was used in my output video?

You can inspect the generated FFmpeg command by enabling verbose logging, or you can analyze the output file using `ffprobe`. The numeric profile value (e.g., `3` for `hq`, `4` for `4444`) is passed to FFmpeg as `-profile:v` during the stitching phase in [`packages/renderer/src/stitch-frames-to-video.ts`](https://github.com/remotion-dev/remotion/blob/main/packages/renderer/src/stitch-frames-to-video.ts). Running `ffprobe -v error -select_streams v:0 -show_entries stream=profile -of default=noprint_wrappers=1 out.mov` will display the numeric profile identifier used.

### Is ProRes encoding slower than H.264 in Remotion?

Generally, yes. ProRes is an intermediate codec designed for editing quality rather than compression efficiency. While Remotion's rendering speed is primarily determined by the complexity of your React components and the `concurrency` setting, the final FFmpeg stitching step will typically produce larger files and may take longer to encode with ProRes compared to H.264 or HEVC, especially when using high-bitrate profiles like `4444-xq` or `4444`.