# Keyboard shortcuts

> All 714 standard shortcuts and whether each works yet.

Oink uses the standard compositing shortcuts. This table is the one the app itself loads (`nuke-shortcuts.json`, from Nuke 17.1 (17.1v2 online help, "Keyboard Shortcuts" page, published Sep 2026)), so it is always current. A key whose feature is not built yet shows "Not available yet" in the status bar instead of doing nothing.

**423 of 637 keyboard shortcuts work (66%).** Mouse gestures are listed but not counted.

A key goes to the panel under the mouse pointer. Change keys in `~/.config/opencomp/keymap.json`: `{ "bindings": { "<id>": "Ctrl+B" } }` (use `null` to unbind). Press **F1** over a node for its help page.

## Global

| Key | Action | Status | id |
|---|---|---|---|
| `Backspace` | Remove the selected clips or bin folders | works | `global.delete-selected-clips-or-folders-backspace` |
| `Delete` | Remove the selected clips or bin folders | works | `global.delete-selected-clips-or-folders-delete` |
| `F12` | Empty the RAM buffers and the playback cache | works | `global.clear-buffers-and-playback-cache` |
| `mouse:MMB drag` | Virtual slider (number fields) | mouse | `global.virtual-slider-number-fields` |
| `Space` | Maximise the panel under focus to fill the window | works | `global.expand-the-focused-panel-to-the-full-window` |
| `hold:Space` | Raise the right-click menu (needs Raise the right-click menu) | not yet | `global.raise-the-right-click-menu` |
| `Alt+S` | Toggle fullscreen for the main or a floating window | works | `global.make-the-application-or-floating-window-fullscre` |
| `Alt+'` | Show Curve Editor | works | `global.show-curve-editor` |
| `Ctrl+A` | Select all | works | `global.select-all` |
| `Ctrl+C` | Copy selected item(s) | works | `global.copy-selected-item-s` |
| `Ctrl+D` | Duplicate selected item(s) | works | `global.duplicate-selected-item-s` |
| `Ctrl+F1` | Save current window layout (needs Saved window layouts) | not yet | `global.save-current-window-layout-f1` |
| `Ctrl+F2` | Save current window layout (needs Saved window layouts) | not yet | `global.save-current-window-layout-f2` |
| `Ctrl+F3` | Save current window layout (needs Saved window layouts) | not yet | `global.save-current-window-layout-f3` |
| `Ctrl+F4` | Save current window layout (needs Saved window layouts) | not yet | `global.save-current-window-layout-f4` |
| `Ctrl+F5` | Save current window layout (needs Saved window layouts) | not yet | `global.save-current-window-layout-f5` |
| `Ctrl+F6` | Save current window layout (needs Saved window layouts) | not yet | `global.save-current-window-layout-f6` |
| `Ctrl+mouse:LMB (on panel name)` | Float panel | mouse | `global.float-panel` |
| `Ctrl+N` | Start a new script (or project in Studio mode) | works | `global.create-a-new-project-or-script-depending-on-envi` |
| `Ctrl+O` | Open a script (or project in Studio mode) | works | `global.open-a-project-or-script-depending-on-environmen` |
| `Ctrl+Q` | Exit the application | works | `global.exit-the-application` |
| `Ctrl+S` | Save the script (or project in Studio mode) | works | `global.save-current-project-or-script-depending-on-envi` |
| `Ctrl+T` | Step to the next tab in this pane | works | `global.cycle-through-tabs-in-the-current-pane` |
| `Ctrl+V` | Paste what is on the clipboard | works | `global.paste-the-contents-of-the-clipboard` |
| `Ctrl+W` | Close the script (or project in Studio mode) | works | `global.close-the-current-project-or-script-dependent-on` |
| `Ctrl+X` | Cut selected item(s) | works | `global.cut-selected-item-s` |
| `Ctrl+Z` | Undo last action | works | `global.undo-last-action` |
| `Shift+Escape` | Close the current tab | works | `global.close-the-current-tab` |
| `Shift+F1` | Change workspace | works | `global.change-workspace-f1` |
| `Shift+F2` | Change workspace (needs Custom workspaces) | not yet | `global.change-workspace-f2` |
| `Shift+F3` | Change workspace (needs Custom workspaces) | not yet | `global.change-workspace-f3` |
| `Shift+F4` | Change workspace (needs Custom workspaces) | not yet | `global.change-workspace-f4` |
| `Shift+F5` | Change workspace (needs Custom workspaces) | not yet | `global.change-workspace-f5` |
| `Shift+F6` | Change workspace (needs Custom workspaces) | not yet | `global.change-workspace-f6` |
| `Shift+S` | Open the Preferences dialog | works | `global.open-the-preferences-dialog` |
| `Alt+Shift+1` | Pick from recently opened scripts or projects (needs Open Recent Comp list) | not yet | `global.open-a-recent-project-or-script-depending-on-env-1` |
| `Alt+Shift+2` | Pick from recently opened scripts or projects (needs Open Recent Comp list) | not yet | `global.open-a-recent-project-or-script-depending-on-env-2` |
| `Alt+Shift+3` | Pick from recently opened scripts or projects (needs Open Recent Comp list) | not yet | `global.open-a-recent-project-or-script-depending-on-env-3` |
| `Alt+Shift+4` | Pick from recently opened scripts or projects (needs Open Recent Comp list) | not yet | `global.open-a-recent-project-or-script-depending-on-env-4` |
| `Alt+Shift+5` | Pick from recently opened scripts or projects (needs Open Recent Comp list) | not yet | `global.open-a-recent-project-or-script-depending-on-env-5` |
| `Alt+Shift+6` | Pick from recently opened scripts or projects (needs Open Recent Comp list) | not yet | `global.open-a-recent-project-or-script-depending-on-env-6` |
| `Ctrl+Shift+A` | Select none | works | `global.select-none` |
| `Ctrl+Alt+'` | Goto next pane (needs Goto next pane) | not yet | `global.goto-next-pane` |
| `Ctrl+Shift+[` | Goto next tab | works | `global.goto-next-tab` |
| `Ctrl+Shift+]` | Goto previous tab | works | `global.goto-previous-tab` |
| `Alt+]` | Next frame that needs a look (AI result) | works | `global.ai-next-worst-frame` |
| `Alt+[` | Previous frame that needs a look (AI result) | works | `global.ai-prev-worst-frame` |
| `Ctrl+Shift+S` | Save the script (or project) under a new name | works | `global.save-current-project-or-script-depending-on-envi-ctrl-shift-s` |
| `Ctrl+Shift+Z` | Redo last action | works | `global.redo-last-action` |
| `Ctrl+Alt+Shift+'` | Goto previous pane (needs Goto previous pane) | not yet | `global.goto-previous-pane` |
| `Ctrl+Y` | Redo | works | `global.oc-edit-redo-ctrl-y` |
| `F5` | Render all Write nodes | works | `global.oc-render-all-f5` |
| `F7` | Render selected Write nodes | works | `global.oc-render-selected-f7` |
| `Alt+Shift+S` | Save new comp version | works | `global.oc-file-saveVersion-alt-shift-s` |
| `F1` | Documentation: the page of the node under the pointer or the selected node, else the docs home | works | `global.help-documentation-f1` |

## Studio-viewer

