Open-source project
njbrown/texturelab avatar
njbrown/texturelab

TextureLab builds procedural textures on the GPU with Qt and CMake

Free, Cross-Platform, GPU-Accelerated Procedural Texture Generator

813 stars48 forksC++NOASSERTION

At a glance

What is it?
TextureLab is a C++17 and Qt 6 procedural texture generator, and its build documentation is unusually complete for a creative tool, with the exact apt line, the CMake prefix path per platform, a ctest invocation and a note that one missing dev package breaks the configure step.
Who is it for?
TextureLab suits a technical artist who wants a node based texture generator they can build and extend themselves, and it suits a team that needs to patch the source for a pipeline specific setup, since the repository is a normal C++ project with a public build.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 4 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The build instructions assume you read them in order

The README documents a C++17 and Qt 6 application built with CMake, and the prerequisites are specific. Qt 6 version 6.6 or newer is required, with the qtshadertools module, installed through the Qt online installer or aqtinstall, and CI uses 6.7.3. You also need CMake 3.16 or newer and a C++17 compiler, with GCC, Clang or MSVC 2022 named as the options. On Linux there is a package list, and the last entry in it is the one that bites.

bash
sudo apt install build-essential cmake libgl1-mesa-dev libxkbcommon-dev libvulkan-dev \
      libxcb-cursor0 libxcb-shape0-dev libcurl4-openssl-dev

The README explains why libcurl4-openssl-dev is in that list. It is required by sentry-native, which does the crash reporting, and without it CMake fails with the message CURL: Required feature AsynchDNS is not found. That failure mode is worth knowing in advance, because the error names a CMake feature rather than the package you are missing, and it surfaces during configuration rather than at build time.

Submodules first, then a per platform prefix path

The build sequence starts with a clone and a recursive submodule update, which matters because the repository carries a .gitmodules file and the third party code is not in the tree.

bash
git clone https://github.com/njbrown/texturelab.git
cd texturelab
git submodule update --init --recursive

cmake -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=/path/to/Qt/6.x.x/gcc_64
cmake --build build --target texturelab --parallel
./build/src/texturelab/texturelab

The CMAKE_PREFIX_PATH is the part that differs per platform, and the README gives both other cases. On Windows you use the Visual Studio generator with the flags -G "Visual Studio 17 2022" -A x64 and point CMAKE_PREFIX_PATH at a path such as C:\Qt\6.x.x\msvc2019_64. On macOS the result is an application bundle at build/src/texturelab/texturelab.app. So the same source produces a binary on Linux, an app bundle on macOS and a Visual Studio build on Windows, and the README is explicit about the differences rather than assuming one platform.

Debug builds get theme hot reload and no crash reports

Two runtime details come from the flags. The --no-launcher flag opens straight into the editor, skipping whatever the application shows first, and Debug builds enable theme hot reload, which the README says you can turn off with --no-dev-theme. The second detail is about telemetry. Local builds do not send crash reports, and to test Sentry you configure with the DSN supplied at build time, using -DTEXTURELAB_SENTRY_DSN with the value of the DSN. That is a sensible arrangement: a developer build does not phone home by default, and the crash reporting path is something you opt into by building with a DSN. It also means the sentry-native dependency in the Linux package list is not optional in the build even though the reporting is off by default.

Tests run through ctest, and packaging is scripted per platform

The test invocation is short.

bash
cmake --build build --parallel
ctest --test-dir build

And the packaging is described as three scripts producing three artefacts. scripts/package-linux.sh, scripts/package-macos.sh and scripts/package-windows.ps1 produce the AppImage, the DMG and the zip, and the release workflow at .github/workflows/release.yml publishes them. The repository top level matches that structure, with a CMakeLists.txt, a src/ directory, a tests/ directory, a resources/ directory, a public/ directory, a packaging/ directory, a scripts/ directory and a .clang-format file for code style. The README also points at the built-with list, which names Qt 6, the Qt Advanced Docking System, sentry-native with Crashpad, and TinyGLTF, so the docking behaviour of the editor panels and the glTF import path come from those rather than from code in this repository.

