{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Dmitry Baramov: posts tagged gizmo",
    "_rss_description": "Yet another boring blog about image processing",
    "_rss_language": "en",
    "_itunes_email": "dimabaramov@yandex.ru",
    "_itunes_categories_xml": "",
    "_itunes_image": "https:\/\/www.beautycleanup.ru\/pictures\/userpic\/userpic-square@2x.jpg?1794635191",
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/www.beautycleanup.ru\/tags\/gizmo\/",
    "feed_url": "https:\/\/www.beautycleanup.ru\/tags\/gizmo\/json\/",
    "icon": "https:\/\/www.beautycleanup.ru\/pictures\/userpic\/userpic@2x.jpg?1794635191",
    "authors": [
        {
            "name": "Dmitry Baramov",
            "url": "https:\/\/www.beautycleanup.ru\/",
            "avatar": "https:\/\/www.beautycleanup.ru\/pictures\/userpic\/userpic@2x.jpg?1794635191"
        }
    ],
    "items": [
        {
            "id": "8",
            "url": "https:\/\/www.beautycleanup.ru\/all\/adding-a-slider-to-an-integer-knob\/",
            "title": "Adding a Slider to an Integer Knob",
            "content_html": "<p>By default, an <i>integer knob<\/i> in Nuke is created without a slider. While this works fine, adding a slider definitely provides a better UX.<\/p>\n<p>You can force a slider to appear using <i>setFlag()<\/i>. The problem, however, is that as soon as the node is re-initialized — like during a copy\/paste or when reloading the script — the flag resets, and the slider vanishes.<\/p>\n<p>The solution is to inject the flag configuration into the <i>onCreate<\/i> callback. It’s a bit of a hack, sure, but it gets the job done. Here is an example for an integer knob named <i>smooth_strength<\/i>:<\/p>\n<pre class=\"e2-text-code\"><code class=\"python\">set_slider = &quot;nuke.thisNode()['smooth_strength'].setFlag(0x0000000000000002)&quot;\nnuke.selectedNode()['onCreate'].setValue(set_slider)<\/code><\/pre><p>If needed, you can also define the range and default value right then and there:<\/p>\n<pre class=\"e2-text-code\"><code class=\"python\">set_slider = &quot;&quot;&quot;\nnode = nuke.thisNode()\nnode['smooth_strength'].setFlag(0x0000000000000002)\nnode['smooth_strength'].setRange(1,50)\nnode['smooth_strength'].setDefaultValue([10])\n&quot;&quot;&quot;\nnuke.selectedNode()['onCreate'].setValue(set_slider.strip())<\/code><\/pre><p>This will add a new line inside the node’s data. To see the result, you’ll need to re-initialize the node so the <i>onCreate<\/i> callback triggers — simply cutting and pasting the node will do the trick.<br \/>\n<br><\/p>\n<div class=\"e2-text-video\">\n<video src=\"https:\/\/www.beautycleanup.ru\/video\/integer_slider_demo@loop.mp4#t=0.001\" width=\"1172\" height=\"172\" autoplay muted loop playsinline alt=\"\" \/>\n\n<\/div>\n<p>Shoutout to <a href=\"https:\/\/www.gatimedia.co.uk\/integer-slider\">Attila Gasparetz<\/a>, where I originally borrowed this clever solution from.<\/p>\n",
            "summary": "By default, an integer knob in Nuke is created without a slider. While this works fine, adding a slider definitely provides a better UX",
            "date_published": "2026-10-14T21:01:38+03:00",
            "date_modified": "2026-10-24T10:16:52+03:00",
            "tags": [
                "gizmo",
                "nuke",
                "python",
                "solution"
            ],
            "_date_published_rfc2822": "Wed, 14 Oct 2026 21:01:38 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "8",
            "_rss_enclosures": [
                {
                    "url": "https:\/\/www.beautycleanup.ru\/video\/integer_slider_demo@loop.mp4",
                    "type": "video\/mp4",
                    "length": 264480
                }
            ],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "7",
            "url": "https:\/\/www.beautycleanup.ru\/all\/why-i-stopped-exporting-gizmos\/",
            "title": "Why I Stopped Exporting Gizmos",
            "content_html": "<p>Recently, I’ve stopped exporting gizmos altogether. Instead, I leave them as Groups and simply change the file extension from .nk to .gizmo. On top of that, I’m slowly converting my entire collection of third-party tools into Groups as well.<\/p>\n<p>This approach has a ton of pros. First, you don’t have to hunt down and package custom tools when sharing a script, which is a massive lifesaver for anyone using relative paths who doesn’t want to mess around with archiving or asset collection. The internals are always exposed, allowing you to tweak something inside on the fly — and only within that specific instance, without breaking anything else. Most importantly, an old, working script won’t crash or break the look when the global gizmo gets updated to a newer version, especially when you’re in emergency mode right before a deadline.<\/p>\n<p>The cons, naturally, stem from the pros. You can’t update or patch everything across all scripts in one fell swoop. A Group masquerading as a gizmo gets baked right into the .nk script and becomes part of it once added — though that’s not necessarily a bad thing. Heavy gizmos\/groups will bloat your project file size. Plus, someone with clumsy fingers might dig too deep inside and break the whole setup.<\/p>\n<p>On the flip side, what already works will continue to work predictably, and what doesn’t work will end up being replaced manually anyway, so the concept is highly viable. The only real thing you’ll need to keep a close eye on is version control.<\/p>\n",
            "summary": "Recently, I’ve stopped exporting gizmos altogether. Instead, I leave them as Groups and simply change the file extension from",
            "date_published": "2026-10-12T19:54:43+03:00",
            "date_modified": "2026-10-24T04:08:01+03:00",
            "tags": [
                "gizmo",
                "nuke",
                "observations",
                "pipeline"
            ],
            "_date_published_rfc2822": "Mon, 12 Oct 2026 19:54:43 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "7",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "4",
            "url": "https:\/\/www.beautycleanup.ru\/all\/copycat-dataset-tool\/",
            "title": "CopyCat Dataset Tool",
            "content_html": "<p>Here’s what you usually see in tutorials: you pick your frames, freeze them with FrameHolds, combine them into a dataset using an AppendClip, and then duplicate that whole setup on the right side. Next, you tweak the left side, crop it, strip out any unnecessary channels, and feed it all into CopyCat. It usually looks something like this:<br \/>\n<br><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/www.beautycleanup.ru\/pictures\/Screenshot_2026-10-06_at_07.56.11.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<\/div>\n<p>These massive node “fans” are incredibly clunky. They force you into a bunch of redundant steps that distract you from what actually matters: carefully selecting your frames. I needed a tool to get rid of this mess and make life easier. After finding nothing useful on Nukepedia, I decided to build my own — with blackjack and hookers.<\/p>\n<p>The idea is simple: you select the frames you need with a button click, and they instantly assemble into a dataset on the fly. Being able to remove frames one by one or clear them all at once on the fly was a must, too. Here is what I came up with.<br \/>\n<br><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/www.beautycleanup.ru\/pictures\/Screenshot_2026-10-06_at_08.50.05@2x.png\" width=\"715\" height=\"426\" alt=\"\" \/>\n<\/div>\n<p>The “Add” button sets a keyframe on the selected frame, “Remove” deletes the key from the current frame, and “Reset” wipes all keyframes. Under the hood, these keyframed frames are compiled into a brand new sequence that gets spit out at the end. Right next to the gizmo’s name, there is a counter showing the total number of selected frames. The checkbox below lets you preserve the original image into a separate layer.<br \/>\n<br><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/www.beautycleanup.ru\/pictures\/Screenshot_2026-10-06_at_07.42.36.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<\/div>\n<p>The group turned out to be quite compact with a minimal internal node graph, since the heavy lifting is handled by Python scripts inside the buttons. The first node is a Shuffle named <i>save_original<\/i>, which preserves the source image and gets muted via the checkbox when not needed. Then, using animation curves, the new sequence is assembled on a FrameHold named <i>append_set<\/i>, and finally capped off with a FrameRange named <i>set_range<\/i>. The starting frame number is pulled directly from the project settings.<br \/>\n<br><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/www.beautycleanup.ru\/pictures\/Screenshot_2026-10-06_at_07.44.07.png\" width=\"2400\" height=\"1500\" alt=\"\" \/>\n<\/div>\n<p><b>Download the gizmo from <a href=\"https:\/\/github.com\/baramov\/DB_Dataset\">my GitHub<\/a>.<\/b><\/p>\n",
            "summary": "Here’s what you usually see in tutorials: you pick your frames, freeze them with FrameHolds, combine them into a dataset using an AppendClip, and then duplicate that whole setup on the right side",
            "date_published": "2026-10-06T16:12:51+03:00",
            "date_modified": "2026-10-24T03:59:40+03:00",
            "tags": [
                "copycat",
                "gizmo",
                "nuke",
                "python"
            ],
            "image": "https:\/\/www.beautycleanup.ru\/pictures\/Screenshot_2026-10-06_at_07.56.11.png",
            "_date_published_rfc2822": "Tue, 06 Oct 2026 16:12:51 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "4",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/www.beautycleanup.ru\/pictures\/Screenshot_2026-10-06_at_07.56.11.png",
                    "https:\/\/www.beautycleanup.ru\/pictures\/Screenshot_2026-10-06_at_08.50.05@2x.png",
                    "https:\/\/www.beautycleanup.ru\/pictures\/Screenshot_2026-10-06_at_07.42.36.png",
                    "https:\/\/www.beautycleanup.ru\/pictures\/Screenshot_2026-10-06_at_07.44.07.png"
                ]
            }
        }
    ],
    "_e2_version": 4199,
    "_e2_ua_string": "Aegea 11.5 (v4199e)"
}