| Key | Action | Status | id |
|---|---|---|---|
| `-` | Zoom Out (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-out` |
| `+` | Zoom In (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-in` |
| `A` | Alpha (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.alpha` |
| `B` | Blue (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.blue` |
| `C` | Razor selected (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.razor-selected` |
| `E` | Clipping Warning (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.clipping-warning` |
| `End` | Go to End (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.go-to-end` |
| `F` | Zoom to Fit (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-to-fit` |
| `F12` | Clear playback cache (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.clear-playback-cache` |
| `G` | Green (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.green` |
| `H` | Zoom to Fill (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-to-fill` |
| `Home` | Go to Start (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.go-to-start` |
| `I` | Mark In point (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.mark-in-point` |
| `J` | Play Backward (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.play-backward` |
| `K` | Pause (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.pause` |
| `L` | Play Forward (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.play-forward` |
| `Left` | Frame Backwards (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.frame-backwards` |
| `O` | Mark Out point (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.mark-out-point` |
| `PageDown` | Next Layer (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.next-layer` |
| `PageUp` | Previous Layer (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.previous-layer` |
| `Q` | Show Overlays (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.show-overlays` |
| `R` | Red (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.red` |
| `Enter` | Swap A/B Inputs (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.swap-a-b-inputs` |
| `Right` | Frame Forwards (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.frame-forwards` |
| `V` | Display the version selector (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.display-the-version-selector` |
| `W` | Wipe (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.wipe` |
| `Y` | Luma (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.luma` |
| `Alt+1` | Zoom out in whole steps (1:2, 1:3, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-out-by-100-200-and-so-on-1` |
| `Alt+2` | Zoom out in whole steps (1:2, 1:3, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-out-by-100-200-and-so-on-2` |
| `Alt+3` | Zoom out in whole steps (1:2, 1:3, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-out-by-100-200-and-so-on-3` |
| `Alt+4` | Zoom out in whole steps (1:2, 1:3, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-out-by-100-200-and-so-on-4` |
| `Alt+5` | Zoom out in whole steps (1:2, 1:3, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-out-by-100-200-and-so-on-5` |
| `Alt+6` | Zoom out in whole steps (1:2, 1:3, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-out-by-100-200-and-so-on-6` |
| `Alt+7` | Zoom out in whole steps (1:2, 1:3, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-out-by-100-200-and-so-on-7` |
| `Alt+8` | Zoom out in whole steps (1:2, 1:3, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-out-by-100-200-and-so-on-8` |
| `Alt+9` | Zoom out in whole steps (1:2, 1:3, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-out-by-100-200-and-so-on-9` |
| `Alt+Down` | Step the selected clip or shot to its previous version (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.version-down-the-selected-clip-or-shot` |
| `Alt+I` | Clear In Point (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.clear-in-point` |
| `Alt+O` | Clear Out Point (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.clear-out-point` |
| `Alt+Shift+Left` | Previous Tag (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.previous-tag` |
| `Alt+Shift+Right` | Next Tag (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.next-tag` |
| `Alt+U` | Clear In/Out Points (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.clear-in-out-points` |
| `Alt+Up` | Step the selected clip or shot to its next version (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.version-up-the-selected-clip-or-shot` |
| `Ctrl+1` | Zoom in in whole steps (2:1, 3:1, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-in-by-100-200-and-so-on-1` |
| `Ctrl+2` | Zoom in in whole steps (2:1, 3:1, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-in-by-100-200-and-so-on-2` |
| `Ctrl+3` | Zoom in in whole steps (2:1, 3:1, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-in-by-100-200-and-so-on-3` |
| `Ctrl+4` | Zoom in in whole steps (2:1, 3:1, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-in-by-100-200-and-so-on-4` |
| `Ctrl+5` | Zoom in in whole steps (2:1, 3:1, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-in-by-100-200-and-so-on-5` |
| `Ctrl+6` | Zoom in in whole steps (2:1, 3:1, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-in-by-100-200-and-so-on-6` |
| `Ctrl+7` | Zoom in in whole steps (2:1, 3:1, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-in-by-100-200-and-so-on-7` |
| `Ctrl+8` | Zoom in in whole steps (2:1, 3:1, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-in-by-100-200-and-so-on-8` |
| `Ctrl+9` | Zoom in in whole steps (2:1, 3:1, ...) (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-in-by-100-200-and-so-on-9` |
| `Ctrl+/` | Show Timeline Editor (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.show-timeline-editor` |
| `Ctrl+F` | Full Screen (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.full-screen` |
| `Ctrl+mouse:LMB` | Color picker (single pixel) | mouse | `studio-viewer.color-picker-single-pixel` |
| `Ctrl+mouse:RMB` | Deselect sampled pixels | mouse | `studio-viewer.deselect-sampled-pixels` |
| `Ctrl+S` | Save current project (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.save-current-project` |
| `Shift+C` | Razor all under playhead (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.razor-all-under-playhead` |
| `Shift+I` | Go to In Point (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.go-to-in-point` |
| `Shift+Left` | Skip Backwards (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.skip-backwards` |
| `Shift+O` | Go to Out Point (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.go-to-out-point` |
| `Shift+Right` | Skip Forwards (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.skip-forwards` |
| `Ctrl+Alt+Down` | Go to min version (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.go-to-min-version` |
| `Ctrl+Alt+Up` | Go to max version (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.go-to-max-version` |
| `Ctrl+Shift+1` | Zoom to Actual Size (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-to-actual-size` |
| `Ctrl+Shift+2` | Zoom to Half Size (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.zoom-to-half-size` |
| `Ctrl+Shift+F` | Full Quality 1:1 (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.full-quality-1-1` |
| `Ctrl+Shift+mouse:LMB` | Sample the average colour of a dragged box of pixels | mouse | `studio-viewer.color-picker-region-of-pixels` |
| `Ctrl+Shift+P` | Ignore Pixel Aspect (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.ignore-pixel-aspect` |
| `Ctrl+Shift+S` | Save the project under a new name (needs Nuke Studio timeline viewer) | not yet | `studio-viewer.save-current-project-and-specify-name-save-as` |

## Studio-timeline

| Key | Action | Status | id |
|---|---|---|---|
| `,` | Shift the selected shots one frame earlier if the gap allows (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.nudge-selected-shot-s-left-where-space-is-availa` |
| `.` | Shift the selected shots one frame later if the gap allows (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.nudge-selected-shot-s-right-where-space-is-avail` |
| `1` | Jump to numbered playhead 1-10 when it already exists (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.selects-playheads-1-10-if-the-playhead-is-alread-1` |
| `2` | Jump to numbered playhead 1-10 when it already exists (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.selects-playheads-1-10-if-the-playhead-is-alread-2` |
| `3` | Jump to numbered playhead 1-10 when it already exists (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.selects-playheads-1-10-if-the-playhead-is-alread-3` |
| `4` | Jump to numbered playhead 1-10 when it already exists (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.selects-playheads-1-10-if-the-playhead-is-alread-4` |
| `5` | Jump to numbered playhead 1-10 when it already exists (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.selects-playheads-1-10-if-the-playhead-is-alread-5` |
| `6` | Jump to numbered playhead 1-10 when it already exists (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.selects-playheads-1-10-if-the-playhead-is-alread-6` |
| `7` | Jump to numbered playhead 1-10 when it already exists (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.selects-playheads-1-10-if-the-playhead-is-alread-7` |
| `8` | Jump to numbered playhead 1-10 when it already exists (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.selects-playheads-1-10-if-the-playhead-is-alread-8` |
| `9` | Jump to numbered playhead 1-10 when it already exists (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.selects-playheads-1-10-if-the-playhead-is-alread-9` |
| `0` | Jump to numbered playhead 1-10 when it already exists (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.selects-playheads-1-10-if-the-playhead-is-alread-0` |
| `A` | Show in the A buffer (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.display-in-the-a-input-buffer` |
| `B` | Show in the B buffer (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.display-in-the-b-input-buffer` |
| `Alt+mouse:drag` | Drag a copy of the shot, rippling later shots | mouse | `studio-timeline.ripple-and-duplicate-the-dragged-shot` |
| `Alt+mouse:drag` | Duplicate the dragged shot | mouse | `studio-timeline.duplicate-the-dragged-shot` |
| `D` | Turn the selected shots on or off (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.enable-or-disable-the-selected-shot-s` |
| `Down` | Next Edit (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.next-edit` |
| `mouse:drag then Alt` | Ripple later shots while dragging a shot | mouse | `studio-timeline.activate-ripple-mode-while-dragging-shot` |
| `E` | Switch between the slip and slide tools (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.cycles-between-the-slip-clip-and-slide-clip-tool` |
| `NumpadEnter` | Edit playhead time (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.edit-playhead-time` |
| `F12` | Clear playback cache (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.clear-playback-cache-f12` |
| `F5` | Render all Comp containers (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.render-all-comp-containers` |
| `F7` | Render selected Comp containers (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.render-selected-comp-containers` |
| `mouse:LMB` | Pick a shot together with its linked tracks | mouse | `studio-timeline.select-a-shot-including-any-linked-tracks` |
| `F` | Frame the selected shots in the timeline (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.zooms-to-view-the-selected-shot-s-on-the-timelin` |
| `H` | Frame the whole sequence in the timeline (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.zooms-to-view-the-whole-timeline` |
| `M` | Drop the source Viewer's clip into the timeline at the playhead (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.insert-the-contents-of-a-source-viewer-into-the` |
| `N` | Drop the source Viewer's clip into the timeline at the playhead (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.insert-the-contents-of-a-source-viewer-into-the-n` |
| `Numpad8` | Change selection between shots (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.change-selection-between-shots-numpad8` |
| `Numpad2` | Change selection between shots (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.change-selection-between-shots-numpad2` |
| `Numpad4` | Change selection between shots (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.change-selection-between-shots-numpad4` |
| `Numpad6` | Change selection between shots (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.change-selection-between-shots-numpad6` |
| `Q` | Rotate through the move tools (Multi, Move/Trim, Select) (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.cycles-between-the-available-move-tools-multi-mo` |
| `R` | Rotate through the edit tools (Ripple, Roll, Retime) (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.cycles-between-the-available-edit-tools-ripple-r` |
| `T` | Rotate through the cut tools (Razor, Razor All, Join) (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.cycles-between-the-available-razor-tools-razor-r` |
| `U` | Mark shot (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.mark-shot` |
| `Up` | Previous Edit (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.previous-edit` |
| `V` | Display the version selector (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.display-the-version-selector-v` |
| `W` | Rotate through the selection tools (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.cycles-between-the-available-selection-tools` |
| `Shift+mouse:drag shot` | Insert new track | mouse | `studio-timeline.insert-new-track` |
| `Alt+,` | Move the selected shots one track up, replacing what is there (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.nudge-selected-shot-s-up-overwriting-any-shots-o` |
| `Alt+.` | Move the selected shots one track down, replacing what is there (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.nudge-selected-shot-s-down-overwriting-any-shots` |
| `Alt+C` | Add a ColorCorrect soft effect to the selected shots or at the playhead (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.insert-a-colorcorrect-soft-effect-on-any-shot-se` |
| `Alt+D` | Show the metadata of the selected track items (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.display-metadata-for-the-selected-track-item-s` |
| `Alt+Down` | Step the selected shot to its previous version (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.version-down-the-selected-shot` |
| `Alt+G` | Add a Grade soft effect to the selected shots or at the playhead (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.insert-a-grade-soft-effect-on-any-shot-selection` |
| `Alt+mouse:LMB` | Pick only the clicked track's item, not its linked tracks (e.g. just the audio) | mouse | `studio-timeline.select-a-shot-ignoring-linked-tracks-for-example` |
| `Alt+T` | Add a Transform soft effect to the selected shots or at the playhead (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.insert-a-transform-soft-effect-on-any-shot-selec` |
| `Alt+Up` | Step the selected shot to its next version (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.version-up-the-selected-shot` |
| `Ctrl+Numpad8` | Shift the selected shots if the gap allows (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.nudge-selected-shot-s-where-space-is-available-numpad8` |
| `Ctrl+Numpad2` | Shift the selected shots if the gap allows (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.nudge-selected-shot-s-where-space-is-available-numpad2` |
| `Ctrl+Numpad4` | Shift the selected shots if the gap allows (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.nudge-selected-shot-s-where-space-is-available-numpad4` |
| `Ctrl+Numpad6` | Shift the selected shots if the gap allows (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.nudge-selected-shot-s-where-space-is-available-numpad6` |
| `Ctrl+A` | Select all shots (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.select-all-shots` |
| `Ctrl+I` | Import files (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.import-files` |
| `Ctrl+Enter` | Load the selected shot into the Viewer (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.open-selected-shot-in-the-viewer` |
| `Ctrl+T` | Put a dissolve between the two selected shots (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.add-a-dissolve-between-two-selected-shots` |
| `Shift+,` | Shift the selected shots earlier by the Viewer's step size, if the gap allows (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.nudge-selected-shot-s-left-by-the-increment-amou` |
| `Shift+.` | Shift the selected shots later by the Viewer's step size, if the gap allows (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.nudge-selected-shot-s-right-by-the-increment-amo` |
| `Shift+A` | Route every track to the A buffer (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.sends-all-tracks-to-input-buffer-a` |
| `Shift+B` | Route every track to the A buffer (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.sends-all-tracks-to-input-buffer-a-shift-b` |
| `Shift+Backspace` | Ripple delete (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.ripple-delete` |
| `Ctrl+Shift+mouse:drag shot` | Turn off snapping to transitions while dragging shots | mouse | `studio-timeline.disable-snap-to-transition-when-dragging-shots` |
| `Shift+U` | Mark selection (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.mark-selection` |
| `Alt+Shift+/` | Rename shots (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.rename-shots` |
| `Ctrl+Alt+A` | Select all in track (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.select-all-in-track` |
| `Alt+Shift+Down` | Go to min version (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.go-to-min-version-alt-shift-down` |
| `Alt+Shift+Up` | Go to max version (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.go-to-max-version-alt-shift-up` |
| `Ctrl+Alt+Enter` | Load the selected shot into a fresh Viewer (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.open-selected-shot-in-a-new-viewer` |
| `Ctrl+Shift+A` | Deselect all shots (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.deselect-all-shots` |
| `Ctrl+Shift+E` | Open the Export dialog (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.open-the-export-dialog` |
| `Ctrl+Shift+I` | Import folders (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.import-folders` |
| `mouse:LMB then Shift+LMB` | Pick every shot from the first click to the second | mouse | `studio-timeline.select-all-shots-between-the-left-clicks` |
| `Alt+Shift+mouse:LMB` | Leave linked tracks out of the selection | mouse | `studio-timeline.ignore-linked-tracks-during-selection` |
| `Ctrl+Alt+Shift+I` | Bring in an edit list (EDL, OTIO, XML or AAF) (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.import-edl-otio-xml-or-aaf` |
| `PageUp` | Jump to the next cut on the selected tracks (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.select-track-s-and-press-pgup-to-jump-to-next-ed` |
| `PageDown` | Jump to the previous cut on the selected tracks (needs Nuke Studio editorial timeline) | not yet | `studio-timeline.select-track-s-and-press-pgdown-to-jump-to-previ` |

## Viewer

| Key | Action | Status | id |
|---|---|---|---|
| `-` | Zoom Out | works | `viewer.zoom-out` |
| `,` | Decrease Gain | works | `viewer.decrease-gain` |
| `;` | Previous view (multi-view) | works | `viewer.previous-view-multi-view` |
| `.` | Increase Gain | works | `viewer.increase-gain` |
| `'` | Next view (multi-view) | works | `viewer.next-view-multi-view` |
| `[` | Toggle left toolbar | works | `viewer.toggle-left-toolbar` |
| `]` | Toggle right toolbar | works | `viewer.toggle-right-toolbar` |
| `'` | Toggle floating viewers | works | `viewer.toggle-floating-viewers` |
| `+` | Zoom In | works | `viewer.zoom-in` |
| `1` | Show Viewer input N in the A buffer | works | `viewer.set-viewer-inputs-for-a-buffer-1` |
| `2` | Show Viewer input N in the A buffer | works | `viewer.set-viewer-inputs-for-a-buffer-2` |
| `3` | Show Viewer input N in the A buffer | works | `viewer.set-viewer-inputs-for-a-buffer-3` |
| `4` | Show Viewer input N in the A buffer | works | `viewer.set-viewer-inputs-for-a-buffer-4` |
| `5` | Show Viewer input N in the A buffer | works | `viewer.set-viewer-inputs-for-a-buffer-5` |
| `6` | Show Viewer input N in the A buffer | works | `viewer.set-viewer-inputs-for-a-buffer-6` |
| `7` | Show Viewer input N in the A buffer | works | `viewer.set-viewer-inputs-for-a-buffer-7` |
| `8` | Show Viewer input N in the A buffer | works | `viewer.set-viewer-inputs-for-a-buffer-8` |
| `9` | Show Viewer input N in the A buffer | works | `viewer.set-viewer-inputs-for-a-buffer-9` |
| `A` | Switch the Viewer between alpha only and RGB | works | `viewer.toggles-between-the-alpha-channel-and-rbg` |
| `B` | Switch the Viewer between blue only and RGB | works | `viewer.toggles-between-the-blue-channel-and-rbg` |
| `Down` | A buffer: step back to the previous connected input | works | `viewer.switch-to-the-previous-input-for-the-a-buffer` |
| `End` | Jump to the last frame of the range | works | `viewer.go-to-the-out-point-in-the-time-slider` |
| `F` | Zoom to Fit | works | `viewer.zoom-to-fit-f` |
| `mouse:MMB` | Zoom to Fit | mouse | `viewer.zoom-to-fit-mouse-mmb` |
| `G` | Switch the Viewer between green only and RGB | works | `viewer.toggles-between-the-green-channel-and-rbg` |
| `H` | Zoom to Fill | works | `viewer.zoom-to-fill` |
| `Home` | Jump to the first frame of the range | works | `viewer.go-to-the-in-point-in-the-time-slider` |
| `I` | Mark In point | works | `viewer.mark-in-point` |
| `J` | Play Backward | works | `viewer.play-backward` |
| `K` | Pause | works | `viewer.pause` |
| `L` | Play Forward | works | `viewer.play-forward` |
| `Left` | Step backward one frame | works | `viewer.step-backward-one-frame` |
| `M` | Switch the Viewer between the matte overlay and RGB | works | `viewer.toggles-between-the-matte-channel-and-rbg` |
| `Numpad4` | Step one frame back or ahead | works | `viewer.nudge-one-frame-backward-or-forward-numpad4` |
| `Numpad6` | Step one frame back or ahead | works | `viewer.nudge-one-frame-backward-or-forward-numpad6` |
| `O` | Mark Out point | works | `viewer.mark-out-point` |
| `P` | Pause Viewer refreshing | works | `viewer.pause-viewer-refreshing` |
| `PageDown` | Next layer | works | `viewer.next-layer` |
| `PageUp` | Previous layer | works | `viewer.previous-layer` |
| `Q` | Toggle overlays | works | `viewer.toggle-overlays` |
| `R` | Switch the Viewer between red only and RGB | works | `viewer.toggles-between-the-red-channel-and-rbg` |
| `Enter` | Swap A/B input buffers | works | `viewer.swap-a-b-input-buffers` |
| `Right` | Step forward one frame | works | `viewer.step-forward-one-frame` |
| `S` | Open Viewer settings | works | `viewer.open-viewer-settings` |
| `Tab` | Toggle 2D/3D | works | `viewer.toggle-2d-3d` |
| `U` | Update the Viewer | works | `viewer.update-the-viewer` |
| `Up` | A buffer: step on to the next connected input | works | `viewer.switch-to-the-next-input-for-the-a-buffer` |
| `W` | Toggle wipe tool | works | `viewer.toggle-wipe-tool` |
| `Y` | Switch the Viewer between luminance and RGB | works | `viewer.toggles-between-the-luminance-channel-and-rbg` |
| `Shift+R` | Toggle the Red channel for the active input only | works | `viewer.oc-channel-input-r` |
| `Shift+G` | Toggle the Green channel for the active input only | works | `viewer.oc-channel-input-g` |
| `Shift+B` | Toggle the Blue channel for the active input only | works | `viewer.oc-channel-input-b` |
| `Shift+A` | Toggle the Alpha channel for the active input only | works | `viewer.oc-channel-input-a` |
| `Shift+Y` | Toggle the Luminance channel for the active input only | works | `viewer.oc-channel-input-y` |
| `Shift+M` | Toggle the Matte channel for the active input only | works | `viewer.oc-channel-input-m` |
| `Alt+1` | Zoom out in whole steps (1:2, 1:3, ...) | works | `viewer.zoom-out-by-100-200-and-so-on-1` |
| `Alt+2` | Zoom out in whole steps (1:2, 1:3, ...) | works | `viewer.zoom-out-by-100-200-and-so-on-2` |
| `Alt+3` | Zoom out in whole steps (1:2, 1:3, ...) | works | `viewer.zoom-out-by-100-200-and-so-on-3` |
| `Alt+4` | Zoom out in whole steps (1:2, 1:3, ...) | works | `viewer.zoom-out-by-100-200-and-so-on-4` |
| `Alt+5` | Zoom out in whole steps (1:2, 1:3, ...) | works | `viewer.zoom-out-by-100-200-and-so-on-5` |
| `Alt+6` | Zoom out in whole steps (1:2, 1:3, ...) | works | `viewer.zoom-out-by-100-200-and-so-on-6` |
| `Alt+7` | Zoom out in whole steps (1:2, 1:3, ...) | works | `viewer.zoom-out-by-100-200-and-so-on-7` |
| `Alt+8` | Zoom out in whole steps (1:2, 1:3, ...) | works | `viewer.zoom-out-by-100-200-and-so-on-8` |
| `Alt+9` | Zoom out in whole steps (1:2, 1:3, ...) | works | `viewer.zoom-out-by-100-200-and-so-on-9` |
| `Alt+G` | Type a frame number to jump to | works | `viewer.go-to-a-specific-frame` |
| `Alt+I` | Clear In point | works | `viewer.clear-in-point` |
| `Alt+mouse:LMB` | Pan | mouse | `viewer.pan` |
| `Alt+mouse:MMB and drag` | Zoom around the mouse position | mouse | `viewer.zoom-in-out-at-the-pointer-location` |
| `Alt+O` | Clear Out point | works | `viewer.clear-out-point` |
| `Alt+P` | Toggle Input Process | works | `viewer.toggle-input-process` |
| `Alt+U` | Remove the in and out marks | works | `viewer.clear-in-and-out-points` |
| `Alt+W` | Draw a new region of interest | works | `viewer.roi-activate-new-region` |
| `Alt+Z` | Toggle lock/unlock zoom level | works | `viewer.toggle-lock-unlock-zoom-level` |
| `Ctrl+1` | Zoom in in whole steps (2:1, 3:1, ...) | works | `viewer.zoom-in-by-100-200-and-so-on-1` |
| `Ctrl+2` | Zoom in in whole steps (2:1, 3:1, ...) | works | `viewer.zoom-in-by-100-200-and-so-on-2` |
| `Ctrl+3` | Zoom in in whole steps (2:1, 3:1, ...) | works | `viewer.zoom-in-by-100-200-and-so-on-3` |
| `Ctrl+4` | Zoom in in whole steps (2:1, 3:1, ...) | works | `viewer.zoom-in-by-100-200-and-so-on-4` |
| `Ctrl+5` | Zoom in in whole steps (2:1, 3:1, ...) | works | `viewer.zoom-in-by-100-200-and-so-on-5` |
| `Ctrl+6` | Zoom in in whole steps (2:1, 3:1, ...) | works | `viewer.zoom-in-by-100-200-and-so-on-6` |
| `Ctrl+7` | Zoom in in whole steps (2:1, 3:1, ...) | works | `viewer.zoom-in-by-100-200-and-so-on-7` |
| `Ctrl+8` | Zoom in in whole steps (2:1, 3:1, ...) | works | `viewer.zoom-in-by-100-200-and-so-on-8` |
| `Ctrl+9` | Zoom in in whole steps (2:1, 3:1, ...) | works | `viewer.zoom-in-by-100-200-and-so-on-9` |
| `Ctrl+Left` | Jump halfway back toward the in mark | works | `viewer.move-the-playhead-backwards-by-1-2-the-distance` |
| `Ctrl+mouse:LMB` | Color picker (single pixel) | mouse | `viewer.color-picker-single-pixel` |
| `Ctrl+P` | Toggle Proxy | works | `viewer.toggle-proxy` |
| `Ctrl+Right` | Jump halfway on toward the out mark | works | `viewer.move-the-playhead-forwards-by-1-2-the-distance-f` |
| `Ctrl+mouse:RMB` | Deselect sampled pixels | mouse | `viewer.deselect-sampled-pixels` |
| `Ctrl+S` | Save current script | works | `viewer.save-current-script` |
| `Ctrl+U` | Send the Viewer image to an external video monitor (on/off) | works | `viewer.toggle-previewing-output-on-an-external-broadcas` |
| `mouse:LMB + MMB and drag` | Zoom, centring the Viewer on where you clicked | mouse | `viewer.zoom-in-and-out-with-the-click-point-set-as-the` |
| `mouse:MMB and RMB` | Swap between the last dragged frame range and the visible range | mouse | `viewer.toggle-between-the-last-specified-range-mmb-and` |
| `mouse:MMB and drag (time slider)` | Drag across the time bar to zoom it to that range | mouse | `viewer.zooms-the-time-slider-to-the-range-specified-by` |
| `mouse:MMB and drag (Viewer)` | Pans in the Viewer | mouse | `viewer.pans-in-the-viewer` |
| `mouse:MMB scroll` | Zoom the time bar | mouse | `viewer.zoom-in-and-out-of-the-time-slider` |
| `Shift+[` | Toggle top toolbar | works | `viewer.toggle-top-toolbar` |
| `Shift+]` | Toggle bottom toolbar | works | `viewer.toggle-bottom-toolbar` |
| `Shift+1` | Show Viewer input N in the B buffer | works | `viewer.set-viewer-inputs-for-b-buffer-1` |
| `Shift+2` | Show Viewer input N in the B buffer | works | `viewer.set-viewer-inputs-for-b-buffer-2` |
| `Shift+3` | Show Viewer input N in the B buffer | works | `viewer.set-viewer-inputs-for-b-buffer-3` |
| `Shift+4` | Show Viewer input N in the B buffer | works | `viewer.set-viewer-inputs-for-b-buffer-4` |
| `Shift+5` | Show Viewer input N in the B buffer | works | `viewer.set-viewer-inputs-for-b-buffer-5` |
| `Shift+6` | Show Viewer input N in the B buffer | works | `viewer.set-viewer-inputs-for-b-buffer-6` |
| `Shift+7` | Show Viewer input N in the B buffer | works | `viewer.set-viewer-inputs-for-b-buffer-7` |
| `Shift+8` | Show Viewer input N in the B buffer | works | `viewer.set-viewer-inputs-for-b-buffer-8` |
| `Shift+9` | Show Viewer input N in the B buffer | works | `viewer.set-viewer-inputs-for-b-buffer-9` |
| `Shift+Down` | B buffer: step back to the previous connected input | works | `viewer.switch-to-the-previous-input-for-the-b-buffer` |
| `Shift+Left` | Step back by the skip-frames amount | works | `viewer.move-the-playhead-backward-by-the-amount-of-fram` |
| `Shift+Numpad4` | Step back one frame | works | `viewer.nudge-the-playhead-backward-by-one-frame` |
| `Shift+Numpad6` | Step ahead one frame | works | `viewer.nudge-the-playhead-forward-by-one-frame` |
| `Shift+Right` | Step ahead by the skip-frames amount | works | `viewer.move-the-playhead-forward-by-the-amount-of-frame` |
| `Shift+Up` | B buffer: step on to the next connected input | works | `viewer.switch-to-the-next-input-for-the-b-buffer` |
| `Shift+W` | Enable or disable ROI | works | `viewer.enable-or-disable-roi` |
| `Alt+Shift+S` | Save, bumping the version number in the file name | works | `viewer.save-script-and-increment-version-number` |
| `Ctrl+Shift+mouse:LMB` | Color picker (region) | mouse | `viewer.color-picker-region` |
| `Ctrl+Shift+P` | Toggle pixel aspect ratio | works | `viewer.toggle-pixel-aspect-ratio` |
| `Ctrl+Shift+S` | Save the script under a new name | works | `viewer.save-current-script-and-specify-name-save-as` |
| `0` | Show viewer input 10 | works | `viewer.oc-viewer-inputA-0` |
| `Shift+0` | Set viewer input 10 as B | works | `viewer.oc-viewer-inputB-shift-0` |
| `=` | Zoom in | works | `viewer.oc-viewer-zoomIn-equals` |
| `Alt+Left` | Previous keyframe | works | `viewer.oc-previous-keyframe-alt-left` |
| `Alt+Right` | Next keyframe | works | `viewer.oc-next-keyframe-alt-right` |

## Viewer3d

| Key | Action | Status | id |
|---|---|---|---|
| `C` | 3D Top view | works | `viewer3d.3d-top-view` |
| `PageDown` | Show the next layer | works | `viewer3d.next-layer-color-channel-display` |
| `PageUp` | Show the previous layer | works | `viewer3d.previous-layer-color-channel-display` |
| `N` | Toggle soft selection | works | `viewer3d.toggle-soft-selection` |
| `Shift+O` | Toggle helpers | works | `viewer3d.oc-toggle-helpers` |
| `mouse:N+LMB` | Drag to resize the soft-selection falloff | mouse | `viewer3d.mouse-drag-to-change-soft-selection-radius` |
| `S` | Display Viewer Settings | works | `viewer3d.display-viewer-settings` |
| `Tab` | Toggle 2D/3D viewer | works | `viewer3d.toggle-2d-3d-viewer` |
| `V` | 3D Perspective view | works | `viewer3d.3d-perspective-view` |
| `W` | Toggle the Wipe tool | works | `viewer3d.toggle-the-wipe-tool` |
| `X` | 3D right-side view | works | `viewer3d.3d-right-side-view` |
| `Z` | 3D front view | works | `viewer3d.3d-front-view` |
| `Alt+mouse:LMB` | Pan the 3D view | mouse | `viewer3d.translate-viewer-on-y-z-axis` |
| `Alt+mouse:MMB` | Zoom in/out (drag left/right) | mouse | `viewer3d.zoom-in-out-drag-left-right` |
| `Alt+mouse:RMB` | Orbit the 3D view | mouse | `viewer3d.rotate-viewer-on-x-y-axis-mouse-rmb` |
| `Ctrl+mouse:LMB` | Orbit the 3D view | mouse | `viewer3d.rotate-viewer-on-x-y-axis-mouse-lmb` |
| `Ctrl+L` | Cycle the camera or light between unlocked, locked and interactive | works | `viewer3d.toggle-unlocked-locked-interactive-camera-or-lig` |
| `Shift+C` | 3D Bottom view | works | `viewer3d.3d-bottom-view` |
| `Shift+X` | 3D Left-side view | works | `viewer3d.3d-left-side-view` |
| `Shift+Z` | 3D Back view | works | `viewer3d.3d-back-view` |
| `Ctrl+Shift+mouse:LMB` | Roll the 3D view | mouse | `viewer3d.rotate-viewer-on-z-axis` |
| `Q` | Select tool | works | `viewer3d.oc-v3-tool-q` |
| `W` | Translate tool | works (Oink key) | `viewer3d.oc-v3-tool-w` |
| `E` | Rotate tool | works | `viewer3d.oc-v3-tool-e` |
| `R` | Scale tool | works | `viewer3d.oc-v3-tool-r` |
| `T` | Transform tool | works | `viewer3d.oc-v3-tool-t` |
| `F` | Frame the selection | works | `viewer3d.oc-v3-frame-f` |
| `A` | Frame the whole scene | works | `viewer3d.oc-v3-frameAll-a` |
| `H` | Look through the selected camera | works | `viewer3d.oc-v3-lookSelected-h` |

## Graph

| Key | Action | Status | id |
|---|---|---|---|
| `-` | Zoom-out | works | `graph.zoom-out` |
| `.` | Insert Dot node | works | `graph.insert-dot-node` |
| `/` | Find a node by its name or type | works | `graph.search-by-node-name-or-class` |
| `\` | Line every node up on the grid | works | `graph.snaps-all-nodes-to-grid` |
| `1` | Hook the selected node to Viewer input N (no selection: switch the Viewer to input N) | works | `graph.with-a-node-selected-in-the-node-graph-create-co-1` |
| `2` | Hook the selected node to Viewer input N (no selection: switch the Viewer to input N) | works | `graph.with-a-node-selected-in-the-node-graph-create-co-2` |
| `3` | Hook the selected node to Viewer input N (no selection: switch the Viewer to input N) | works | `graph.with-a-node-selected-in-the-node-graph-create-co-3` |
| `4` | Hook the selected node to Viewer input N (no selection: switch the Viewer to input N) | works | `graph.with-a-node-selected-in-the-node-graph-create-co-4` |
| `5` | Hook the selected node to Viewer input N (no selection: switch the Viewer to input N) | works | `graph.with-a-node-selected-in-the-node-graph-create-co-5` |
| `6` | Hook the selected node to Viewer input N (no selection: switch the Viewer to input N) | works | `graph.with-a-node-selected-in-the-node-graph-create-co-6` |
| `7` | Hook the selected node to Viewer input N (no selection: switch the Viewer to input N) | works | `graph.with-a-node-selected-in-the-node-graph-create-co-7` |
| `8` | Hook the selected node to Viewer input N (no selection: switch the Viewer to input N) | works | `graph.with-a-node-selected-in-the-node-graph-create-co-8` |
| `9` | Hook the selected node to Viewer input N (no selection: switch the Viewer to input N) | works | `graph.with-a-node-selected-in-the-node-graph-create-co-9` |
| `+` | Zoom-in | works | `graph.zoom-in` |
| `B` | Insert Blur node | works | `graph.insert-blur-node` |
| `Backspace` | Delete selected nodes | works | `graph.delete-selected-nodes-backspace` |
| `Delete` | Delete selected nodes | works | `graph.delete-selected-nodes-delete` |
| `C` | Insert ColorCorrect node | works | `graph.insert-colorcorrect-node` |
| `D` | Disable/Enable node | works | `graph.disable-enable-node` |
| `Down` | Next node in tree | works | `graph.next-node-in-tree` |
| `F` | Frame the selected nodes in the Node Graph (nothing selected: frame them all) | works | `graph.fit-selected-nodes-to-node-graph-panel-or-if-no` |
| `F5` | Render all Write nodes | works | `graph.render-all-write-nodes` |
| `F7` | Render selected Write nodes | works | `graph.render-selected-write-nodes` |
| `G` | Insert Grade node | works | `graph.insert-grade-node` |
| `I` | Display selected node information | works | `graph.display-selected-node-information` |
| `J` | Jump to bookmarked node | works | `graph.jump-to-bookmarked-node` |
| `K` | Insert Copy node | works | `graph.insert-copy-node` |
| `L` | Auto-place selected nodes | works | `graph.auto-place-selected-nodes` |
| `M` | Insert Merge node | works | `graph.insert-merge-node` |
| `mouse:MMB` | Frame every node in the Node Graph | mouse | `graph.fit-all-nodes-to-node-graph-panel` |
| `mouse:MMB and drag` | Pan | mouse | `graph.pan` |
| `mouse:LMB (hold) + RMB` | Step a connection through the node's inputs | mouse | `graph.cycle-between-a-node-s-available-input-connectio` |
| `N` | Rename selected node | works | `graph.rename-selected-node` |
| `Numpad8` | Move the selection to the neighbouring node in that direction | works | `graph.navigate-around-the-node-tree-in-the-direction-s-numpad8` |
| `Numpad2` | Move the selection to the neighbouring node in that direction | works | `graph.navigate-around-the-node-tree-in-the-direction-s-numpad2` |
| `Numpad4` | Move the selection to the neighbouring node in that direction | works | `graph.navigate-around-the-node-tree-in-the-direction-s-numpad4` |
| `Numpad6` | Move the selection to the neighbouring node in that direction | works | `graph.navigate-around-the-node-tree-in-the-direction-s-numpad6` |
| `O` | Insert Roto node | works | `graph.insert-roto-node` |
| `P` | Insert RotoPaint node | works | `graph.insert-rotopaint-node` |
| `Q` | Show named script info (needs Show named script info) | not yet | `graph.show-named-script-info` |
| `R` | Insert Read node | works | `graph.insert-read-node` |
| `Enter` | Show the properties of the selected nodes | works | `graph.open-properties-for-selected-node-s` |
| `S` | Display Project Settings | works | `graph.display-project-settings` |
| `T` | Insert Transform node | works | `graph.insert-transform-node` |
| `Tab` | Tab node search menu | works | `graph.tab-node-search-menu` |
| `U` | Wire the selected nodes into the first one picked | works | `graph.splay-first-splay-selected-nodes-to-first-select` |
| `Up` | Previous node in tree | works | `graph.previous-node-in-tree` |
| `W` | Insert Write node | works | `graph.insert-write-node` |
| `X` | Command entry mode | works | `graph.command-entry-mode` |
| `Y` | Wire the first picked node's inputs to the other selected nodes | works | `graph.with-two-or-more-nodes-selected-splay-the-inputs` |
| `Alt+1` | Zoom-out % | works | `graph.zoom-out-1` |
| `Alt+2` | Zoom-out % | works | `graph.zoom-out-2` |
| `Alt+3` | Zoom-out % | works | `graph.zoom-out-3` |
| `Alt+4` | Zoom-out % | works | `graph.zoom-out-4` |
| `Alt+5` | Zoom-out % | works | `graph.zoom-out-5` |
| `Alt+6` | Zoom-out % | works | `graph.zoom-out-6` |
| `Alt+7` | Zoom-out % | works | `graph.zoom-out-7` |
| `Alt+8` | Zoom-out % | works | `graph.zoom-out-8` |
| `Alt+9` | Zoom-out % | works | `graph.zoom-out-9` |
| `Alt+B` | Copy the selected nodes into a new branch | works | `graph.duplicate-and-branch-selected-nodes` |
| `Alt+C` | Duplicate selected node(s) | works | `graph.duplicate-selected-node-s` |
| `Alt+D` | Keep the node shown in the Dope Sheet (on/off) | works | `graph.toggles-whether-a-node-is-always-displayed-in-do` |
| `Alt+Down` | Lower the version number in the Read / Write file path | works | `graph.version-down-the-current-read-write-node-file-na` |
| `Alt+E` | Show or hide expression link lines | works | `graph.toggle-expression-links-on-or-off` |
| `Alt+F` | Generate Flipbook for node | works | `graph.generate-flipbook-for-node` |
| `Alt+H` | Hide the node's input lines unless it is selected | works | `graph.hide-node-inputs-when-not-selected` |
| `Alt+I` | Show script statistics (node count, channels, cache use...) | works | `graph.display-script-information-such-as-the-node-coun` |
| `Alt+K` | Clone selected node(s) | works | `graph.clone-selected-node-s` |
| `Alt+L` | Link selected node(s) | works | `graph.oc-link-alt-l` |
| `V` | Toggle Group View of the selected Group | works | `graph.oc-group-view-v` |
| `Alt+N` | Create StickyNote | works | `graph.create-stickynote` |
| `Alt+P` | Show or hide the node's thumbnail | works | `graph.toggle-postage-stamp-on-or-off` |
| `Alt+U` | Wire the first picked node into input A of the others | works | `graph.with-two-or-more-nodes-selected-splay-first-sele` |
| `Alt+Up` | Raise the version number in the Read / Write file path | works | `graph.version-up-the-current-read-write-node-file-name` |
| `Alt+X` | Pick a Python script file and run it | works | `graph.run-a-script-from-the-file-browser` |
| `Ctrl+0` | Zoom-in % | works | `graph.zoom-in-0` |
| `Ctrl+1` | Zoom-in % | works | `graph.zoom-in-1` |
| `Ctrl+2` | Zoom-in % | works | `graph.zoom-in-2` |
| `Ctrl+3` | Zoom-in % | works | `graph.zoom-in-3` |
| `Ctrl+4` | Zoom-in % | works | `graph.zoom-in-4` |
| `Ctrl+5` | Zoom-in % | works | `graph.zoom-in-5` |
| `Ctrl+6` | Zoom-in % | works | `graph.zoom-in-6` |
| `Ctrl+7` | Zoom-in % | works | `graph.zoom-in-7` |
| `Ctrl+8` | Zoom-in % | works | `graph.zoom-in-8` |
| `Ctrl+9` | Zoom-in % | works | `graph.zoom-in-9` |
| `Ctrl+A` | Select every node in the graph | works | `graph.select-all-nodes-in-node-graph` |
| `Ctrl+B` | Keep the selected nodes' output in memory (on/off) | works | `graph.toggle-node-buffer-for-selected-nodes` |
| `Ctrl+C` | Copy selected node(s) | works | `graph.copy-selected-node-s` |
| `Ctrl+<node-hotkey>` | Swap the selected node for a new one (Ctrl + its creation key, e.g. Ctrl+B for Blur) (needs Swap the selected node for a new one (Ctrl + its creation key, e.g. Ctrl+B for Blur)) | not yet | `graph.replace-selected-node-with-new-node-such-as-ctrl` |
| `Ctrl+D` | Disconnect upstream node | works | `graph.disconnect-upstream-node` |
| `Ctrl+Down` | Move selected node downstream | works | `graph.move-selected-node-downstream` |
| `Ctrl+F7` | Remember the current view as location 1-4 | works | `graph.save-locations-1-through-4-f7` |
| `Ctrl+F8` | Remember the current view as location 1-4 | works | `graph.save-locations-1-through-4-f8` |
| `Ctrl+F9` | Remember the current view as location 1-4 | works | `graph.save-locations-1-through-4-f9` |
| `Ctrl+F10` | Remember the current view as location 1-4 | works | `graph.save-locations-1-through-4-f10` |
| `Ctrl+G` | Wrap the selected nodes in a Group | works | `graph.nest-selected-nodes-in-group` |
| `Ctrl+I` | Open new Compositing Viewer | works | `graph.open-new-compositing-viewer` |
| `Ctrl+K` | Copy as clone | works | `graph.copy-as-clone` |
| `Ctrl+L` | Turn the selected nodes into a LiveGroup (nothing selected: add an empty one) | works | `graph.collapse-selected-nodes-to-a-livegroup-or-if-no` |
| `Ctrl+mouse:LMB (on node)` | Highlight all upstream nodes | mouse | `graph.highlight-all-upstream-nodes` |
| `Ctrl+P` | Toggle Proxy | works | `graph.toggle-proxy` |
| `Ctrl+Enter` | Open a Group's sub-graph | works | `graph.open-a-group-s-sub-graph` |
| `Ctrl+Up` | Move selected node upstream | works | `graph.move-selected-node-upstream` |
| `Ctrl+V` | Paste nodes from the clipboard | works | `graph.paste-node-s-from-the-clipboard` |
| `Ctrl+X` | Cut selected node(s) | works | `graph.cut-selected-node-s` |
| `mouse:LMB + MMB and drag` | Zoom, centring the Node Graph on where you clicked | mouse | `graph.zoom-in-and-out-with-the-click-point-set-as-the` |
| `Shift+\` | Line the selected node up on the grid | works | `graph.snap-selected-node-to-grid` |
| `Shift+1` | Hook the selected node to the Viewer's B side | works | `graph.connect-selected-node-to-viewer-b-buffer-1` |
| `Shift+2` | Hook the selected node to the Viewer's B side | works | `graph.connect-selected-node-to-viewer-b-buffer-2` |
| `Shift+3` | Hook the selected node to the Viewer's B side | works | `graph.connect-selected-node-to-viewer-b-buffer-3` |
| `Shift+4` | Hook the selected node to the Viewer's B side | works | `graph.connect-selected-node-to-viewer-b-buffer-4` |
| `Shift+5` | Hook the selected node to the Viewer's B side | works | `graph.connect-selected-node-to-viewer-b-buffer-5` |
| `Shift+6` | Hook the selected node to the Viewer's B side | works | `graph.connect-selected-node-to-viewer-b-buffer-6` |
| `Shift+7` | Hook the selected node to the Viewer's B side | works | `graph.connect-selected-node-to-viewer-b-buffer-7` |
| `Shift+8` | Hook the selected node to the Viewer's B side | works | `graph.connect-selected-node-to-viewer-b-buffer-8` |
| `Shift+9` | Hook the selected node to the Viewer's B side | works | `graph.connect-selected-node-to-viewer-b-buffer-9` |
| `Shift+A` | Insert AddMix node | works | `graph.insert-addmix-node` |
| `Shift+<node-hotkey>` | Shift + a node key adds that node on a new branch (Shift+B: Blur) | works | `graph.create-node-in-new-branch-such-as-shift-b-to-cre` |
| `Shift+B` | Insert Blur node in a new branch | works | `graph.oc-branch-b` |
| `Shift+C` | Insert ColorCorrect node in a new branch | works | `graph.oc-branch-c` |
| `Shift+G` | Insert Grade node in a new branch | works | `graph.oc-branch-g` |
| `Shift+K` | Insert Copy node in a new branch | works | `graph.oc-branch-k` |
| `Shift+M` | Insert Merge node in a new branch | works | `graph.oc-branch-m` |
| `Shift+O` | Insert Roto node in a new branch | works | `graph.oc-branch-o` |
| `Shift+T` | Insert Transform node in a new branch | works | `graph.oc-branch-t` |
| `Shift+W` | Insert Write node in a new branch | works | `graph.oc-branch-w` |
| `>` | Insert Dot node in a new branch | works | `graph.oc-branch-dot` |
| `Shift+mouse:drag` | Duplicate selected arrow | mouse | `graph.duplicate-selected-arrow` |
| `Shift+F7` | Go back to remembered view location 1-4 | works | `graph.restore-locations-1-through-4-f7` |
| `Shift+F8` | Go back to remembered view location 1-4 | works | `graph.restore-locations-1-through-4-f8` |
| `Shift+F9` | Go back to remembered view location 1-4 | works | `graph.restore-locations-1-through-4-f9` |
| `Shift+F10` | Go back to remembered view location 1-4 | works | `graph.restore-locations-1-through-4-f10` |
| `Shift+U` | Wire the first picked node into input B of the others | works | `graph.with-two-or-more-nodes-selected-splay-first-sele-shift-u` |
| `Shift+X` | Swap the node's A and B inputs | works | `graph.swap-a-b-inputs-on-node` |
| `Shift+Y` | Wire the selected nodes' outputs into the last picked node | works | `graph.with-two-or-more-nodes-selected-splay-the-output` |
| `Alt+mouse:LMB drag` | Pan | mouse | `graph.pan-alt-mouse-lmb-drag` |
| `Alt+mouse:MMB drag` | Zoom-in/out | mouse | `graph.zoom-in-out` |
| `Alt+Shift+K` | Declone nodes | works | `graph.declone-nodes` |
| `Alt+Shift+U` | Wire the last picked node into input A of the others | works | `graph.with-two-or-more-nodes-selected-splay-last-selec` |
| `Alt+Shift+Up` | Raise the Read's version to the newest file on disk | works | `graph.version-to-up-to-the-latest-file-read-nodes-only` |
| `Ctrl+Alt+A` | Select the whole tree the node belongs to | works | `graph.select-all-nodes-connected-to-the-target-node-s` |
| `Ctrl+Alt+G` | Unpack the Group back into its nodes | works | `graph.replace-group-node-with-nested-nodes` |
| `Ctrl+Alt+mouse:LMB (on node)` | Show the node's properties in their own window | mouse | `graph.open-node-properties-in-floating-window` |
| `Ctrl+Alt+V` | Paste copied knob values onto a node of the same type | works | `graph.paste-knob-values-to-a-node-of-the-same-class-as` |
| `Ctrl+Shift+/` | Find and replace text in Read and Write paths | works | `graph.search-and-replace-read-and-write-nodes` |
| `Ctrl+Shift+B` | Bookmark the selected nodes (on/off) | works | `graph.toggle-selected-node-s-bookmark-on-or-off` |
| `Ctrl+Shift+C` | Change node color | works | `graph.change-node-color` |
| `Ctrl+Shift+G` | Copy gizmo to group | works | `graph.copy-gizmo-to-group` |
| `Ctrl+Shift+V` | Paste the copied node as a new branch off the selected node | works | `graph.paste-a-copied-node-into-a-new-branch-from-an-ex` |
| `Ctrl+Shift+mouse:LMB (on node)` | Select all upstream nodes | mouse | `graph.select-all-upstream-nodes` |
| `Ctrl+Shift+N` | Open a fresh script in a new application instance (needs Open a fresh script in a new application instance) | not yet | `graph.create-a-new-script-in-a-new-session` |
| `Ctrl+Shift+P` | Turn the selected nodes into a Precomp | works | `graph.create-precomp-from-selected-nodes` |
| `Ctrl+Shift+X` | Pull the selected nodes out of their tree | works | `graph.extract-selected-nodes-from-tree` |
| `Ctrl+Alt+Shift+G` | Copy the selected nodes into a new Group | works | `graph.create-group-from-selected-nodes` |
| `Ctrl+Alt+Shift+K` | Force clone | works | `graph.force-clone` |
| `0` | Connect selected node to viewer input 10 | works | `graph.oc-graph-viewInput-0` |
| `=` | Zoom in | works | `graph.oc-graph-zoomIn-equals` |
| `Ctrl+Shift+I` | Invert selection | works | `graph.oc-graph-invertSelection-ctrl-shift-i` |
| `Ctrl+Backspace` | Close group (back to parent graph) | works | `graph.close-group-go-to-parent` |
| `F1` | Documentation page of the node under the pointer, else the selected node | works | `graph.help-node-docs-f1` |

## Studio-bin

| Key | Action | Status | id |
|---|---|---|---|
| `D` | Hide versions of a clip (needs Nuke Studio project bin) | not yet | `studio-bin.bin-hide-version-s-of-a-clip` |
| `F8` | Refresh clips (needs Nuke Studio project bin) | not yet | `studio-bin.bin-refresh-clips` |
| `V` | Display the version selector (needs Nuke Studio project bin) | not yet | `studio-bin.bin-display-the-version-selector` |
| `Alt+D` | Show the metadata of the selected shots (needs Nuke Studio project bin) | not yet | `studio-bin.bin-display-metadata-for-the-selected-shot-s` |
| `Alt+Down` | Step the selected clip to its previous version (needs Nuke Studio project bin) | not yet | `studio-bin.bin-version-down-the-selected-clip` |
| `Alt+F5` | Rescan clip range (needs Nuke Studio project bin) | not yet | `studio-bin.bin-rescan-clip-range` |
| `Alt+Up` | Step the selected clip to its next version (needs Nuke Studio project bin) | not yet | `studio-bin.bin-version-up-the-selected-clip` |
| `Ctrl+B` | Create a new bin (needs Nuke Studio project bin) | not yet | `studio-bin.bin-create-a-new-bin` |
| `Ctrl+N` | Create a new sequence (needs Nuke Studio project bin) | not yet | `studio-bin.bin-create-a-new-sequence` |
| `Ctrl+Enter` | Load the selected clip into the Viewer (needs Nuke Studio project bin) | not yet | `studio-bin.bin-open-selected-clip-in-the-viewer` |
| `Ctrl+Y` | Create a new tag (needs Nuke Studio project bin) | not yet | `studio-bin.bin-create-a-new-tag` |
| `Alt+Shift+Down` | Go to min version (needs Nuke Studio project bin) | not yet | `studio-bin.bin-go-to-min-version` |
| `Ctrl+Alt+Enter` | Load the selected clip into a fresh Viewer (needs Nuke Studio project bin) | not yet | `studio-bin.bin-open-selected-clip-a-new-viewer` |
| `Alt+Shift+Up` | Go to max version (needs Nuke Studio project bin) | not yet | `studio-bin.bin-go-to-max-version` |

## Properties

| Key | Action | Status | id |
|---|---|---|---|
| `\` | Line every node up on the grid | works | `properties.snaps-all-nodes-to-grid` |
| `/` | Find a node by its name or type | works | `properties.search-by-node-name-or-class` |
| `.` | Create Dot node | works | `properties.create-dot-node` |
| `1` | Hook the selected node to Viewer input N | works | `properties.with-a-node-selected-in-the-node-graph-create-co-1` |
| `2` | Hook the selected node to Viewer input N | works | `properties.with-a-node-selected-in-the-node-graph-create-co-2` |
| `3` | Hook the selected node to Viewer input N | works | `properties.with-a-node-selected-in-the-node-graph-create-co-3` |
| `4` | Hook the selected node to Viewer input N | works | `properties.with-a-node-selected-in-the-node-graph-create-co-4` |
| `5` | Hook the selected node to Viewer input N | works | `properties.with-a-node-selected-in-the-node-graph-create-co-5` |
| `6` | Hook the selected node to Viewer input N | works | `properties.with-a-node-selected-in-the-node-graph-create-co-6` |
| `7` | Hook the selected node to Viewer input N | works | `properties.with-a-node-selected-in-the-node-graph-create-co-7` |
| `8` | Hook the selected node to Viewer input N | works | `properties.with-a-node-selected-in-the-node-graph-create-co-8` |
| `9` | Hook the selected node to Viewer input N | works | `properties.with-a-node-selected-in-the-node-graph-create-co-9` |
| `B` | Insert Blur node | works | `properties.insert-blur-node` |
| `Backspace` | Delete selected nodes | works | `properties.delete-selected-nodes-backspace` |
| `Delete` | Delete selected nodes | works | `properties.delete-selected-nodes-delete` |
| `C` | Insert ColorCorrect node | works | `properties.insert-colorcorrect-node` |
| `D` | Disable/Enable node | works | `properties.disable-enable-node` |
| `Escape` | Close the active (or last picked) Properties panel | works | `properties.closes-currently-active-or-last-selected-propert` |
| `F5` | Render all Write nodes | works | `properties.render-all-write-nodes` |
| `F7` | Render selected Write nodes | works | `properties.render-selected-write-nodes` |
| `G` | Insert Grade node | works | `properties.insert-grade-node` |
| `I` | Display selected node information (needs Display selected node information) | not yet | `properties.display-selected-node-information` |
| `J` | Jump to bookmarked node (needs Node bookmarks) | not yet | `properties.jump-to-bookmarked-node` |
| `K` | Insert Copy node | works | `properties.insert-copy-node` |
| `L` | Auto-place selected nodes | works | `properties.auto-place-selected-nodes` |
| `M` | Insert Merge node | works | `properties.insert-merge-node` |
| `O` | Insert Roto node | works | `properties.insert-roto-node` |
| `P` | Insert RotoPaint node (needs Insert RotoPaint node) | not yet | `properties.insert-rotopaint-node` |
| `Q` | Show named script info (needs Show named script info) | not yet | `properties.show-named-script-info` |
| `R` | Insert Read node | works | `properties.insert-read-node` |
| `Enter` | Chooses selected menu item | works (built in) | `properties.chooses-selected-menu-item` |
| `S` | Display Project Settings | works | `properties.display-project-settings` |
| `T` | Insert Transform node | works | `properties.insert-transform-node` |
| `Tab` | Focus the next knob | works (built in) | `properties.move-to-next-control-in-the-properties-panel` |
| `Up` | Increment control values | works (built in) | `properties.increment-control-values-up` |
| `Down` | Increment control values | works (built in) | `properties.increment-control-values-down` |
| `U` | Wire the selected nodes into the first one picked (needs Splay variants (U / Shift+U / Alt+U)) | not yet | `properties.splay-first-splay-selected-nodes-to-first-select` |
| `W` | Insert Write node | works | `properties.insert-write-node` |
| `X` | Command entry mode (needs Command entry mode) | not yet | `properties.command-entry-mode` |
| `Y` | Wire the first picked node's inputs to the other selected nodes | works | `properties.with-two-or-more-nodes-selected-splay-the-inputs` |
| `mouse:LMB and drag` | Drag a value from one knob onto another | mouse | `properties.copy-current-value-from-one-control-to-another` |
| `mouse:MMB and drag` | Drag to change a value (normal speed) | mouse | `properties.adjust-control-values-using-virtual-slider-regul` |
| `Alt+B` | Copy the selected nodes into a new branch | works | `properties.duplicate-and-branch-selected-nodes` |
| `Alt+C` | Duplicate selected node(s) | works | `properties.duplicate-selected-node-s` |
| `Alt+D` | Keep the node shown in the Dope Sheet (on/off) (needs Keep the node shown in the Dope Sheet (on/off)) | not yet | `properties.toggles-whether-a-node-is-always-displayed-in-do` |
| `Alt+E` | Show or hide expression link lines (needs Show or hide expression link lines) | not yet | `properties.toggle-expression-links-on-or-off` |
| `Alt+F` | Generate Flipbook for node (needs Generate Flipbook for node) | not yet | `properties.generate-flipbook-for-node` |
| `Alt+H` | Hide the node's input lines unless it is selected (needs Hide the node's input lines unless it is selected) | not yet | `properties.hide-node-inputs-when-not-selected` |
| `Alt+K` | Clone selected node(s) (needs Node clones) | not yet | `properties.clone-selected-node-s` |
| `Alt+mouse:LMB (on close (x))` | Close every Properties panel | mouse | `properties.close-all-open-properties-panels` |
| `Alt+N` | Create StickyNote (needs Create StickyNote) | not yet | `properties.create-stickynote` |
| `Alt+P` | Show or hide the thumbnail of this panel's node | works | `properties.toggle-postage-stamp-on-and-off-for-selected-pro` |
| `Alt+U` | Wire the first picked node into input A of the others (needs Splay variants (U / Shift+U / Alt+U)) | not yet | `properties.with-two-or-more-nodes-selected-splay-first-sele` |
| `Alt+X` | Pick a Python script file and run it (needs Pick a Python script file and run it) | not yet | `properties.run-a-script-from-the-file-browser` |
| `Ctrl+A` | Select every node in the Properties panel | works | `properties.select-all-nodes-in-properties-panel` |
| `Ctrl+B` | Keep the selected nodes' output in memory (on/off) (needs Keep the selected nodes' output in memory (on/off)) | not yet | `properties.toggle-node-buffer-for-selected-nodes` |
| `Ctrl+C` | Copy selected node(s) | works | `properties.copy-selected-node-s` |
| `Ctrl+D` | Disconnect upstream node | works | `properties.disconnect-upstream-node` |
| `Ctrl+F7` | Remember the current view as location 1-4 | works | `properties.save-locations-1-through-4-f7` |
| `Ctrl+F8` | Remember the current view as location 1-4 | works | `properties.save-locations-1-through-4-f8` |
| `Ctrl+F9` | Remember the current view as location 1-4 | works | `properties.save-locations-1-through-4-f9` |
| `Ctrl+F10` | Remember the current view as location 1-4 | works | `properties.save-locations-1-through-4-f10` |
| `Ctrl+G` | Wrap the selected nodes in a Group (needs Groups / LiveGroups) | not yet | `properties.nest-selected-nodes-in-group` |
| `Ctrl+I` | Open new Compositing Viewer | works | `properties.open-new-compositing-viewer` |
| `Ctrl+K` | Copy as clone (needs Node clones) | not yet | `properties.copy-as-clone` |
| `Ctrl+L` | Turn the selected nodes into a LiveGroup (nothing selected: add an empty one) (needs Groups / LiveGroups) | not yet | `properties.collapse-selected-nodes-to-a-livegroup-or-if-no` |
| `Ctrl+mouse:LMB` | Reset slider to default | mouse | `properties.reset-slider-to-default` |
| `Ctrl+mouse:LMB (on close (x))` | Close every Properties panel but the clicked one | mouse | `properties.close-all-properties-panels-except-the-one-click` |
| `Ctrl+P` | Toggle Proxy (needs Proxy mode) | not yet | `properties.toggle-proxy` |
| `Ctrl+V` | Paste nodes from the clipboard | works | `properties.paste-node-s-from-the-clipboard` |
| `Ctrl+X` | Cut selected node(s) | works | `properties.cut-selected-node-s` |
| `Shift+A` | Insert AddMix node (needs Insert AddMix node) | not yet | `properties.insert-addmix-node` |
| `Shift+1` | Hook the selected node to the Viewer's B side | works | `properties.connect-selected-node-to-viewer-b-buffer-1` |
| `Shift+2` | Hook the selected node to the Viewer's B side | works | `properties.connect-selected-node-to-viewer-b-buffer-2` |
| `Shift+3` | Hook the selected node to the Viewer's B side | works | `properties.connect-selected-node-to-viewer-b-buffer-3` |
| `Shift+4` | Hook the selected node to the Viewer's B side | works | `properties.connect-selected-node-to-viewer-b-buffer-4` |
| `Shift+5` | Hook the selected node to the Viewer's B side | works | `properties.connect-selected-node-to-viewer-b-buffer-5` |
| `Shift+6` | Hook the selected node to the Viewer's B side | works | `properties.connect-selected-node-to-viewer-b-buffer-6` |
| `Shift+7` | Hook the selected node to the Viewer's B side | works | `properties.connect-selected-node-to-viewer-b-buffer-7` |
| `Shift+8` | Hook the selected node to the Viewer's B side | works | `properties.connect-selected-node-to-viewer-b-buffer-8` |
| `Shift+9` | Hook the selected node to the Viewer's B side | works | `properties.connect-selected-node-to-viewer-b-buffer-9` |
| `Shift+<node-hotkey>` | Shift + a node key adds that node on a new branch (Shift+B: Blur) (needs Shift + a node key adds that node on a new branch (Shift+B: Blur)) | not yet | `properties.create-node-in-new-branch-such-as-shift-b-to-cre` |
| `Shift+F7` | Go back to remembered view location 1-4 | works | `properties.restore-locations-1-through-4-f7` |
| `Shift+F8` | Go back to remembered view location 1-4 | works | `properties.restore-locations-1-through-4-f8` |
| `Shift+F9` | Go back to remembered view location 1-4 | works | `properties.restore-locations-1-through-4-f9` |
| `Shift+F10` | Go back to remembered view location 1-4 | works | `properties.restore-locations-1-through-4-f10` |
| `Shift+U` | Wire the first picked node into input B of the others (needs Splay variants (U / Shift+U / Alt+U)) | not yet | `properties.with-two-or-more-nodes-selected-splay-first-sele-shift-u` |
| `Shift+X` | Swap the node's A and B inputs | works | `properties.swap-a-b-inputs-on-node` |
| `Shift+Y` | Wire the selected nodes' outputs into the last picked node | works | `properties.with-two-or-more-nodes-selected-splay-the-output` |
| `Alt+mouse:LMB drag` | Drag to change a value (speed follows the pointer position) | mouse | `properties.adjust-control-values-using-virtual-slider-magni` |
| `Alt+mouse:MMB and drag` | Drag to change a value (slow, fine steps) | mouse | `properties.adjust-control-values-using-virtual-slider-fine` |
| `Ctrl+mouse:LMB drag` | Expression link controls | mouse | `properties.expression-link-controls` |
| `Shift+mouse:LMB drag` | Drag animation from one knob onto another | mouse | `properties.copy-animation-from-one-control-to-another` |
| `Shift+mouse:MMB and drag` | Drag to change a value (fast, coarse steps) | mouse | `properties.adjust-control-values-using-virtual-slider-coars` |
| `Shift+Tab` | Focus the previous knob | works (built in) | `properties.move-to-previous-control-in-the-properties` |
| `Alt+Shift+K` | Declone nodes (needs Node clones) | not yet | `properties.declone-nodes` |
| `Alt+Shift+U` | Wire the last picked node into input A of the others (needs Splay variants (U / Shift+U / Alt+U)) | not yet | `properties.with-two-or-more-nodes-selected-splay-last-selec` |
| `Ctrl+Alt+A` | Select the whole tree the node belongs to | works | `properties.select-all-nodes-connected-to-the-target-node-s` |
| `Ctrl+Alt+G` | Unpack the Group back into its nodes (needs Groups / LiveGroups) | not yet | `properties.replace-group-node-with-nested-nodes` |
| `Ctrl+Alt+V` | Paste copied knob values onto a node of the same type (needs Paste copied knob values onto a node of the same type) | not yet | `properties.paste-knob-values-to-a-node-of-the-same-class-as` |
| `Ctrl+Shift+/` | Find and replace text in the selected Read and Write nodes (needs Find and replace text in the selected Read and Write nodes) | not yet | `properties.search-and-replace-strings-in-selected-read-and` |
| `Ctrl+Shift+A` | Close every Properties panel | works | `properties.close-all-open-properties-panels-ctrl-shift-a` |
| `Ctrl+Shift+B` | Bookmark the selected nodes (on/off) (needs Node bookmarks) | not yet | `properties.toggle-selected-node-s-bookmark-on-or-off` |
| `Ctrl+Shift+C` | Change node color | works | `properties.change-node-color` |
| `Ctrl+Shift+G` | Copy gizmo to group (needs Groups / LiveGroups) | not yet | `properties.copy-gizmo-to-group` |
| `Ctrl+Shift+P` | Turn the selected nodes into a Precomp (needs Turn the selected nodes into a Precomp) | not yet | `properties.create-precomp-from-selected-nodes` |
| `Ctrl+Shift+V` | Paste the copied node as a new branch off the selected node (needs Paste the copied node as a new branch off the selected node) | not yet | `properties.paste-a-copied-node-into-a-new-branch-from-an-ex` |
| `Ctrl+Shift+X` | Pull the selected nodes out of their tree | works | `properties.extract-selected-nodes-from-tree` |
| `Ctrl+Alt+Shift+K` | Force clone (needs Node clones) | not yet | `properties.force-clone` |

## Curve

| Key | Action | Status | id |
|---|---|---|---|
| `A` | Frame all keyframes | works | `curve.frame-all-keyframes` |
| `C` | Interpolation (Cubic) | works | `curve.interpolation-cubic` |
| `F` | Frame all selected keyframes | works | `curve.frame-all-selected-keyframes` |
| `H` | Interpolation (Horizontal) | works | `curve.interpolation-horizontal` |
| `K` | Interpolation (Constant) | works | `curve.interpolation-constant` |
| `L` | Interpolation (Linear) | works | `curve.interpolation-linear` |
| `mouse:LMB` | Select single point | mouse | `curve.select-single-point` |
| `mouse:LMB drag on blank space` | Select region of points | mouse | `curve.select-region-of-points` |
| `mouse:LMB drag on point` | Move all selected points | mouse | `curve.move-all-selected-points` |
| `mouse:LMB drag on selection box` | Scale the keys inside the selection box | mouse | `curve.scale-points-inside-selection-region` |
| `mouse:LMB drag on transform handle` | Move the keys inside the selection box | mouse | `curve.move-all-points-in-selection-region` |
| `mouse:MMB drag` | Drag a box to zoom to that area | mouse | `curve.draw-box-in-area-and-zoom-to-fit-area-to-curve-e` |
| `mouse:MMB` | Fit selection to window | mouse | `curve.fit-selection-to-window-mouse-mmb` |
| `F` | Fit selection to window | works | `curve.fit-selection-to-window-f` |
| `R` | Interpolation (Catmull-Rom) | works | `curve.interpolation-catmull-rom` |
| `X` | Split the tangents of the selected keys (needs Split the tangents of the selected keys) | not yet | `curve.break-selected-control-points-handles` |
| `Z` | Interpolation (Smooth [bezier]) | works | `curve.interpolation-smooth-bezier` |
| `Alt+'` | Display Curve Editor | works | `curve.display-curve-editor` |
| `Alt+mouse:LMB drag` | Pan | mouse | `curve.pan` |
| `Alt+mouse:MMB drag` | Variable zoom | mouse | `curve.variable-zoom` |
| `Ctrl+A` | Select all curves | works | `curve.select-all-curves` |
| `Ctrl+C` | Copy selected keys | works | `curve.copy-selected-keys` |
| `Ctrl+E` | Copy Expressions (needs Copy Expressions) | not yet | `curve.copy-expressions` |
| `Ctrl+L` | Copy Links (needs Copy Links) | not yet | `curve.copy-links` |
| `Ctrl+mouse:LMB drag` | Drag keys in both time and value | mouse | `curve.move-keyframes-freely-on-the-x-and-y-axes` |
| `Ctrl+Shift+mouse:hold modifiers (hold down)` | Hide keys so the selection box handles can be clicked | mouse | `curve.hide-points-to-click-on-selection-box-transform` |
| `Ctrl+V` | Paste curve | works | `curve.paste-curve` |
| `Ctrl+X` | Cut selected keys | works | `curve.cut-selected-keys` |
| `Shift+mouse:LMB` | Add keys to the selection or take them out | mouse | `curve.add-or-remove-points-from-selection` |
| `Shift+mouse:LMB drag` | Drag a box to add or take keys out of the selection | mouse | `curve.draw-box-to-add-remove-points-from-selection` |
| `Alt+Shift+mouse:LMB drag` | Move single point | mouse | `curve.move-single-point` |
| `Ctrl+Alt+mouse:LMB` | Add a key on the current curve | mouse | `curve.add-point-to-current-curve` |
| `Ctrl+Shift+C` | Copy selected curves (needs Copy selected curves) | not yet | `curve.copy-selected-curves` |
| `Ctrl+Alt+Shift+mouse:LMB` | Draw keys freehand along the curve | mouse | `curve.sketch-points-freely-on-current-curve` |
| `Delete` | Delete selected keys | works | `curve.oc-curve-delete-delete` |
| `Backspace` | Delete selected keys | works | `curve.oc-curve-delete-backspace` |
| `Escape` | Deselect keys | works | `curve.oc-curve-deselect-escape` |

## Script

| Key | Action | Status | id |
|---|---|---|---|
| `Tab` | Increase indentation | works (built in) | `script.increase-indentation` |
| `Ctrl+[` | Load previous script | works (built in) | `script.load-previous-script` |
| `Ctrl+]` | Load next script | works (built in) | `script.load-next-script` |
| `Ctrl+Backspace` | Clear output window | works (built in) | `script.clear-output-window` |
| `Ctrl+Enter` | Run script in editor | works (built in) | `script.run-script-in-editor` |
| `Shift+Tab` | Decrease indentation | works (built in) | `script.decrease-indentation` |
| `Ctrl+Shift+[` | Indent the selected lines less | works (built in) | `script.decrease-indentation-of-selected-text` |
| `Ctrl+Shift+]` | Indent the selected lines more | works (built in) | `script.increase-indentation-of-selected-text` |

## Roto

| Key | Action | Status | id |
|---|---|---|---|
| `Backspace` | Remove the picked item from the list, or the selected points / shapes | works (built in) | `roto.delete-an-item-from-curve-list-or-delete-points` |
| `C` | Toggle Clone tool (needs RotoPaint Clone / Reveal tools (C)) | not yet | `roto.toggle-clone-tool` |
| `D` | Toggle Dodge/Burn (needs RotoPaint Dodge / Burn tools (D)) | not yet | `roto.toggle-dodge-burn` |
| `Delete` | Remove selected point(s) | works (built in) | `roto.remove-selected-point-s` |
| `E` | Widen the feather of the selected points | works (built in) | `roto.increase-feather-on-selected-point-s` |
| `Escape` | Return to the Select tool in use | works (built in) | `roto.switch-back-to-the-current-select-tool` |
| `I` | Pick color (needs RotoPaint brush colour picker (I)) | not yet | `roto.pick-color` |
| `N` | Toggle Brush/Eraser (needs RotoPaint Brush / Eraser tools (N)) | not yet | `roto.toggle-brush-eraser` |
| `Enter` | Close shape | works (built in) | `roto.close-shape` |
| `S` | Step through the modes of the active tool | works (built in) | `roto.cycle-between-the-selected-tool-s-modes` |
| `T` | Overlay the source as onion skin with a transform handle (on/off) | works (built in) | `roto.toggle-source-as-onion-skin-with-transform-jack` |
| `T` | Show the transform box (points) or the transform handle (shapes) | works (built in) | `roto.display-transform-box-points-or-jack-shapes` |
| `V` | Toggle Bezier/B-Spline/Ellipse/Rectangle tools | works (built in) | `roto.toggle-bezier-b-spline-ellipse-rectangle-tools` |
| `X` | Toggle Blur/Sharpen/Smear tools (needs RotoPaint Blur / Sharpen / Smear tools (X)) | not yet | `roto.toggle-blur-sharpen-smear-tools` |
| `Z` | Smooth selected points | works (built in) | `roto.smooth-selected-points` |
| `Ctrl+A` | Select all points | works (built in) | `roto.select-all-points` |
| `Ctrl+mouse:LMB (Bezier/Spline tool)` | Draw a Bezier or B-spline freehand | mouse | `roto.sketch-a-bezier-or-b-spline` |
| `Ctrl+mouse:LMB (on a point)` | Split the tangent of the selected point | mouse | `roto.break-tangent-handle-for-selected-point` |
| `Ctrl+mouse:drag (Clone/Reveal tools)` | Set the source-to-destination offset | mouse | `roto.set-offset-between-source-and-destination` |
| `Ctrl+Shift+mouse:hold modifiers (transform box)` | Drag the transform box corners to move them | mouse | `roto.drag-transform-box-points-to-move-them` |
| `Shift+mouse:LMB (Bezier tool)` | Make the previous point a sharp corner | mouse | `roto.create-a-sharp-point-on-previous-point` |
| `Shift+mouse:LMB (editing points)` | Show a transform box around the selected points | mouse | `roto.bring-up-transform-box-for-selected-points` |
| `Shift+mouse:drag (Brush/Eraser/Clone/Reveal tools)` | Change brush size | mouse | `roto.change-brush-size` |
| `Shift+mouse:drag (editing Bezier/Spline points)` | Move both tangents together | mouse | `roto.move-both-tangent-handles-at-the-same-time` |
| `Shift+E` | Take the feather off the selected points | works (built in) | `roto.remove-feather-from-selected-points` |
| `Shift+Z` | Cusp selected points | works (built in) | `roto.cusp-selected-points` |
| `Ctrl+Alt+mouse:LMB (on Splines)` | Add point to curve | mouse | `roto.add-point-to-curve` |
| `Ctrl+Shift+mouse:drag (B-Spline)` | Change the tension of a B-spline shape | mouse | `roto.increase-decrease-tension-of-b-spline-shape` |
| `Q` | Select tool (Roto) | works (built in) | `roto.oc-select-tool-q` |

## Airoto

| Key | Action | Status | id |
|---|---|---|---|
| `Z` | Track backward to the in point | works | `airoto.track-backward` |
| `X` | Track one frame backward | works | `airoto.track-back-one` |
| `C` | Track one frame forward | works | `airoto.track-forward-one` |
| `V` | Track forward to the out point | works | `airoto.track-forward` |


---
Sources: opencomp_electron/docs/design/nuke-shortcuts.json, opencomp_electron/src/shortcuts/registry.ts
