{"id":19024936,"url":"https://github.com/farzadshayanfar/nodiumpy","last_synced_at":"2025-09-10T18:40:44.446Z","repository":{"id":163465752,"uuid":"636447425","full_name":"farzadshayanfar/nodiumpy","owner":"farzadshayanfar","description":"Simple node editor application for learning image processing","archived":false,"fork":false,"pushed_at":"2023-05-16T07:44:56.000Z","size":766,"stargazers_count":23,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-06T20:44:22.010Z","etag":null,"topics":["dearpygui","flow-based-programming","image-processing","node-editor","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/farzadshayanfar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-05-04T21:45:45.000Z","updated_at":"2025-06-28T09:16:30.000Z","dependencies_parsed_at":"2023-07-04T04:16:17.094Z","dependency_job_id":null,"html_url":"https://github.com/farzadshayanfar/nodiumpy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/farzadshayanfar/nodiumpy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/farzadshayanfar%2Fnodiumpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/farzadshayanfar%2Fnodiumpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/farzadshayanfar%2Fnodiumpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/farzadshayanfar%2Fnodiumpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/farzadshayanfar","download_url":"https://codeload.github.com/farzadshayanfar/nodiumpy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/farzadshayanfar%2Fnodiumpy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274506491,"owners_count":25298506,"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","status":"online","status_checked_at":"2025-09-10T02:00:12.551Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["dearpygui","flow-based-programming","image-processing","node-editor","python"],"created_at":"2024-11-08T20:39:35.448Z","updated_at":"2025-09-10T18:40:44.376Z","avatar_url":"https://github.com/farzadshayanfar.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"./github_readme_files/nodiumpy_app_icon.png\" width=\"125\"/\u003e\n\n# NodiumPy\n\nThis is a very simple and minimal python application for node based image processing. The structure is very lean and\nhighly modular and allows for the existing nodes to be easily modified or for new nodes to be conveniently added.\n\nMy goal in writing this was to learn about dearpygui and flow based programming. The use case for this simple\napplication is merely educational and will benefit students or other enthusiasts wishing to develop a visceral and\npractical understanding of how some image algorithms affect the input image and what the combination of these algorithms\nwill look like.\n\n![demo_image_1](./github_readme_files/nodiumpy_demo_image_1.png)\n\n\u003c/br\u003e\n\u003c/br\u003e\n\n# Avalilable Nodes\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eInput Nodes\u003c/strong\u003e\u003c/summary\u003e\n\u003ctable\u003e\n\n\u003ctr\u003e\n\u003ctd width=\"140\"\u003eImage\u003c/td\u003e\n\u003ctd width=\"300\"\u003e\u003cimg src=\"./github_readme_files/input_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nThis node opens a single image file (common image formats are supported).\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eImage Folder\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/image_folder_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nThis node allows retrieving a sequence of images in a specified directory. Also makes it possible to iterate and loop over the sequence.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eScreen Recorder\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/screen_recorder_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nUsing this node, it is possible to capture the main screen or get all available screens (as a single large image). We can capture screen(s) as a single snapshot or a stream of snapshots.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003e2D Shape\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/2d_shape_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nThis node creates several primitive 2D shapes with control over size, fill color, stroke color, and stroke weight.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eVideo\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/video_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nThis node retrieve a video file and allows common video play functionality (playing, seeking, frame skip, and looping)\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eWebcam\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/webcam_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nAs the name denotes, this node is for capturing image streams from connected webcams.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eAdjustment Nodes\u003c/strong\u003e\u003c/summary\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"140\"\u003eCrop\u003c/td\u003e\n\u003ctd width=\"300\"\u003e\u003cimg src=\"./github_readme_files/crop_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nNode for cropping an input image. It offers two modes for cropping: (1) center crop, and (2) two corner crop\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eFlip\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/flip_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nFlips the input image either horizontally, vertically or both.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eMask\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/mask_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nApplies a binary mask to an input image.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eNormalize\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/normalize_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nNormalizes the input image using provided mean and std. \n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eResize\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/resize_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nNode for resizing the input image.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eRotate\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/rotate_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nRotates the input image. There is an option for allowing reshaping of the rotated image, if off the rotated image is truncated, otherwise it will resize the rotated image such that no truncation happens.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eThreshold\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/threshold_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nNode for thresholding input images.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003c/table\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eFilter Nodes\u003c/strong\u003e\u003c/summary\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"140\"\u003eConvolution\u003c/td\u003e\n\u003ctd width=\"300\"\u003e\u003cimg src=\"./github_readme_files/convolution_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nThis node applies convolution operation for a parameterized kernel and the input image. \n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eEdge Detection\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/edge_detection_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nThis node allows for application of several edge detection algorithms on the input image.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eLight Enhancement\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/light_enhancement_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nCurrently this node only offers an implementation of the VEVID algorithm from \u003cem\u003ePhyCV\u003c/em\u003e library.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eSmoothing / Sharpening\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/smoothing_sharpening_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nThis node contains some of the common algorithms for smoothing and sharpening of the input image.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eCode Snippet\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/code_snippet_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nWe can use this node to write our own custom python filter code snippet. The variable \"inImg\" holds the reference to the input image and the variable \"outImg\" is the reference to the output image. \n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eViewer Nodes\u003c/strong\u003e\u003c/summary\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"140\"\u003eCanvas\u003c/td\u003e\n\u003ctd width=\"300\"\u003e\u003cimg src=\"./github_readme_files/canvas_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nThis node allows for composition of several input images into an output image. It supports layering, transforming, and several blending modes.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eImage View\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/image_view_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nThis node is used to visulize the output image or output image sequence. It has a context menu with entries for resizing and saving the displayed image.\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eOutput Nodes\u003c/strong\u003e\u003c/summary\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"140\"\u003eImage Writer\u003c/td\u003e\n\u003ctd width=\"300\"\u003e\u003cimg src=\"./github_readme_files/image_writer_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nNode for writing image files to disk.\n\u003c/td\u003e\n\u003c/tr\u003e\n\n\u003ctr\u003e\n\u003ctd\u003eVideo Writer\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"./github_readme_files/video_writer_node.png\"\u003e\u003c/td\u003e\n\u003ctd\u003e\nNode for writing video files to disk.\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c/details\u003e\n\u003c/br\u003e\n\n# Requirements\n\nPython 3.11.3 and above is supported. All the required libraries can be installed using this line:\n\n```\npip install dearpygui opencv-python Pillow\n```\n\n\u003c/br\u003e\n\n# Running\n\nAfter setting up a python environment and installing the requirements, you can launch nodiumpy by running *main.py*\n\n```\npython main.py\n```\n\n\u003c/br\u003e\n\n# License\n\nNodiumPy is licensed under Apache 2.0 License.\n\u003c/br\u003e\n\u003c/br\u003e\n\n# Credits\n\n+ Developed by Farzad Shayanfar\n+ *[Jonathan Hoffstadt](https://github.com/hoffstadt)* and *[Preston Cothren](https://github.com/Pcothren)* and others\n  for their work on *[DearPyGui](https://github.com/hoffstadt/DearPyGui)*\n+ This work is highly inspired by\n  *[Image-Processing-Node-Editor](https://github.com/Kazuhito00/Image-Processing-Node-Editor)* by\n  *[Kazuhito Takahashi](https://github.com/Kazuhito00)*","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffarzadshayanfar%2Fnodiumpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffarzadshayanfar%2Fnodiumpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffarzadshayanfar%2Fnodiumpy/lists"}