Our Philosophy
By order of decreasing importance:
Learn and create resources for others to learn
We are here to learn and share. As the name Lab suggests this is a place to make experiments and try out implementations.
By writing documentation and blog articles we also strive to share our findings with others.
Don't worry about what already exists
If you want to build something, go ahead!
While looking for inspiration, you will likely stumble upon people that have already done what you had in mind, perhaps even better. But if you let this stop you from starting your own version of this idea, you will never write a single line of code :(
Remember that we are here to learn and write code because we enjoy writing code. Don't let any other consideration stop you from doing what you want!
Telling a developer there is already code to do that is like telling a songwritter there is already a song about love - Every developer
It is when multiple people implement similar ideas that the best ones emerge. We can all learn from each other and anyone has a chance of finding sweet little details that improve the whole system.
Easy to use
We can't produce as many cool features as big softwares, so we should embrace our minimalistic essence and produce few but polished and intuitive features. Our tool might only be useful for a few use cases, but we want it to be the best for those use cases.
Build an ecosystem of open-source libraries
With Cool we aim to produce high-quality libraries that everyone can use and contribute to.
Freedom
CoolLab must facilitate the experimenting process of generative art: it must be easy to iterate, customize, try things: you plug in nodes, things happen, you get visual and textual feedback if you do something wrong that cannot work (e.g. trying to connect incompatible types of nodes together). (Idea: the first time you do something wrong there is visual feedback, and if you do it again a popup with an error message appears).
Prefer Visual Quality to Performance
We are not building a game engine; even though performance is important because we want to be able to visualize our changes in real time, visual quality is and should remain our main focus.
Be cross-platform
Refuse any solution that would reduce accessibility to the software, especially when cross-platform solutions exist.
Examples of such technologies are Cuda (Nvidia only, can be replaced by Vulkan's compute shaders) and OpenGL 4.0 and greater (not suported on MacOS, can be replaced by Vulkan or WebGPU).
Non-destructive / Procedural
Destructive workflows are so frustrating and stressful to me
Programmer-like workflow
I want CoolLab projects to be versionnable through Github. This means that our project files should be text-based (json or xml).
Build great debug tools
They will help you a lot later down the road. And they can also be helpful to users, so keep them in the final build: for example to view the history, or the registries.