CompStart

ProLessonsCoursesElementsSoftware

CompStart

Master visual effects with cutting-edge techniques.

Learning

CoursesLessonsPro FeaturesAssetsSoftware

Tools

Tech CheckDisplay CheckMotion BlurCIE 1931PhysLightNuke Tools

Company

InstructorMissionImpressumPrivacyTerms

Projects

Moray RenderEXR ConverterOCIO.ccNuke ToolsDerekVFX

Follow

YouTubeInstagramTikTokThreadsContact

© 2026 CompStart. All rights reserved.

Dead Pixel Finder

ToolSets / Utility
Utility

2026-09-07

ToolSets/utility/deadPixelFinder.nk

utility
dead pixel
QC
TimeEcho
viewer
cleanup
plate
View on GitHub

GUI utility that highlights likely dead or stuck pixels by differencing a TimeEcho of the plate against a slight blur in log space.

Dead Pixel Finder is a viewer-side utility for spotting dead or stuck pixels on a plate. It builds a temporal stack with TimeEcho, converts to Cineon, takes a difference against a lightly blurred copy, then grades the result so small persistent spikes read clearly.

Use it when checking acquisition or scanned footage before paint and cleanup. Set Frames to look at to control how many prior frames TimeEcho includes; longer windows favor pixels that stay fixed across time.

The group is meant for interactive use: TimeEcho runs in the GUI, the output is held on the last frame, and outside the GUI the node passes black so it does not affect renders. Wire it over the clip you are inspecting, scrub or flip through the hold, and note hot spots for manual fix or a dedicated despeckle pass.

Script code

set cut_paste_input [stack 0]
version 12.1 v4
push $cut_paste_input
Group {
 name deadPixelFinder
 tile_color 0x421010ff
 selected true
 xpos -1103
 ypos 99
 addUserKnob {20 User l deadPixelFinder}
 addUserKnob {41 framesbehind l "Frames to look at" T TimeEcho1.framesbehind}
 addUserKnob {26 ""}
 addUserKnob {26 lbl l "" t "May 15, 2019 - v1.1 Refined\nMay 15, 2019 - v1.2 Gui only" +STARTLINE T "Dead Pixel Finder v1.2"}
 addUserKnob {22 btn l DerekVFX.ca T "nuke.tcl('start', 'https://derekvfx.ca')" +STARTLINE}
}
 Input {
  inputs 0
  name Input
  xpos 447
  ypos 61
 }
 Dot {
  name Dot1
  note_font_size 40
  xpos 481
  ypos 215
 }
set Nd7a4800 [stack 0]
 Dot {
  name Dot2
  note_font_size 40
  xpos 640
  ypos 215
 }
 Invert {
  channels rgb
  name Invert3
  xpos 606
  ypos 351
 }
 TimeEcho {
  framesbehind 60
  name TimeEcho1
  selected true
  xpos 606
  ypos 411
  disable {{"!\$gui"}}
 }
 Invert {
  channels rgb
  name Invert4
  xpos 606
  ypos 474
 }
 Dot {
  name Dot170
  note_font_size 40
  xpos 640
  ypos 554
 }
set Nd7d5400 [stack 0]
 Dot {
  name Dot4
  note_font_size 40
  xpos 849
  ypos 554
 }
 Colorspace {
  colorspace_out Cineon
  name Colorspace1
  xpos 815
  ypos 635
 }
 Blur {
  channels rgba
  size 0.67
  name Blur18
  label "\[value size] px"
  xpos 815
  ypos 689
 }
 Dot {
  name Dot5
  note_font_size 40
  xpos 849
  ypos 769
 }
push $Nd7d5400
 Colorspace {
  colorspace_out Cineon
  name Colorspace2
  xpos 606
  ypos 644
 }
 Merge2 {
  inputs 2
  operation difference
  bbox B
  name Merge83
  xpos 606
  ypos 765
 }
 Grade {
  whitepoint 0.0002
  gamma 0.455
  name Grade20
  xpos 606
  ypos 805
 }
 FrameHold {
  first_frame {{last_frame}}
  name FrameHold1
  xpos 606
  ypos 849
 }
 Dot {
  name Dot3
  note_font_size 40
  xpos 640
  ypos 939
 }
push $Nd7a4800
 Remove {
  operation keep
  channels rgba
  name Remove1
  label "\[value channels]"
  xpos 447
  ypos 343
 }
 Multiply {
  channels rgba
  value 0
  name Multiply1
  label "\[value value]"
  xpos 447
  ypos 413
 }
 Switch {
  inputs 2
  which {{"\$gui"}}
  name Switch1
  label "\[value which]"
  xpos 447
  ypos 929
 }
 Output {
  name Output1
  xpos 447
  ypos 1055
 }
end_group