# Nodezator
Nodezator is a generalist Python node editor. It is a desktop application that works by connecting Python functions (and callables in general) visually in order to produce flexible parametric behavior/data/applications/snippets.
![nodezator screenshot](https://nodezator.com/images/screenshot.png)
Nodezator enables node-based programming with Python and allows its integration with regular text-based programming in Python, by letting users export their node layouts as plain Python code. This means your workflow is never overly dependent on the app itself. We guarantee your freedom!
Creating nodes is very straightforward: all you need to define a node is a function, since Nodezator automatically converts functions into nodes. For instance, the function below...
```python
def get_circle_area(radius:float=0.0):
return math.pi * (radius ** 2)
main_callable = get_circle_area
```
...is automatically turned into the following node:
![node image](https://nodezator.com/images/get_circle_area_node.png)
You can actually turn **any** callable into a node very easily: classes, methods, etc. All callables available in the Python ecosystem can be turned into a node (even the ones defined in C, for instance).
This means you can turn callables from existing Python libraries into nodes very easily! That is, the callables in all hundreds of thousands of projects in the Python Package Index ([PyPI][]) can be easily used as nodes already!
For instance, this is all you need to turn [numpy.save()][] into a node:
```python
from numpy import save
main_callable = save
third_party_import_text = 'from numpy import save'
```
With just those 03 lines of code you generate this node:
![numpy save node](https://nodezator.com/images/numpy_save.png)
There's also a [youtube video][] presenting Nodezator:
[![thumb of youtube video](https://img.youtube.com/vi/GlQJvuU7Z_8/hqdefault.jpg)](https://www.youtube.com/watch?v=GlQJvuU7Z_8)
Nodezator is made with pure Python on top of the [pygame-ce][] library, by [Kennedy Richard Silva Guerra][] (born in 1990), as part of the [Indie Python][] project.
After you finish reading this README file, you may also want to visit Nodezator's [homepage][].
## Installation/usage
To launch and use Nodezator you can either install it with `pip` or you can just download the source and launch Nodezator as a standalone/portable application (that is, without installing it).
### Installing Nodezator with pip
If you want to install it, just execute the command below. It will install nodezator and also, if not available yet, [pygame-ce][] and [numpy][].
```
pip install --upgrade nodezator
```
If everything goes well, after installing you should be able to launch the app by typing `nodezator` or `python -m nodezator` in your command line (or `python3 -m nodezator` depending on you system).
### Using Nodezator as a standalone/portable app (without installing it)
If you want to use Nodezator without installing it, you'll need 02 things:
- to have Python installed in your system along with the [pygame-ce][] and [numpy][] libraries;
- to download Nodezator's source (the `nodezator` folder in the top level of this repository).
Then, to launch the app, you just need to go to the location where you put the `nodezator` folder containing the source (not inside it), open the command line and run `python -m nodezator` or `python3 -m nodezator`, depending on your system.
## User Manual
Check the user [manual][] to know how to use Nodezator.
The manual is also available inside the app in the menu **Help > Open manual**.
The in-app version is always the most accurate, since it is updated first, whereas the web version is exported from it. Nonetheless, effort is made to always keep both of them up to date and in sync.
## How nodes are created, loaded and shared
Nodezator already comes with a lot of useful general nodes representing common Python operations, built-ins and callables from the standard library.
However, users are encouraged to define their own nodes for their specific purposes, or use existing nodes from other users.
Nodes are created and organized within folders that we call **node packs**.
Since node packs are just folders containing your Python functions/callables, you can:
- keep them local to your own machine;
- share them with other people in a pen drive or over the internet;
- upload them to [PyPI][] (the Python Package Index) as Python packages so anyone can install them with the `pip` command;
This chapter of the manual shows how to define your own node packs: [defining your first node][]. The chapters following it are also useful to learn additional ways to define nodes and access more features.
To learn how to load node packs, you can check this chapter: [loading nodes][].
Finally, to learn how to distribute node packs, you can check this chapter: [distributing your nodes][].
## Finding and sharing nodes for download
Node packs for download are available in the [nodes gallery][]. There you can search node packs by name, author and tags.
To have your node pack added to the nodes gallery/database, upload it somewhere people can download/install it from, as described in the manual's chapter about [distributing your nodes][], then submit the relevant info about your node pack in this [node pack submission form][]. Alternatively, you can also submit a pull request to the [nodes gallery repository][] on github following the instructions on the README.md file.
You can also [email][] me if you need any help.
Remember that before loading nodes you download from the web you might need to install extra modules if the nodes use them.
## Contributing
Everyone is welcome to suggest and contribute changes.
If the proposed change is small enough, you can submit your pull request for analysis right away and it will be answered ASAP.
More complex pull requests will also be welcome in the future, but due to the complexity of the app, I will first need to implement some automated GUI tests to ensure everyone's future contributions do not break each other.
## Issues
### Urgent/critical issues
If you find a bug that...
- causes Nodezator to crash;
- representing something malfunctioning or not working at all;
...then, please, use [github issues][] to submit an issue as soon as possible.
Please, include as much information as you can:
- your operating system;
- your Python version;
- what was your goal;
- the steps that resulted in the problem;
- screenshots/videos, if applicable.
If possible, also read the Nodezator's [manual][] to ensure you are doing everything as they are supposed to be done. I often find myself wondering if I there is any problem only to later find out that I was doing something wrong myself.
Nevertheless, never hesitate to ask for help, even if you don't have much info about the problem or don't have any technical expertise.
### Minor issues
If however, the problem is not as serious/urgent, that is, it doesn't cause Nodezator to crash or malfunction, then, please, open a discussion on [github discussions][] instead. There's a dedicated category for this kind of problem called "Minor issue".
It doesn't mean your issue is any less important. It is just that in Nodezator and other Indie Python repos we use [github issues][] for things that crash the app or otherwise prevent the user from doing something that is supposed to be available (stuff that cause crashes or malfunctioning). When such a critical issue appears, any other work is paused and all attention is given to that issue so that it can be fixed ASAP.
This measure is taken for the benefit of the users: by doing things this way, whenever you have an urgent/critical issue, it won't compete for space with other less urgent matters. We'll be able to promptly schedule time to solve the issue.
Minor issues, suggestions of improvements, feature requests, feedback about bad experiences, etc. are all important, but they don't have the same urgency as something that crashes the app or causes it to malfunction. This is why we use [github discussions][] for the less urgent stuff. They'll be tended to all the same, just not with the same urgency.
Of course, [github discussions][] is used for many other important stuff as well, as we'll see in the next section.
## Discussions/forum
Consider [github discussions][] as the official online forum for Nodezator.
It is used for many things like announcements to the community, to list planned/requested features, to communicate and discuss current work, etc.
If you have...
- feedback;
- suggestions;
- ideas;
- concerns;
- questions;
- constructive criticism;
- minor issues that don't cause the app to crash or malfunction;
...you are encouraged to post there.
## Contact
Contact me any time via [Twitter/X][] or [email][].
You are also welcome on the Indie Python's [discord server][].
## Patreon and donations
Please, support Nodezator and other useful apps of the Indie Python project by becoming our patron on [patreon][]. You can also make recurrent donations using [github sponsors][], [liberapay][] or [Ko-fi][].
Both [github sponsors][] and [Ko-fi][] also accept one-time donations.
Any amount is welcome and helps. Check the project's [donation page][] for all donation methods available.
## License
Nodezator's source is dedicated to the public domain with [The Unlicense][].
The `nodezator_icons` font used in the app for its icons was created by me and is dedicated to the public domain with a [CC0 license][]. All other fonts are not mine and are licensed under the [Open Font License][].
The logos/images listed below, featured in Nodezator's splash screen (and sometimes in other spots in the app), are all mine:
- the Kennedy Richard "KR" logo;
- the Indie Python project logo;
- the Nodezator logo;
- the robot, called Zenith Green, Nodezator's mascot.
Please, don't use them for questionable ends. Use them only as references to the stuff they represent.
## Code quality
Nodezator is the result of more than 04 years of development. Some of the code was reviewed and refactored many times and is not only carefully designed but also commented in detail, as if you were on a field/school trip inside the code. A few unit tests are available as well. Also, whenever possible, I kept the line count of the modules close to 500 lines.
Other parts of the code, however, specially the most recent ones, are not so refined. Bear this in mind as you browse the code for the first time. Expect such parts of the code to be refactored and properly commented in the future.
Also, other parts of the code, despite being carefully designed, might be redesigned in the future, since now that the app is published, it should evolve as we find problems and contribute to improve the app. In other words, some of the design may change in the future, so bear in mind that the software is still evolving.
[homepage]: https://nodezator.com
[Kennedy Richard Silva Guerra]: https://kennedyrichard.com
[PyPI]: https://pypi.org
[numpy.save()]: https://numpy.org/doc/stable/reference/generated/numpy.save.html
[youtube video]: https://www.youtube.com/watch?v=GlQJvuU7Z_8
[pygame-ce]: https://pyga.me
[numpy]: https://numpy.org
[Indie Python]: https://indiepython.com
[manual]: https://manual.nodezator.com
[Twitter/X]: https://x.com/KennedyRichard
[email]: mailto:kennedy@kennedyrichard.com
[discord server]: https://indiepython.com/discord
[patreon]: https://patreon.com/KennedyRichard
[github sponsors]: https://github.com/sponsors/KennedyRichard
[liberapay]: https://liberapay.com/KennedyRichard
[Ko-fi]: https://ko-fi.com/kennedyrichard
[donation page]: https://indiepython.com/donate
[defining your first node]: https://manual.nodezator.com/ch-defining-your-first-node.html
[loading nodes]: https://manual.nodezator.com/ch-loading-nodes.html
[distributing your nodes]: https://manual.nodezator.com/ch-distributing-nodes.html
[nodes gallery]: https://gallery.nodezator.com
[node pack submission form]: https://docs.google.com/forms/d/e/1FAIpQLSd1XceOnzEeaBZcpkkXEFiAVO_5YUbd43sieQUekh1PZ8dm5A/viewform?usp=sf_link
[nodes gallery repository]: https://github.com/IndiePython/gallery.nodezator.com
[github issues]: https://github.com/IndiePython/nodezator/issues
[github discussions]: https://github.com/IndiePython/nodezator/discussions
[The Unlicense]: https://unlicense.org/
[Open Font License]: https://en.wikipedia.org/wiki/SIL_Open_Font_License
[CC0 license]: https://creativecommons.org/publicdomain/zero/1.0/
Raw data
{
"_id": null,
"home_page": "https://nodezator.com",
"name": "nodezator",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "gui, desktop, application, pygame, graph, graphs, nodes, node, editor",
"author": "Kennedy Richard",
"author_email": "kennedy@kennedyrichard.com",
"download_url": "https://files.pythonhosted.org/packages/09/5b/18bdc776e08d7e5578659caf68da1cb9107a857567dc1a6c052fd3760de7/nodezator-1.5.0.tar.gz",
"platform": null,
"description": "# Nodezator\n\nNodezator is a generalist Python node editor. It is a desktop application that works by connecting Python functions (and callables in general) visually in order to produce flexible parametric behavior/data/applications/snippets.\n\n![nodezator screenshot](https://nodezator.com/images/screenshot.png)\n\nNodezator enables node-based programming with Python and allows its integration with regular text-based programming in Python, by letting users export their node layouts as plain Python code. This means your workflow is never overly dependent on the app itself. We guarantee your freedom!\n\nCreating nodes is very straightforward: all you need to define a node is a function, since Nodezator automatically converts functions into nodes. For instance, the function below...\n\n```python\ndef get_circle_area(radius:float=0.0):\n return math.pi * (radius ** 2)\n\nmain_callable = get_circle_area\n```\n\n...is automatically turned into the following node:\n\n![node image](https://nodezator.com/images/get_circle_area_node.png)\n\nYou can actually turn **any** callable into a node very easily: classes, methods, etc. All callables available in the Python ecosystem can be turned into a node (even the ones defined in C, for instance).\n\nThis means you can turn callables from existing Python libraries into nodes very easily! That is, the callables in all hundreds of thousands of projects in the Python Package Index ([PyPI][]) can be easily used as nodes already!\n\nFor instance, this is all you need to turn [numpy.save()][] into a node:\n\n```python\nfrom numpy import save\n\nmain_callable = save\n\nthird_party_import_text = 'from numpy import save'\n```\n\nWith just those 03 lines of code you generate this node:\n\n![numpy save node](https://nodezator.com/images/numpy_save.png)\n\nThere's also a [youtube video][] presenting Nodezator:\n\n[![thumb of youtube video](https://img.youtube.com/vi/GlQJvuU7Z_8/hqdefault.jpg)](https://www.youtube.com/watch?v=GlQJvuU7Z_8)\n\nNodezator is made with pure Python on top of the [pygame-ce][] library, by [Kennedy Richard Silva Guerra][] (born in 1990), as part of the [Indie Python][] project.\n\nAfter you finish reading this README file, you may also want to visit Nodezator's [homepage][]. \n\n\n## Installation/usage\n \nTo launch and use Nodezator you can either install it with `pip` or you can just download the source and launch Nodezator as a standalone/portable application (that is, without installing it).\n\n\n### Installing Nodezator with pip\n\nIf you want to install it, just execute the command below. It will install nodezator and also, if not available yet, [pygame-ce][] and [numpy][].\n \n```\npip install --upgrade nodezator\n```\n\nIf everything goes well, after installing you should be able to launch the app by typing `nodezator` or `python -m nodezator` in your command line (or `python3 -m nodezator` depending on you system).\n\n\n### Using Nodezator as a standalone/portable app (without installing it)\n\nIf you want to use Nodezator without installing it, you'll need 02 things:\n\n- to have Python installed in your system along with the [pygame-ce][] and [numpy][] libraries;\n- to download Nodezator's source (the `nodezator` folder in the top level of this repository).\n\nThen, to launch the app, you just need to go to the location where you put the `nodezator` folder containing the source (not inside it), open the command line and run `python -m nodezator` or `python3 -m nodezator`, depending on your system.\n\n\n## User Manual\n\nCheck the user [manual][] to know how to use Nodezator.\n\nThe manual is also available inside the app in the menu **Help > Open manual**.\n\nThe in-app version is always the most accurate, since it is updated first, whereas the web version is exported from it. Nonetheless, effort is made to always keep both of them up to date and in sync.\n\n\n## How nodes are created, loaded and shared\n\nNodezator already comes with a lot of useful general nodes representing common Python operations, built-ins and callables from the standard library.\n\nHowever, users are encouraged to define their own nodes for their specific purposes, or use existing nodes from other users.\n\nNodes are created and organized within folders that we call **node packs**.\n\nSince node packs are just folders containing your Python functions/callables, you can:\n\n- keep them local to your own machine;\n- share them with other people in a pen drive or over the internet;\n- upload them to [PyPI][] (the Python Package Index) as Python packages so anyone can install them with the `pip` command;\n\nThis chapter of the manual shows how to define your own node packs: [defining your first node][]. The chapters following it are also useful to learn additional ways to define nodes and access more features.\n\nTo learn how to load node packs, you can check this chapter: [loading nodes][].\n\nFinally, to learn how to distribute node packs, you can check this chapter: [distributing your nodes][].\n\n\n## Finding and sharing nodes for download\n\nNode packs for download are available in the [nodes gallery][]. There you can search node packs by name, author and tags.\n\nTo have your node pack added to the nodes gallery/database, upload it somewhere people can download/install it from, as described in the manual's chapter about [distributing your nodes][], then submit the relevant info about your node pack in this [node pack submission form][]. Alternatively, you can also submit a pull request to the [nodes gallery repository][] on github following the instructions on the README.md file.\n\nYou can also [email][] me if you need any help.\n\nRemember that before loading nodes you download from the web you might need to install extra modules if the nodes use them.\n\n\n## Contributing\n\nEveryone is welcome to suggest and contribute changes.\n\nIf the proposed change is small enough, you can submit your pull request for analysis right away and it will be answered ASAP.\n\nMore complex pull requests will also be welcome in the future, but due to the complexity of the app, I will first need to implement some automated GUI tests to ensure everyone's future contributions do not break each other.\n\n\n## Issues\n\n\n### Urgent/critical issues\n\nIf you find a bug that...\n\n- causes Nodezator to crash;\n- representing something malfunctioning or not working at all;\n\n...then, please, use [github issues][] to submit an issue as soon as possible.\n\nPlease, include as much information as you can:\n\n- your operating system;\n- your Python version;\n- what was your goal;\n- the steps that resulted in the problem;\n- screenshots/videos, if applicable.\n\nIf possible, also read the Nodezator's [manual][] to ensure you are doing everything as they are supposed to be done. I often find myself wondering if I there is any problem only to later find out that I was doing something wrong myself.\n\nNevertheless, never hesitate to ask for help, even if you don't have much info about the problem or don't have any technical expertise.\n\n\n### Minor issues\n\nIf however, the problem is not as serious/urgent, that is, it doesn't cause Nodezator to crash or malfunction, then, please, open a discussion on [github discussions][] instead. There's a dedicated category for this kind of problem called \"Minor issue\".\n\nIt doesn't mean your issue is any less important. It is just that in Nodezator and other Indie Python repos we use [github issues][] for things that crash the app or otherwise prevent the user from doing something that is supposed to be available (stuff that cause crashes or malfunctioning). When such a critical issue appears, any other work is paused and all attention is given to that issue so that it can be fixed ASAP.\n\nThis measure is taken for the benefit of the users: by doing things this way, whenever you have an urgent/critical issue, it won't compete for space with other less urgent matters. We'll be able to promptly schedule time to solve the issue.\n\nMinor issues, suggestions of improvements, feature requests, feedback about bad experiences, etc. are all important, but they don't have the same urgency as something that crashes the app or causes it to malfunction. This is why we use [github discussions][] for the less urgent stuff. They'll be tended to all the same, just not with the same urgency.\n\nOf course, [github discussions][] is used for many other important stuff as well, as we'll see in the next section.\n\n\n## Discussions/forum\n\nConsider [github discussions][] as the official online forum for Nodezator.\n\nIt is used for many things like announcements to the community, to list planned/requested features, to communicate and discuss current work, etc.\n\nIf you have...\n\n- feedback;\n- suggestions;\n- ideas;\n- concerns;\n- questions;\n- constructive criticism;\n- minor issues that don't cause the app to crash or malfunction;\n\n...you are encouraged to post there.\n\n\n## Contact\n\nContact me any time via [Twitter/X][] or [email][].\n\nYou are also welcome on the Indie Python's [discord server][].\n\n\n## Patreon and donations\n\nPlease, support Nodezator and other useful apps of the Indie Python project by becoming our patron on [patreon][]. You can also make recurrent donations using [github sponsors][], [liberapay][] or [Ko-fi][].\n\nBoth [github sponsors][] and [Ko-fi][] also accept one-time donations.\n\nAny amount is welcome and helps. Check the project's [donation page][] for all donation methods available.\n\n\n## License\n\nNodezator's source is dedicated to the public domain with [The Unlicense][].\n\nThe `nodezator_icons` font used in the app for its icons was created by me and is dedicated to the public domain with a [CC0 license][]. All other fonts are not mine and are licensed under the [Open Font License][].\n\nThe logos/images listed below, featured in Nodezator's splash screen (and sometimes in other spots in the app), are all mine:\n\n- the Kennedy Richard \"KR\" logo;\n- the Indie Python project logo;\n- the Nodezator logo;\n- the robot, called Zenith Green, Nodezator's mascot.\n\nPlease, don't use them for questionable ends. Use them only as references to the stuff they represent.\n\n\n## Code quality\n\nNodezator is the result of more than 04 years of development. Some of the code was reviewed and refactored many times and is not only carefully designed but also commented in detail, as if you were on a field/school trip inside the code. A few unit tests are available as well. Also, whenever possible, I kept the line count of the modules close to 500 lines.\n\nOther parts of the code, however, specially the most recent ones, are not so refined. Bear this in mind as you browse the code for the first time. Expect such parts of the code to be refactored and properly commented in the future.\n\nAlso, other parts of the code, despite being carefully designed, might be redesigned in the future, since now that the app is published, it should evolve as we find problems and contribute to improve the app. In other words, some of the design may change in the future, so bear in mind that the software is still evolving.\n\n\n[homepage]: https://nodezator.com\n[Kennedy Richard Silva Guerra]: https://kennedyrichard.com\n[PyPI]: https://pypi.org\n[numpy.save()]: https://numpy.org/doc/stable/reference/generated/numpy.save.html\n[youtube video]: https://www.youtube.com/watch?v=GlQJvuU7Z_8\n[pygame-ce]: https://pyga.me\n[numpy]: https://numpy.org\n[Indie Python]: https://indiepython.com\n\n[manual]: https://manual.nodezator.com\n\n[Twitter/X]: https://x.com/KennedyRichard\n[email]: mailto:kennedy@kennedyrichard.com\n[discord server]: https://indiepython.com/discord\n\n[patreon]: https://patreon.com/KennedyRichard\n[github sponsors]: https://github.com/sponsors/KennedyRichard\n[liberapay]: https://liberapay.com/KennedyRichard\n[Ko-fi]: https://ko-fi.com/kennedyrichard\n[donation page]: https://indiepython.com/donate\n\n[defining your first node]: https://manual.nodezator.com/ch-defining-your-first-node.html\n[loading nodes]: https://manual.nodezator.com/ch-loading-nodes.html\n[distributing your nodes]: https://manual.nodezator.com/ch-distributing-nodes.html\n[nodes gallery]: https://gallery.nodezator.com\n\n[node pack submission form]: https://docs.google.com/forms/d/e/1FAIpQLSd1XceOnzEeaBZcpkkXEFiAVO_5YUbd43sieQUekh1PZ8dm5A/viewform?usp=sf_link\n[nodes gallery repository]: https://github.com/IndiePython/gallery.nodezator.com\n\n[github issues]: https://github.com/IndiePython/nodezator/issues\n[github discussions]: https://github.com/IndiePython/nodezator/discussions\n\n[The Unlicense]: https://unlicense.org/\n[Open Font License]: https://en.wikipedia.org/wiki/SIL_Open_Font_License\n[CC0 license]: https://creativecommons.org/publicdomain/zero/1.0/\n\n",
"bugtrack_url": null,
"license": "Unlicense",
"summary": "A generalist Python node editor",
"version": "1.5.0",
"project_urls": {
"Bug Tracker": "https://github.com/IndiePython/nodezator/issues",
"Donate": "https://indiepython.com/donate",
"Forum": "https://github.com/IndiePython/nodezator/discussions",
"Homepage": "https://nodezator.com",
"Source code": "https://github.com/IndiePython/nodezator",
"User manual": "https://manual.nodezator.com"
},
"split_keywords": [
"gui",
" desktop",
" application",
" pygame",
" graph",
" graphs",
" nodes",
" node",
" editor"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0097cf173435f9a46fcfbeba3b2af3192a7679a8f7feaff3e3445a5aa99e3432",
"md5": "2dbd24f173119528e18b2f0a782ce484",
"sha256": "da70207f4fda3eb9fe53d55222eec06580078af517a008627727c8f721ae9de9"
},
"downloads": -1,
"filename": "nodezator-1.5.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2dbd24f173119528e18b2f0a782ce484",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 9167296,
"upload_time": "2024-06-22T01:11:22",
"upload_time_iso_8601": "2024-06-22T01:11:22.494037Z",
"url": "https://files.pythonhosted.org/packages/00/97/cf173435f9a46fcfbeba3b2af3192a7679a8f7feaff3e3445a5aa99e3432/nodezator-1.5.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "095b18bdc776e08d7e5578659caf68da1cb9107a857567dc1a6c052fd3760de7",
"md5": "4eaa653cbc0f00f6d0ebbe6ed4104965",
"sha256": "009f5553757a9cf048d1096c8d693d9fa61e1c25091b3c6e95e5eeb9387f424f"
},
"downloads": -1,
"filename": "nodezator-1.5.0.tar.gz",
"has_sig": false,
"md5_digest": "4eaa653cbc0f00f6d0ebbe6ed4104965",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 8826376,
"upload_time": "2024-06-22T01:11:27",
"upload_time_iso_8601": "2024-06-22T01:11:27.218865Z",
"url": "https://files.pythonhosted.org/packages/09/5b/18bdc776e08d7e5578659caf68da1cb9107a857567dc1a6c052fd3760de7/nodezator-1.5.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-06-22 01:11:27",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "IndiePython",
"github_project": "nodezator",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "nodezator"
}