CompStart

ProLessonsCoursesElementsSoftware

CompStart

Learn visual effects with cutting-edge techniques.

Learning

CoursesLessonsPro FeaturesAssetsSoftware

Tools

Tech CheckDisplay CheckMotion BlurPhysLightNuke Tools

Company

InstructorMissionSitemapPrivacyTerms

Projects

Moray RenderEXR ConverterOCIO.ccNuke ToolsDerekVFX

Follow

YouTubeInstagramTikTokThreadsContact

© 2026 CompStart. All rights reserved.

Frame Hold Advanced

ToolSets / Utility
Utility

2026-09-07

ToolSets/utility/frameHoldAdvanced.nk

utility
framehold
timing
rounding
hold
frame
View on GitHub

Hold a chosen input frame with optional rounding (rint, floor, ceil, or none) for cleaner frame locks in Nuke.

Frame Hold Advanced wraps Nuke’s FrameHold so you can lock the stream to a specific input frame and control how that value is rounded before it is applied.

Use it when a hold needs an explicit frame number rather than the default first-frame behavior, or when fractional frame values should snap with rint, floor, ceil, or pass through unrounded.

In the comp, feed any branch into the group, set input frame, pick a rounding mode, and the output stays on that held frame for downstream nodes.

Script code

set cut_paste_input [stack 0]
version 12.1 v4
push $cut_paste_input
Group {
 name frameHoldAdvanced
 tile_color 0x421010ff
 selected true
 xpos -1101
 ypos 352
 addUserKnob {20 User l template}
 addUserKnob {41 input_frame l "input frame" T FrameHold1.input_frame}
 addUserKnob {4 rounding M {rint floor ceil none}}
 addUserKnob {26 ""}
 addUserKnob {26 lbl l "" +STARTLINE T "Template v1.0"}
 addUserKnob {22 btn l DerekVFX.ca T "nuke.tcl('start', 'https://derekvfx.ca')" +STARTLINE}
}
 Input {
  inputs 0
  name Input
  xpos 447
  ypos 61
 }
set Nd764800 [stack 0]
 Output {
  name Output1
  xpos 447
  ypos 1055
 }
push $Nd764800
 FrameHold {
  first_frame 2
  name FrameHold1
  xpos 584
  ypos 337
  addUserKnob {20 User}
  addUserKnob {4 rounding M {rint floor ceil none}}
  rounding floor
  addUserKnob {7 input_frame}
  input_frame 0.332
  addUserKnob {3 output_frame}
  output_frame {{"\[python -execlocal node\\ =\\ nuke.thisNode()\\nrounding\\ =\\ node.knob('rouding').getValue()\\ninput_frame\\ =\\ node.knob('input_frame').getValue()\\noutput\\ =\\ 0\\nif\\ rounding\\ ==\\ 'rint':\\n\\ \\ \\ \\ output\\ =\\ input_frame\\nelif\\ rounding\\ ==\\ 'floor':\\n\\ \\ \\ \\ output\\ =\\ 10\\nelif\\ rounding\\ ==\\ 'ceil':\\n\\ \\ \\ \\ output\\ =\\ 20\\nelif\\ rounding\\ ==\\ 'none':\\n\\ \\ \\ \\ output\\ =\\ 30\\nret\\ output]"}}
 }
end_group