---
title: "How to add a teal and orange with Claude (tested prompt and script)"
description: "The cream label turns a warm peachy orange while the pale holographic backdrop and the purple bottle swing to cool teal, for the blockbuster two-tone grade. Install one skill and ask Claude Code, or run the Python script we tested yourself."
url: https://www.recharm.com/effects/teal-and-orange
---

# How to add a teal and orange with Claude

The cream label turns a warm peachy orange while the pale holographic backdrop and the purple bottle swing to cool teal, for the blockbuster two-tone grade.

Made by the script on this page, from our own test clip.

## Get this effect

1. ### Switch to Code in your [Claude Desktop App](https://claude.com/download)

2. ### Install the skill (once)

   ```
   Install the Recharm video effects skill: download https://recharm-growth-staging.s3.us-east-2.amazonaws.com/website/downloads/recharm-video-effects.zip and unzip it into ~/.claude/skills
   ```

3. ### Ask for the effect

   ```
   Add a teal and orange to input.mp4
   How hard the tint is pushed: 0.55
   The color cool areas lean toward: (40, 160, 170)
   ```

## Several videos, several effects, one ask

Put your clips in the folder, mention them with @, and ask for everything at once. Claude runs one tested script after another on each clip, then joins them.

Add a teal and orange to **@clip1.mp4**, put a sale badge on **@clip2.mp4**, give **@clip3.mp4** a VHS look, then join all three with crossfades.

## Settings you can change

Ask Claude to change any of these, or edit them at the top of the script.

| Setting        | Default          | What it does                                                                                    |
| -------------- | ---------------- | ----------------------------------------------------------------------------------------------- |
| `STRENGTH`     | `0.55`           | How hard the tint is pushed. 0 leaves the clip alone, 1 is a heavy grade.                       |
| `TEAL`         | `(40, 160, 170)` | The color cool areas lean toward.                                                               |
| `ORANGE`       | `(255, 150, 60)` | The color warm areas lean toward.                                                               |
| `SOFTNESS`     | `8`              | How gently a pixel moves from teal to orange as red overtakes blue. Lower gives a harder split. |
| `SHADOW_LEVEL` | `80`             | Pixels darker than this lean teal whatever their color.                                         |
| `DESATURATE`   | `0.4`            | Share of each pixel's own color dropped so the two tints read cleanly.                          |

## Without the skill

Don’t want to install the skill? Paste this prompt into Claude Code and Claude writes the script itself.

```
Give all of input.mp4 a teal and orange grade, on every frame from start to end. For each pixel (RGB, 0-255): take its brightness Y = 0.299R + 0.587G + 0.114B; work out how warm it is as w = 1 / (1 + e^(-(R - B) / 8)), then multiply w by min(Y / 80, 1) so dark pixels count as cool; build a tint by blending from the teal offset (40, 160, 170) minus its own brightness to the orange offset (255, 150, 60) minus its own brightness by w (brightness with the same 0.299/0.587/0.114 weights); then the new pixel is Y + 0.6 x (pixel - Y) + 0.55 x tint, clipped to 0-255. Warm areas like the cream label should end up peachy orange, around RGB (225, 180, 135), and cool areas like the pale backdrop around RGB (150, 215, 225); the purple bottle turns a slate teal-blue. Do it in Python with numpy, piping raw frames from and back to ffmpeg. Keep the size, 30fps frame rate, length and audio the same, encode H.264 yuv420p and save it as output.mp4.
```

## Run it without Claude

This is the exact script we tested. Save it as `teal-and-orange.py` and run:

```
python3 teal-and-orange.py input.mp4 output.mp4
```

```
"""Teal and orange: warm colors (skin, labels, wood) pushed toward orange, everything cool and dark toward teal.
Usage: python3 teal-and-orange.py input.mp4 output.mp4
Needs Python 3 with numpy, and ffmpeg.
"""
import subprocess
import sys

import numpy as np

STRENGTH = 0.55          # how hard the tint is pushed (0 leaves the clip alone, 1 is a heavy grade)
TEAL = (40, 160, 170)    # the color cool areas lean toward
ORANGE = (255, 150, 60)  # the color warm areas lean toward
SOFTNESS = 8             # how gently a pixel moves from teal to orange as red overtakes blue
SHADOW_LEVEL = 80        # pixels darker than this lean teal whatever their color
DESATURATE = 0.4         # share of each pixel's own color dropped, so the two tints read cleanly

src, dst = sys.argv[1], sys.argv[2]
w, h = map(int, subprocess.check_output(
    ["ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries", "stream=width,height",
     "-of", "csv=p=0", src], text=True).strip().split(","))

LUMA = np.array([0.299, 0.587, 0.114], np.float32)
teal = np.array(TEAL, np.float32) - np.dot(TEAL, LUMA)        # teal's color with its brightness removed
orange = np.array(ORANGE, np.float32) - np.dot(ORANGE, LUMA)

def grade(rgb):
    y = (rgb @ LUMA)[..., None]
    # 0 = cool, 1 = warm, by how far red is above blue; dark pixels count as cool
    warm = 1 / (1 + np.exp(-(rgb[..., :1] - rgb[..., 2:]) / SOFTNESS))
    warm *= np.clip(y / SHADOW_LEVEL, 0, 1)
    tint = teal + (orange - teal) * warm
    out = y + (rgb - y) * (1 - DESATURATE) + tint * STRENGTH
    return np.clip(out, 0, 255).astype(np.uint8)

reader = subprocess.Popen(["ffmpeg", "-v", "error", "-i", src, "-vf", "fps=30", "-f", "rawvideo", "-pix_fmt", "rgb24", "-"],
                          stdout=subprocess.PIPE)
writer = subprocess.Popen(["ffmpeg", "-y", "-v", "error", "-f", "rawvideo", "-pix_fmt", "rgb24", "-s", f"{w}x{h}", "-r", "30",
                           "-i", "-", "-i", src, "-map", "0:v", "-map", "1:a?", "-c:v", "libx264", "-crf", "18",
                           "-pix_fmt", "yuv420p", "-c:a", "copy", "-shortest", dst], stdin=subprocess.PIPE)
size = w * h * 3
while True:
    buf = reader.stdout.read(size)
    if len(buf) < size:
        break
    frame = np.frombuffer(buf, np.uint8).reshape(h, w, 3).astype(np.float32)
    writer.stdin.write(grade(frame).tobytes())
writer.stdin.close()
sys.exit(reader.wait() or writer.wait())
```

## More color looks

- [Apply a LUT **Apply a LUT**](https://www.recharm.com/effects/apply-a-lut)
- [Black and white **Black and white**](https://www.recharm.com/effects/black-and-white)
- [Bleach bypass **Bleach bypass**](https://www.recharm.com/effects/bleach-bypass)
- [Cinematic color grade **Cinematic color grade**](https://www.recharm.com/effects/cinematic-color-grade)
- [Color match **Color match**](https://www.recharm.com/effects/color-match)

## Find 3x _winning ads_

Recharm cuts your ad footage into tagged, searchable clips: hooks, testimonials, product shots. Find the shots that win, add the effect with Claude, and ship 3x more ad edits.

[Start 14-day free trial](https://www.recharm.com/get-started)
