Get this effect
Switch to Code in your Claude Desktop App
Install the skill (once)
Show the prompt
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/skillsAsk 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.
Show the prompt
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.mp4Show the script
"""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())





