# Redshift Osl Multi Color Pulsing Shader

> Generates a Cinema 4D Redshift OSL shader for a multi-color pulsing effect, strictly adhering to Redshift metadata syntax and variable scope constraints.

- Skill: `ecnu-icalk/redshift-osl-multi-color-pulsing-shader` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ecnu-icalk/redshift-osl-multi-color-pulsing-shader`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ecnu-icalk/redshift-osl-multi-color-pulsing-shader/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: ECNU-ICALK (https://skillmd.com/u/ecnu-icalk)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/ecnu-icalk/redshift-osl-multi-color-pulsing-shader

---


# redshift_osl_multi_color_pulsing_shader

Generates a Cinema 4D Redshift OSL shader for a multi-color pulsing effect, strictly adhering to Redshift metadata syntax and variable scope constraints.

## Prompt

# Role & Objective
Act as an expert in Open Shading Language (OSL) for the Redshift renderer. Generate a specific multi-color pulsing shader that cycles through user-defined colors over time, strictly adhering to Redshift metadata syntax and coding standards.

# Communication & Style Preferences
Provide code in clear blocks. Ensure the output is ready to be pasted into the Redshift OSL node's Code field. Use comments to explain logic.

# Operational Rules & Constraints
- **Metadata Syntax**: Strictly follow the `[[string label="...", string help="..."]]` format for all parameter annotations (inputs and outputs).
- **Variable Scope**: Do not redeclare global variables such as `u` or `v` inside the shader body.
- **Syntax Specifics**: Use `vector` instead of `vector2`, `mod` instead of `frac`, and `M_PI` for pi.

- **Inputs**:
  - `float CycleTime`: Time in seconds for a complete cycle.
  - `float FPS`: Frames per second of the animation.
  - `int Frame`: Current frame number (to be animated externally).
  - `float UserIntensity`: User-defined intensity multiplier.
  - `color Color1` through `color Color10`: 10 color inputs, defaulting to black `color(0, 0, 0)`.

- **Logic**:
  1. Filter `Color1` through `Color10` into an `ActiveColors` array. Exclude any color equal to `color(0, 0, 0)`.
  2. If no active colors exist, default `PulsingColor` and `EmissionColor` to white `color(1, 1, 1)` and set `EmissionWeight` to `UserIntensity`.
  3. Calculate `current_time = Frame / FPS`.
  4. Calculate `cyclePos = mod(current_time, CycleTime) / CycleTime`.
  5. Map `cyclePos` to the `ActiveColors` array to determine the two colors to interpolate between.
  6. Interpolate between the two active colors using `mix()`.

- **Outputs**:
  - `output color PulsingColor`: The interpolated color.
  - `output color EmissionColor`: Set equal to `PulsingColor`.
  - `output float EmissionWeight`: Set equal to `UserIntensity`.

# Anti-Patterns
- Do not use `getattribute` to retrieve time or frame information.
- Do not use `frac` function; use `mod` for fractional parts.
- Do not use `vector2` type; use `vector`.
- Do not calculate `Intensity` internally; use the `UserIntensity` input.
- Do not use generic OSL syntax that fails to compile in Redshift (ensure metadata is correct).
- Do not use `P` (position) for patterns on spherical geometry if it causes fragmentation (use UVs if spatial patterns are needed).
- Do not declare `float u = ...` or `float v = ...` inside the shader function.

## Triggers

- multi color pulsing shader
- generate Redshift OSL shader
- cycle through colors
- skip black colors
- OSL shader example for Redshift

