{"id":20033186,"url":"https://github.com/dbr/tabtabtab-nuke","last_synced_at":"2025-05-05T05:31:01.092Z","repository":{"id":2143076,"uuid":"3087352","full_name":"dbr/tabtabtab-nuke","owner":"dbr","description":"A replacement for Nuke's \"tab\" node creator","archived":false,"fork":false,"pushed_at":"2023-07-07T09:36:40.000Z","size":112,"stargazers_count":38,"open_issues_count":10,"forks_count":14,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-08T17:21:23.530Z","etag":null,"topics":["nuke","python","ui","vfx"],"latest_commit_sha":null,"homepage":"http://www.nukepedia.com/python/ui/tabtabtab","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dbr.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-01-02T12:28:35.000Z","updated_at":"2025-04-04T19:52:27.000Z","dependencies_parsed_at":"2024-11-13T09:44:56.016Z","dependency_job_id":"b5ac9a58-c41f-4d96-b5b5-9d219aeacbf7","html_url":"https://github.com/dbr/tabtabtab-nuke","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbr%2Ftabtabtab-nuke","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbr%2Ftabtabtab-nuke/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbr%2Ftabtabtab-nuke/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbr%2Ftabtabtab-nuke/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dbr","download_url":"https://codeload.github.com/dbr/tabtabtab-nuke/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252445780,"owners_count":21749115,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["nuke","python","ui","vfx"],"created_at":"2024-11-13T09:44:50.901Z","updated_at":"2025-05-05T05:31:00.849Z","avatar_url":"https://github.com/dbr.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\"tabtabtab\", an alternative \"tab node creator thingy\" for [The\nFoundry's Nuke](http://www.thefoundry.co.uk/products/nuke)\n\nIt does substring matching (so \"blr\" matches \"blur\"), and weights your\nmost used nodes first (so if I make the useful \"Add [math]\" node\noften, it appears higher in the list than \"Add 3:2 pulldown\")\n\n# Installation\n\nPut tabtabtab on PYTHONPATH or NUKE_PATH somewhere (maybe in `~/.nuke/`)\n\n    mkdir -p ~/.nuke\n    cd ~/.nuke\n    curl -O https://raw.github.com/dbr/tabtabtab-nuke/master/tabtabtab.py\n\nThen to your `~/.nuke/menu.py` add:\n\n    def ttt():\n        import tabtabtab\n        m_graph = nuke.menu(\"Node Graph\")\n        m_graph.addCommand(\"Tabtabtab\", tabtabtab.main, \"Tab\")\n\n    try:\n        ttt()\n    except Exception:\n        import traceback\n        traceback.print_exc()\n\n\nThe original menu will still be available via \"Ctrl+Tab\". You can\nchange the last \"Tab\" argument to another shortcut if you wish.\n\n\n## Notes\n\nThis requires Nuke 6.3v5 or higher (for the integrated PySide module)\n\nFor older versions of 6.3, you must have\n[a custom PyQt installation][pyqtinstall]. For 6.2, see\n[Dylan Palmboom's tabtabtabLegacy fork][legacy], which may also work\nin even more ancient version.\n\n[pyqtinstall]: http://docs.thefoundry.co.uk/nuke/63/pythondevguide/custom_panels.html#extending-nuke-with-pyqt\n[legacy]: http://www.nukepedia.com/gizmos/python-scripts/ui/tabtabtablegacy/\n\nRelevant Foundry bug-id's:\n\n* [Fixed in Nuke 6.3v8] Bug #23576, \"Segmentation Fault on Nuke exit after using a custom\nPySide window\" (causes a mostly harmless \"Segmentation fault\" message\non exiting Nuke)\n\n* Feature #11662 to get this functionality integrated into Nuke\n\nIn order to support Nuke 9, you need to use a different snippet in\nyour `menu.py`, adding the tabtabtab call to the `Node Graph` instead\nof the Edit menu (see the updated installation instructions). The\nsame snippet works in older verisons of Nuke.\n\n## More elabourate description\n\nWith the default \"tab thing\", you press tab, start typing a node name\n(like \"Blu\") and you get a list of nodes that start with \"Blu\" (like\n\"Blur\"):\n\n![Nuke's builtin tab thing](imgs/nuke_tab.png)\n\n\"tabtabtab\" works very similarly, but does substring matching:\n\n![tabtabtab](imgs/tabtabtab.png)\n\nIn this example, \"tra\" finds \"Transform\" as you'd hope, but also other\nnodes, such as \"Trilinear\"... This is appearing because the letters\n\"tra\" can be found in order, \"TRilineAr\".\n\nWhile this seems like it might cause lots of useless results, you\nquickly memorise shortcuts like \"trear\" which matches \"TRilinEAR\" and\nvery little else. More usefully, \"trage\" will uniquely match \"TRAnsformGEo\"\nin an easy to type way, \"rdg\" matches \"ReaDGeo\"\n\nThe first letter must match, so \"geo\" will match \"GeoSelect\", but not\n\"ReadGeo\". However \"rgeo\" will match \"ReadGeo\"\n\n## Weighting\n\nEach time you create a node, it's \"weight\" is increase - the higher\nthe weight, the higher the node appears in the list.\n\nThis means if you create lots of \"Add [math]\" nodes, it will be\nweighted highly, so all you might need to type is tab then \"a\", and it\nwill be at the top of the list.\n\nThe nodes weight is shown by the block to the right of the node - the\nmore green, the higher the weighting\n\n## Matching menu location\n\nIf you start typing a shortcut, it will only match the part before the\n\"[Filter/SubMenu]\" (e.g \"blf\" will not match \"Blur [Filter]\")\n\nHowever if you type either \"[\" or two spaces, you can match against\nthe menu location (the part in \"[...]\")\n\nFor example, \"ax\" matches \"AddMix [Merge]\" and \"Axis [3D]\". If you\ntype \"ax[3\" or \"ax 3\" (ax-space-space-3) it will only match \"Axis\n[3D]\"\n\n## Change log\n\n* `v1.0`\n  * Basically working\n\n* `v1.1`\n  * Node weights are saved\n\n* `v1.2`\n  * Window appears under cursor\n\n* `v1.3`\n  * Created node remains selected between tab's, meaning \"tabtab\"\n    creates the previously node\n  * Clicking a node in the list creates it\n  * Window doesn't go offscreen if cursor is near edge\n\n* `v1.4`\n\n  * Blocks Nuke UI when active. This greatly improves usability when\n    the weights are slow to load (e.g in heavy Nuke script, or slow\n    home-dir access), as it prevents key-presses intended for\n    tabtabtab from being handled by Nuke (possibly creating\n    new/modifying nodes etc)\n  * Up/down arrow keys cycle correctly\n  * Indicator blocks now actually indicate node weights, instead of\n    always being green. The blocks are also now narrower, which looks\n    nicer\n  * Prevent vertical scrollbar (reduced number of shown items to 15)\n  * Node weights are loaded on every invokation, preventing\n    overwriting of values with multiple Nuke instances\n\n* `v1.5`\n\n  * Fixes crash-on-exit for Nuke 6.3v8 (as Nuke bug #23576 is closed)\n  * Window now closes properly\n\n* `v1.6`\n\n  * Code to add to `menu.py` more robust, so tabtabtab errors will\n    never prevent Nuke from starting\n\n  * Search string starting with space will disable the non-consecutive\n    searching, so `[tab][space]scen` will create a `Scene` instead of\n    a highly weight `ScanlineRender`\n\n  * Exposes menu items in `nuke.menu(\"Nuke\")` along with the nodes.\n    Meaning items in the \"File\" menu etc are exposed, for example\n    `[tab]exit` will be the same as \"File \u003e Exit\"\n\n* `v1.7`\n\n  * `ToolSets/Delete` submenu is excluded from tabtabtab.\n    [Github issue #6](https://github.com/dbr/tabtabtab-nuke/issues/6)\n\n  * Document that `Ctrl+Tab` opens the original tab menu\n\n  * Fixed bug which caused the node list to stop updating\n\n    [Github issue #10](https://github.com/dbr/tabtabtab-nuke/issues/10)\n\n  * Fixed bug where \"last used node\" might have matched a different\n    node (contrived example: the restored `Blur [Filter]` search text\n    might have matched the more highly weighted `Blur2 [Filter]`)\n\n* `v1.8`\n\n  * Installation instructions updated to support Nuke 9\n\n  * Weights file no longer overwritten if it fails to load for some\n    reason.\n    [Github issue #13](https://github.com/dbr/tabtabtab-nuke/issues/13)\n    \n  * Support PySide2\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdbr%2Ftabtabtab-nuke","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdbr%2Ftabtabtab-nuke","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdbr%2Ftabtabtab-nuke/lists"}