PySide6/Qt Widget for Node-Based GPU Texture Generation with OpenGL
Budget: €30 – €50 EUR
# PySide6/Qt Widget for Node-Based GPU Texture Generation with OpenGL
## Project Description
I'm looking for a candidate with strong experience in **PySide6**, **Qt**, **Python**, and **OpenGL** to work on a specialized project. The project currently includes a small library that supports the creation of a **Directed Acyclic Graph (DAG)** of nodes, allowing tasks to be executed per node, either individually or in **parallel** (requiring knowledge of the **threading library** and **batching**).
The primary task for this project is to create a standalone **PySide6 widget** that allows users to visually create and connect nodes using different types of connections (linear, Bezier, etc.). It should be easy to add new types of connections in the future, and the widget must support **undo/redo** for each command. Nodes should be visually customizable while adhering to solid design principles, such as the **Open-Closed Principle**.
The provided ui-agnostic node library may be modified if required to improve efficiency and enhance the design of the project.
## Key Features
1. **Node Creation & Connection:**
- Ability to create nodes and connect them using different types of connections (linear, Bezier, etc.).
- Connections should be easily extendable to support new arrow types.
2. **Undo/Redo Support:**
- Full support for undo/redo actions for all node creation and connection commands.
3. **Customization & Extensibility:**
- Ensure that the node visual representations can be easily customized.
- The architecture should follow solid design principles (e.g., Open-Closed Principle) to allow contributors to easily extend or enhance functionality through plugins or add-ons.
4. **Parallel Execution:**
- Support executing tasks per node individually or in parallel, which requires understanding of Python's threading library and batching techniques. Already implemented in the standalone node based library
5. **GPU Texture Generator Example:**
- Develop a simple example application using this widget, focusing on creating a GPU texture generator.
- Implement ping-pong techniques to efficiently render textures, though only the bare minimum is required (no complex node renders, arrow rendering, or texture nodes needed).
## Additional Notes
- You will be provided with a bootstrapped GitHub repository for the project, and we’ll track milestones and issues through GitHub.
- If the working relationship is efficient and productive, there will be opportunities for further contributions to the project.
- The provided library can be modified if needed to make the project more efficient and improve the overall design.
## Requirements
- Strong experience with PySide6/Qt, Python, and OpenGL.
- Familiarity with solid design principles (e.g., Open-Closed Principle).
- Experience working with DAGs or node-based systems.
- Strong knowledge of Python's threading library and batching techniques for parallel execution.
- Ability to design an extensible architecture, ensuring future enhancements through plugins or addons.
## Deliverables
- A standalone PySide6 widget that supports node creation and connections with undo/redo.
- A simple example of a GPU texture generator using the widget, with efficient texture rendering via ping-pong techniques.
- Well-documented code that is easy to extend and follow.
## Project Description
I'm looking for a candidate with strong experience in **PySide6**, **Qt**, **Python**, and **OpenGL** to work on a specialized project. The project currently includes a small library that supports the creation of a **Directed Acyclic Graph (DAG)** of nodes, allowing tasks to be executed per node, either individually or in **parallel** (requiring knowledge of the **threading library** and **batching**).
The primary task for this project is to create a standalone **PySide6 widget** that allows users to visually create and connect nodes using different types of connections (linear, Bezier, etc.). It should be easy to add new types of connections in the future, and the widget must support **undo/redo** for each command. Nodes should be visually customizable while adhering to solid design principles, such as the **Open-Closed Principle**.
The provided ui-agnostic node library may be modified if required to improve efficiency and enhance the design of the project.
## Key Features
1. **Node Creation & Connection:**
- Ability to create nodes and connect them using different types of connections (linear, Bezier, etc.).
- Connections should be easily extendable to support new arrow types.
2. **Undo/Redo Support:**
- Full support for undo/redo actions for all node creation and connection commands.
3. **Customization & Extensibility:**
- Ensure that the node visual representations can be easily customized.
- The architecture should follow solid design principles (e.g., Open-Closed Principle) to allow contributors to easily extend or enhance functionality through plugins or add-ons.
4. **Parallel Execution:**
- Support executing tasks per node individually or in parallel, which requires understanding of Python's threading library and batching techniques. Already implemented in the standalone node based library
5. **GPU Texture Generator Example:**
- Develop a simple example application using this widget, focusing on creating a GPU texture generator.
- Implement ping-pong techniques to efficiently render textures, though only the bare minimum is required (no complex node renders, arrow rendering, or texture nodes needed).
## Additional Notes
- You will be provided with a bootstrapped GitHub repository for the project, and we’ll track milestones and issues through GitHub.
- If the working relationship is efficient and productive, there will be opportunities for further contributions to the project.
- The provided library can be modified if needed to make the project more efficient and improve the overall design.
## Requirements
- Strong experience with PySide6/Qt, Python, and OpenGL.
- Familiarity with solid design principles (e.g., Open-Closed Principle).
- Experience working with DAGs or node-based systems.
- Strong knowledge of Python's threading library and batching techniques for parallel execution.
- Ability to design an extensible architecture, ensuring future enhancements through plugins or addons.
## Deliverables
- A standalone PySide6 widget that supports node creation and connections with undo/redo.
- A simple example of a GPU texture generator using the widget, with efficient texture rendering via ping-pong techniques.
- Well-documented code that is easy to extend and follow.