Where the tool stands, and what the release history says

The release tags tell the story of the project as clearly as anything else. Version 0.3.3 came in March 2022 and 0.3.2 in February 2022, and then there is a long gap until v0.4.0-beta on 2026-10-18. So the project went quiet for years and is now back, with a beta that is newer than anything in the 0.3 line. The last push was on 2026-10-19, a day after the beta tag, so the working tree is moving. The README's own channels are a Twitter account, a Discord invite and itch.io alongside the GitHub releases page, which is the profile of an independent creator project rather than a company product. The topics attached to the repository are worth reading too, since they advertise the intended workflow: pbr, procedural generation, substance-designer and unity sit next to electron and vue, which suggests the tool is aimed at producing maps that feed a game engine or a Substance Designer based pipeline, and the GPU accelerated claim in the description is what makes it interesting against the more general texture tools. The licence is GPLv3 according to the README and the badge, with third party component licences listed separately in packaging/licenses.

What you give up by using a beta in a production pipeline

The limitation is the release state, and it is sharper than it looks. If you put TextureLab in an asset pipeline, you are depending on an application whose newest tagged build is a beta, whose previous stable line shipped in 2022, and whose interface and file formats may therefore have changed in ways the changelog does not enumerate. A texture generator that produces maps your engine imports is not in the same position as a script, because a format change breaks every existing asset at once. The second limit is platform coverage in practice. The README documents builds for Linux, Windows and macOS, but the prebuilt artefacts are produced by a release workflow, and a local build is a different commitment: you are compiling a C++ and Qt application with submodules, which is fine for a technical artist who wants to change the code and awkward for anyone who just needs the tool. The third limit is scope. This is a generator for textures, and if your pipeline needs a full material authoring tool with a unified shading model, a texture generator is a different product, and the fact that the repository topics mention pbr and substance-designer does not mean either of those is implemented here.

Editorial conclusion

TextureLab suits a technical artist who wants a node based texture generator they can build and extend themselves, and it suits a team that needs to patch the source for a pipeline specific setup, since the repository is a normal C++ project with a public build. It is the wrong tool for someone who wants a polished installer with a stable feature set, because the newest tag is a beta and the last full release was in 2022, and it is the wrong tool if you are on a platform without a prebuilt package. Before building, install Qt 6 with the qtshadertools module and the Linux dev packages listed in the README, because CMake fails early on a missing libcurl4-openssl-dev rather than at link time, and expect a beta build while the release line is stale. The last push was on 2026-10-19 and the current release is v0.4.0-beta from 2026-10-18.

Frequently asked questions

How do I build TextureLab from source?

Install Qt 6.6 or newer with the qtshadertools module, CMake 3.16 or newer and a C++17 compiler, then clone the repository, run git submodule update --init --recursive, configure with cmake -B build pointing CMAKE_PREFIX_PATH at your Qt installation, and build the texturelab target. On Linux the README lists the required apt packages including libcurl4-openssl-dev, which sentry-native needs.

What are the available Make and CMake flags for TextureLab?

The README documents two runtime flags: --no-launcher opens straight into the editor, and Debug builds enable theme hot-reload, which --no-dev-theme turns off. On the build side, Sentry crash reporting is configured with -DTEXTURELAB_SENTRY_DSN, and local builds do not send crash reports.

How do I run the TextureLab tests?

Build everything with cmake --build build --parallel and then run ctest --test-dir build. The packaging scripts scripts/package-linux.sh, scripts/package-macos.sh and scripts/package-windows.ps1 produce the AppImage, DMG and zip that the release workflow publishes.

Official sources

  1. Issues
  2. njbrown/texturelab on GitHub
  3. README
  4. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/njbrown-texturelab.svg)](https://hysenlabs.com/projects/njbrown-texturelab)

Was this useful?