# BlinkScript

> Runs a Blink kernel on the GPU.

Runs a Blink kernel on the GPU. Edit the kernel source, press Recompile (Ctrl+Enter); params become knobs, images become inputs. Scatter writes, reduction / rolling / particle kernels are not supported. Specify Output Format sets the output size; otherwise it follows the first input.

| Node | BlinkScript |
|---|---|
| Menu | Other › BlinkScript |
| **Names in each format** | |
| .oink comp (JSON) | `"type": "OC_N_blinkscript"` |
| .nk script | `BlinkScript` ([how .nk import works](/docs/nuke-users/nk-import)) |
| Python | `nuke.createNode("BlinkScript")` |
| Assistant (MCP) | `create_node(type="BlinkScript")` |
| Tab search | `blinkscript`, or its initials `bs` |

![BlinkScript properties](/shots/nodes/blinkscript@2x.webp)

## Inputs and outputs

| Port | Name | Type |
|---|---|---|
| input 0 | src | image |
| output 0 | Image | image |

## Knobs

Knobs from the node definition (this node has no panel layout in the app yet).

| Knob | Label | Type | Default | Range / values | .nk knob | Description |
|---|---|---|---|---|---|---|
| `gl_color` | Viewer Controls Color | float ×3 | `0, 0, 0` | 0 to 1 |  |  |
| `postage_stamp_frame` | Static Frame | int | `1` | -2147483648 to 2147483647 |  |  |
| `lifetimeStart` | Lifetime Start | int | `0` | -2147483648 to 2147483647 |  |  |
| `lifetimeEnd` | Lifetime End | int | `100` | -2147483648 to 2147483647 |  |  |
| `useLifetime` | Use Lifetime | boolean | `false` |  |  |  |
| `cached` | Cached | boolean | `false` |  |  |  |
| `bookmark` | Bookmark | boolean | `false` |  |  |  |
| `dope_sheet` | Dope Sheet | boolean | `false` |  |  |  |
| `clone_group` | Clone Group | string |  |  |  |  |
| `link_source` | Link Source | string |  |  |  |  |
| `link_overrides` | Link Overrides | string |  |  |  |  |
| `split_views` | Split Views | string |  |  |  |  |
| `kernel_source` | Kernel Source | string | `// Saturation: scale colour away from / towards its Rec.709 luma.
kernel SaturationKernel : ImageComputationKernel<ePixelWise>
{
  Image<eRead, eAccessPoint, eEdgeClamped> src;
  Image<eWrite> dst;

param:
  float saturation;

local:
  float3 weights;

  void define() {
    defineParam(saturation, "Saturation", 1.2f);
  }

  void init() {
    weights = float3(0.2126f, 0.7152f, 0.0722f);
  }

  void process() {
    SampleType(src) in = src();
    float3 rgb(in.x, in.y, in.z);
    float luma = dot(rgb, weights);
    float3 result = (rgb - luma) * saturation + luma;
    dst() = float4(result.x, result.y, result.z, in.w);
  }
};
` |  |  |  |
| `kernel_knobs` | Kernel Knobs | string | `[]` |  |  |  |
| `kernel_values` | Kernel Values | string | `{}` |  |  |  |
| `kernel_info` | Kernel Info | string | `{}` |  |  |  |
| `compile_error` | Compile Error | string |  |  |  |  |
| `recompile_count` | Recompile | int | `0` | -2147483648 to 2147483647 |  |  |
| `specify_format` | Specify Output Format | boolean | `false` |  |  |  |
| `format` | Output Format | enum |  |  |  |  |

## Examples

Open these from **Help › Examples…**, or from the **?** menu in this node's Properties panel.

- **BlinkScript kernel** (`examples/blink/blinkscript_saturation.oink`): The default BlinkScript kernel (a saturation kernel written in Nuke's Blink language) running on the GPU through Oink's Blink-to-GLSL translator. Edit the kernel source in the properties and recompile.


---
Sources: opencomp_core/nodes/filter/blinkscript.py, opencomp_electron/src/components/properties/knobSchema.ts, opencomp_core/nodes/help/blinkscript.md, opencomp_core/nk/mapping.py
