<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.luxcorerender.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=CodeHD</id>
	<title>LuxCoreRender Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.luxcorerender.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=CodeHD"/>
	<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/Special:Contributions/CodeHD"/>
	<updated>2026-05-19T13:26:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2705</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2705"/>
		<updated>2026-05-05T20:31:11Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Documentation and Announcements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; and should be done with care. If the upload to PyPI is interrupted halfway, for instance by lack of space, the version number will still become no more available.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, and the LuxCore should not have been used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same as the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&lt;br /&gt;
Part of the process of releasing a software is to create a proper documentation, both to support future development and to provide users with the necessary information to work efficiently with the software.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
During the various release steps (alpha, beta, release candidate, stable and subsequent bugfixes), the different items may be completed to varying degrees, reaching maturity towards the stable release. The following are suggestions based on past experience. You can always look at past releases for inspiration.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2704</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2704"/>
		<updated>2026-05-05T20:30:54Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Documentation and Announcements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; and should be done with care. If the upload to PyPI is interrupted halfway, for instance by lack of space, the version number will still become no more available.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, and the LuxCore should not have been used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same as the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&#039;&#039;&#039;THIS SECTION IS WORK IN PROGRESS (CodeHD, 23.04.2026)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Part of the process of releasing a software is to create a proper documentation, both to support future development and to provide users with the necessary information to work efficiently with the software.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the community.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki, particularly&lt;br /&gt;
** Release notes&lt;br /&gt;
** FAQ entries&lt;br /&gt;
** Updates to the build process&lt;br /&gt;
** Description of new features, API and SDL documentation&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist, ...&lt;br /&gt;
&lt;br /&gt;
During the various release steps (alpha, beta, release candidate, stable and subsequent bugfixes), the different items may be completed to varying degrees, reaching maturity towards the stable release. The following are suggestions based on past experience. You can always look at past releases for inspiration.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
* Update the release notes&lt;br /&gt;
* Update the API/SDL description&lt;br /&gt;
* Check the authors file and credits list&lt;br /&gt;
* Brief GitHub release notes with warning labels about stability&lt;br /&gt;
* Announcement on the most active user channels&lt;br /&gt;
* Decide on final tasks/known bugs that shall be fixed during alpha/beta phase&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
* Keep updating release notes and API/SDL documentation&lt;br /&gt;
* Update the Readme files in the code base&lt;br /&gt;
* Start preparing a summary release notes for the GitHub release&lt;br /&gt;
* Announcement of beta phase on more community channels&lt;br /&gt;
* Complete all tasks for features/known bugfixes&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
* All documentation shall be updated fully&lt;br /&gt;
* Update FAQs with feedback from alpha/beta phase&lt;br /&gt;
* Double check authors and credits&lt;br /&gt;
* GitHub release notes still should contain a warning label&lt;br /&gt;
* Start preparing stable release announcement messages for all channels&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
* Double-check all documentation&lt;br /&gt;
* Prepare the final release notes summary&lt;br /&gt;
* Create the release&lt;br /&gt;
* Update the download section on the website&lt;br /&gt;
* Create the announcement post on the forums&lt;br /&gt;
* Finally, announce on Discord and optionally other sites&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the for the stable release&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2674</id>
		<title>Deploying LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Deploying_LuxCoreRender&amp;diff=2674"/>
		<updated>2026-04-23T18:21:13Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Announcements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Audience, Definitions and Scope =&lt;br /&gt;
&lt;br /&gt;
This document is intended for &amp;lt;i&amp;gt;LuxCoreRender administrators&amp;lt;/i&amp;gt; only.&lt;br /&gt;
&lt;br /&gt;
The process requires that the administrator running Release and Deploy be:&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repositories on Github, including running actions, producing releases etc.&lt;br /&gt;
* granted with sufficient rights on LuxCoreRender repository on PyPI and PyPI-test, including adding and deleting versions&lt;br /&gt;
* skilled enough in Github administration and, especially, able to run Github actions&lt;br /&gt;
* and skilled enough in PyPI administration&lt;br /&gt;
Please check that you meet these criteria before reading further.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this document:&lt;br /&gt;
* &amp;lt;i&amp;gt;Releasing&amp;lt;/i&amp;gt; refers to the process of finalizing a version of LuxCore, i.e. defining a state of LuxCore which can be made available to end-users.&lt;br /&gt;
* &amp;lt;i&amp;gt;Deployment&amp;lt;/i&amp;gt; refers to the process of making a new release of LuxCoreRender available to end-users.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The scope of Deployment includes the following components:&lt;br /&gt;
* &amp;lt;b&amp;gt;Python Wheels&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;Samples&amp;lt;/b&amp;gt; (aka &amp;lt;code&amp;gt;luxcoreui&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;luxcoreconsole&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;b&amp;gt;BlendLuxCore&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Please note we deliberately exclude the dependencies (aka &amp;lt;code&amp;gt;LuxCoreDeps&amp;lt;/code&amp;gt;) from the deployment scope. Indeed:&lt;br /&gt;
* Dependencies are not intended for end-users, so deployment is not applicable.&lt;br /&gt;
* Up-to-date dependencies are necessary for LuxCore development and tests, so they should have been released for a while when LuxCore deployment occurs.&lt;br /&gt;
&lt;br /&gt;
= Prequisites =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Clean Branches ==&lt;br /&gt;
&lt;br /&gt;
The procedure assumes the releases can be created from the &amp;lt;i&amp;gt;default branches&amp;lt;/i&amp;gt; in each repository, namely (2026-04-19):&lt;br /&gt;
* &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt; for LuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;main&amp;lt;/code&amp;gt; for BlendLuxCore&lt;br /&gt;
Please check the above branches contain all the history you target for your releases and, if not, please make the required git plumbing.&lt;br /&gt;
&lt;br /&gt;
== LuxCore Buildability ==&lt;br /&gt;
&lt;br /&gt;
The procedure requires that targeted LuxCore components be &amp;lt;i&amp;gt;buildable&amp;lt;/i&amp;gt; by &amp;lt;i&amp;gt;Continuous Integration&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This can be checked by running the following Github Actions:&lt;br /&gt;
* Wheels: &amp;lt;code&amp;gt;LuxCore Python Wheel Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* Samples: &amp;lt;code&amp;gt;LuxCore Python Sample Builder&amp;lt;/code&amp;gt; (in LuxCore repository)&lt;br /&gt;
* BlendLuxCore: &amp;lt;code&amp;gt;BlendLuxCore Build Bundle&amp;lt;/code&amp;gt; (in BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
Please check the components meet those requirements before any Release/Deploy task is engaged.&lt;br /&gt;
&lt;br /&gt;
== Change Log readiness ==&lt;br /&gt;
&lt;br /&gt;
At a certain point in the process, a change log will be expected: you should have prepared it beforehand. Note this can be done afterwards, however.&lt;br /&gt;
&lt;br /&gt;
== Consistent Version Numbers ==&lt;br /&gt;
First, note you&#039;ll need 2 version numbers:&lt;br /&gt;
* One for LuxCore&lt;br /&gt;
* One for BlendLuxCore&lt;br /&gt;
There is no reason why these 2 version numbers should be the same.&lt;br /&gt;
&lt;br /&gt;
These version numbers must enforce Semantic Versioning, as stated in [[Building_LuxCoreRender | Building LuxCoreRender]]&lt;br /&gt;
&lt;br /&gt;
Please note also that &amp;lt;b&amp;gt;the version numbers should not have been used in anyway in previous releases&amp;lt;/b&amp;gt;. It is particularly important for PyPI (and PyPI-test), that will reject any upload declaring a version that has already been in use before, event for a short time.&lt;br /&gt;
&lt;br /&gt;
== Sufficient space on PyPI and PyPI-test ==&lt;br /&gt;
&lt;br /&gt;
The space on PyPI and PyPI-test is limited to 10GB (as of now, 2026-04-19).&lt;br /&gt;
&lt;br /&gt;
At first glance, this could look quite comfortable, however we release 20 wheels each time (about 80-100MB each): the space required for one release is about 1.5GB. As a consequence, the space sufficiency must be checked each time a version has to be deployed.&lt;br /&gt;
&lt;br /&gt;
Nota: this check is &amp;lt;i&amp;gt;critical&amp;lt;/i&amp;gt; and should be done with care. If the upload to PyPI is interrupted halfway, for instance by lack of space, the version number will still become no more available.&lt;br /&gt;
&lt;br /&gt;
= Procedure =&lt;br /&gt;
&lt;br /&gt;
== Pre-Flight Review ==&lt;br /&gt;
As stated above, before starting the core procedure, carry out the following actions:&lt;br /&gt;
&lt;br /&gt;
* Ensure the default branches are up-to-date&lt;br /&gt;
* Check LuxCore buildability: run the 3 actions listed above.&lt;br /&gt;
* Ensure the change log is available&lt;br /&gt;
* Define and check Release Version Numbers (one for LuxCore and one for BlendLuxCore): they should have been neither allocated before, and the LuxCore should not have been used on PyPI.&lt;br /&gt;
* Check the space on PyPI and PyPI-test. If not sufficient, clean oldest versions.&lt;br /&gt;
&lt;br /&gt;
Afterwards, you are ready to start the core process.&lt;br /&gt;
&lt;br /&gt;
== Wheels Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
* Set the &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter in &amp;lt;code&amp;gt;build-system/conan/conanfile.py&amp;lt;/code&amp;gt; to the targeted version number for LuxCore.&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
  Rebuild all: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will build the wheels and create a release in draft mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Open the draft release and set its status to &amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;. Also, insert the change log in the release text. Save the release.&lt;br /&gt;
&lt;br /&gt;
At this stage, the wheels are released, but we still have to deploy them through PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;checked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI test (deployment - test).&lt;br /&gt;
This is a test step, to check everything is fine before uploadig to real PyPI.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run action &amp;lt;code&amp;gt;LuxCore Python Wheels Publisher&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
  Branch: &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;&lt;br /&gt;
  Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
  Run on PyPI test: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
This will upload the wheels to PyPI (deployment).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At this stage, if everything succeeded, wheels are available for any user, with &amp;lt;code&amp;gt;pip install pyluxcore == &amp;lt;version&amp;gt; &amp;lt;/code&amp;gt;. You may want to test and/or have a look on PyPI.&lt;br /&gt;
&lt;br /&gt;
== Samples Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Nota #1: This step should be skipped for alpha releases, as the vast majority of alpha testers use Blender for testing. No need for samples in this context...&lt;br /&gt;
&lt;br /&gt;
Nota #2: We assume the wheels have just been released, so that it is possible to reuse their build artifacts. This will be done by clearing &#039;rebuild all&#039; in the following action.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;LuxCore Samples Releaser&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
   Rebuild all: &amp;lt;i&amp;gt;unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== BlendLuxCore Release and Deployment ==&lt;br /&gt;
&lt;br /&gt;
Important warning: BLC should &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; be released while related wheels have not been deployed yet. Indeed, &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt; version must be known before starting any release or deploy action of BLC.Once that requirement is met:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;luxloader/__init__.py&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;PYLUXCORE_VERSION&amp;lt;/code&amp;gt; to the version of related &amp;lt;code&amp;gt;pyluxcore&amp;lt;/code&amp;gt;. The version to use must be strictly the same as the one that appears on PyPI. Please check syntax carefully, as PyPI may slightly modify version number when uploading.&lt;br /&gt;
&lt;br /&gt;
* In &amp;lt;code&amp;gt;blender_manifest.toml&amp;lt;/code&amp;gt;, set &amp;lt;code&amp;gt;version&amp;lt;/code&amp;gt; parameter to the targeted version of BLC. Caveat: this version can differ from pyluxcore version defined above.&lt;br /&gt;
&lt;br /&gt;
* Commit your changes and push to BlendLuxCore repository, if needed.&lt;br /&gt;
&lt;br /&gt;
* Run Github action named &amp;lt;code&amp;gt;BlendLuxCore Create Release&amp;lt;/code&amp;gt;, with the following settings:&lt;br /&gt;
   Branch: &amp;lt;i&amp;gt;main&amp;lt;/i&amp;gt;&lt;br /&gt;
   Version: &amp;lt;i&amp;gt;the version number you selected before&amp;lt;/i&amp;gt;&lt;br /&gt;
   Update existing release (if any): &amp;lt;i&amp;gt;Unchecked&amp;lt;/i&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
At this stage, a &amp;lt;i&amp;gt;draft release&amp;lt;/i&amp;gt; should have been created.&lt;br /&gt;
&lt;br /&gt;
* Open the draft release, insert change log and set release status to &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;prerelease&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt; or &amp;lt;i&amp;gt;&amp;lt;code&amp;gt;latest release&amp;lt;/code&amp;gt;&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* For latest releases, publish the files on the website&lt;br /&gt;
&lt;br /&gt;
== Documentation and Announcements ==&lt;br /&gt;
&#039;&#039;&#039;THIS SECTION IS WORK IN PROGRESS (CodeHD, 23.04.2026)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Part of the process of releasing a software is to create a proper documentation, both to support future development and to provide users with the necessary information to work efficiently with the software.&lt;br /&gt;
Furthermore, the final step after release and deployment is to announce the release to the communicate.&lt;br /&gt;
&lt;br /&gt;
The following items are currently - as of v2.11 - particularly important and should be checked and well considered before a final release:&lt;br /&gt;
* This wiki&lt;br /&gt;
** particularly the pages linked on the front page&lt;br /&gt;
* The project website&lt;br /&gt;
** particularly the downloads section&lt;br /&gt;
* The README files in all active code repositories&lt;br /&gt;
* The AUTHORS file and credits list&lt;br /&gt;
** specifically regarding 3rd-party modules that may have been added to the code&lt;br /&gt;
* Announcement on the forums&lt;br /&gt;
* Announcement in the discord channel&lt;br /&gt;
* Announcement on Blenderartist&lt;br /&gt;
&lt;br /&gt;
During the various release steps (alpha, beta, release candidate, stable and subsequent bugfixes), the different items may be completed to varying degrees, reaching maturity towards the stable release. The following are suggestions based on past experience. You can always look at past releases for inspiration.&lt;br /&gt;
&lt;br /&gt;
==== Alpha ====&lt;br /&gt;
&lt;br /&gt;
==== Beta ====&lt;br /&gt;
&lt;br /&gt;
==== Release Candidate ====&lt;br /&gt;
&lt;br /&gt;
==== Stable (X.Y.0) ====&lt;br /&gt;
At this point, all&lt;br /&gt;
&lt;br /&gt;
==== Bugfix (X.Y.Z) ====&lt;br /&gt;
For bugfix releases, prepare the following&lt;br /&gt;
* Update the Release Notes on this wiki&lt;br /&gt;
* Prepare a summary release notes targeted at users&lt;br /&gt;
** This needs to only include the incremental changes from the previous version&lt;br /&gt;
* Make a short announcement on the same channels as the Stable release&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=BlendLuxCore_FAQ&amp;diff=2555</id>
		<title>BlendLuxCore FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=BlendLuxCore_FAQ&amp;diff=2555"/>
		<updated>2026-04-11T10:21:03Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* I can not enable the BlendLuxCore addon, it shows errors */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Frequently Asked Questions =&lt;br /&gt;
&lt;br /&gt;
=== When trying to use CUDA/OptiX, Blender crashes ===&lt;br /&gt;
&lt;br /&gt;
This can be a different manifestation of the issue described below (CUDA_ERROR_UNSUPPORTED_PTX_VERSION). Try to upgrade the nvidia driver to the latest version, or try the studio driver branches for a latest stable version.&lt;br /&gt;
&lt;br /&gt;
Specifically, this has been observed with nvrtc13 in combination with drivers &amp;lt;590.&lt;br /&gt;
&lt;br /&gt;
=== When trying to use CUDA/OptiX, I get the error message: &amp;lt;code&amp;gt;RUNTIME ERROR: CUDA driver API error CUDA_ERROR_UNSUPPORTED_PTX_VERSION (code: 222, file:.../cuda.cpp, line: xxx): the provided PTX was compiled with an unsupported toolchain.&amp;lt;/code&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
Your nvidia driver is too old compared to nvidia runtime compiler used by LuxCore, so the code compiled by LuxCore runtime compiler cannot be run by your driver.&lt;br /&gt;
&lt;br /&gt;
Please upgrade your nvidia driver to latest version, or at least to a suitable version with regard to runtime compiler: https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#id7&lt;br /&gt;
&lt;br /&gt;
=== After installation, I get the error message &amp;quot;could not import pyluxcore&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;pyluxcore&amp;quot; is the binary core library. BlendLuxCore downloads and installs the correct version for your system during installation. This error indicates something went wrong with this installation. Possible solutions are:&lt;br /&gt;
* Check that online access is allowed in the Blender preferences.&lt;br /&gt;
* Download may be restricted in company networks. You can try an [https://wiki.luxcorerender.org/BlendLuxCore_Installation#Offline_Installation offline-installation].&lt;br /&gt;
&lt;br /&gt;
=== I can not enable the BlendLuxCore addon, it shows errors ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: This section applies to older BlendLuxCore versions up to v2.9alpha&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Most problems in this area stem from broken graphics driver installations. Try to re-install or update your graphics driver.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For Windows users:&#039;&#039;&#039;&lt;br /&gt;
* Make sure that you have installed the [https://www.microsoft.com/en-US/download/details.aspx?id=40784 Visual C++ Redistributable Packages for Visual Studio 2013]&lt;br /&gt;
* If you use v2.1alpha0 or later, you will also need:&lt;br /&gt;
** [https://aka.ms/vs/15/release/vc_redist.x64.exe Microsoft Visual C++ Redistributable for Visual Studio 2017]&lt;br /&gt;
** [https://software.intel.com/sites/default/files/managed/59/aa/ww_icl_redist_msi_2018.3.210.zip Intel C++ redistributable]&lt;br /&gt;
&lt;br /&gt;
If this does not solve the problem, browse the [https://github.com/LuxCoreRender/BlendLuxCore/issues?q=is%3Aissue+label%3Ainstallation installation issues] in the bug tracker to check if your error message was already reported. &lt;br /&gt;
If it was not reported yet, open a new issue and copy the error message from the Blender console (on Windows, click Window -&amp;gt; Toggle System Console in Blender&#039;s menu. On Linux, start Blender from a terminal and try to enable the addon, then copy the error message from the terminal).&lt;br /&gt;
&lt;br /&gt;
See the [[BlendLuxCore_Installation | installation page]] for information on how to install, update and remove the BlendLuxCore addon.&lt;br /&gt;
&lt;br /&gt;
=== Is there something like Cycles&#039; Layer Weight/Fresnel/Facing node in LuxCore? ===&lt;br /&gt;
&lt;br /&gt;
No, in LuxCore there is no direct equivalent to this node, because it would not work with the many algorithms in LuxCore that trace rays from lights (instead of from the camera), like the bidirectional engine, light tracing mode, or the PhotonGI cache.&lt;br /&gt;
&lt;br /&gt;
Of course, all materials in LuxCore are physically based and have realistic fresnel effects built-in.&lt;br /&gt;
&lt;br /&gt;
You can achieve a similar effect with the dot product node, but it will work only for one viewpoint:&lt;br /&gt;
&lt;br /&gt;
[[File:Layer_weight_for_one_direction.PNG | thumb | 400px | center]]&lt;br /&gt;
&lt;br /&gt;
=== Can Cycles materials be used in BlendLuxCore? ===&lt;br /&gt;
&lt;br /&gt;
To an extent, yes. Many common Cycles shader nodes can be used in BlendLuxCore:&lt;br /&gt;
&lt;br /&gt;
* You can enable this individually for each material with the &amp;quot;Use Cycles Nodes&amp;quot; option in the material properties.&lt;br /&gt;
* You can also enable it for the whole scene at once with the &amp;quot;Use Cycles Settings&amp;quot; button in the render properties. This will configure all materials, lights and the world to use Cycles settings&lt;br /&gt;
&lt;br /&gt;
Not all Cycles nodes and settings are supported. Here is an overview: https://github.com/LuxCoreRender/BlendLuxCore/issues/272&lt;br /&gt;
&lt;br /&gt;
=== Can 2D/3D mapping be driven by textures in LuxCore? ===&lt;br /&gt;
&lt;br /&gt;
In general, no, because it would lead to much worse performance on GPUs.&lt;br /&gt;
&lt;br /&gt;
However, if you only need to drive the translation part of a texture mapping, since LuxCore v2.5 you can use the distort texture for this purpose:&lt;br /&gt;
&lt;br /&gt;
[[File:Distort_texture.PNG | thumb | 400px | center | A checker texture (left) is distorted by a clouds texture (right). The result can be seen in the center]]&lt;br /&gt;
&lt;br /&gt;
Texturing of rotation and scale is not yet possible.&lt;br /&gt;
&lt;br /&gt;
=== What can be done against fireflies/hotpixels? ===&lt;br /&gt;
&lt;br /&gt;
Sometimes, pixels appear that are much brighter than the surrounding pixels. Sometimes they are singular, sometimes clumped up. The underlying reason are light paths that are correct, but very hard to find with the current rendering algorithms, and thus they take much longer to render until noise-free than all other light paths in the image.&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to approach this problem:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Try another rendering algorithm&#039;&#039;&#039;, it might be able to find the firefly-causing light paths much easier than the one you currently use. For example, try going to the render properties, open the Light Paths panel and enable &amp;quot;Light Tracing&amp;quot;, or try the [[PhotonGI | PhotonGI caustic cache]], or try using the bidirectional engine.&lt;br /&gt;
* You can &#039;&#039;&#039;clamp the brightness of all light paths&#039;&#039;&#039; to a maximum value, in the render properties, Light Paths panel, &amp;quot;Clamping&amp;quot; setting. BlendLuxCore can auto-detect a value for this setting that is in the right ballpark for your scene if you render once without clamping enabled, but often this value will not be the best, so you will need a bit of trial-and-error to find a good value. Note that the clamping value depends on the lighting in your scene, so there is no one universally good clamping value, and you might need to adjust it if you add a new light source to your scene that is brighter than the others. Using a clamping value that is too low will result in a low-contrast, washed-out image, while a too high value will leave fireflies unaffected.&lt;br /&gt;
* Try to find out which lights or materials are responsible for the fireflies. There might be small, hard-to-find light sources that are causing them. Or a specular material is reflecting such a light source. If you are willing to alter the look of the scene, you can make such a light source more visible/larger, or lower the specularity of such a material. You can also make some light sources invisble to indirect light rays, thus eliminating fireflies (light properties, &amp;quot;Visibility&amp;quot; panel). This can be a good idea for the sun, for example, if your scene contains lots of specular materials.&lt;br /&gt;
&lt;br /&gt;
=== Why is my HDRI environment black and not showing up? ===&lt;br /&gt;
You probably have other very bright light sources in the scene, for example a sun or a sky lamp.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; raise the gain value of the area or HDRI light source that is black. The gain value might need to be very high, e.g. 100000.&lt;br /&gt;
&lt;br /&gt;
=== Why is my area lamp black? ===&lt;br /&gt;
See [[#&amp;quot;Why is my HDRI environment black and not showing up?&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
=== When I change the brightness of my lamp, nothing happens ===&lt;br /&gt;
&lt;br /&gt;
You are probably using an automatic tonemapper which adjusts itself to the changed brightness, making it seem like the brightness did not change.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Use a non-automatic tonemapper (camera settings -&amp;gt; [[ImagePipeline]]).&lt;br /&gt;
&amp;lt;!-- TODO describe how to switch to one, and/or add a link to the tonemapping settings page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When I make one of my lights brighter, all the other lights get darker (or vice versa) ===&lt;br /&gt;
&lt;br /&gt;
Similar to [[#&amp;quot;When I change the brightness of my lamp, nothing happens&amp;quot;]].&amp;lt;br&amp;gt;&lt;br /&gt;
You are using an automatic tonemapper which tries to keep the image at the same brightness, making it seem like the brightness of the lamps changed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Use a non-automatic tonemapper (camera settings -&amp;gt; [[ImagePipeline]]).&lt;br /&gt;
&amp;lt;!-- TODO describe how to switch to one, and/or add a link to the tonemapping settings page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A material/object appears to be flickering when I move the camera and shows artifacts in final render ===&lt;br /&gt;
&lt;br /&gt;
This effect is called [https://en.wikipedia.org/wiki/Z-fighting Z-fighting] and is usually caused by mesh faces being exactly on top of each other, e.g. two planes on the same world coordinates.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; &lt;br /&gt;
* Check if there are two objects on top of each other, e.g. because you duplicated the object, cancelled the transform and forgot about it.&lt;br /&gt;
* Check if the mesh has duplicate faces. Enter edit mode and use the Remove Doubles button in the Tools panel, which might solve the problem in some cases.&lt;br /&gt;
Duplicate faces are often caused by extruding, cancelling the transform and forgetting about it.&lt;br /&gt;
&lt;br /&gt;
=== There are dark triangular artifacts on my model, and I already checked for duplicate faces ===&lt;br /&gt;
&lt;br /&gt;
Floating point numbers have a limited precision. When objects are very large (kilometers) or very small (micrometers), these precision issues become visible. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; &lt;br /&gt;
* If the object has a &amp;quot;normal&amp;quot; size (something like 1 cm to 1 km), but was scaled up/down by a huge amount, try to apply the scale (Ctrl+A -&amp;gt; Scale). For example, this often happens with imported CAD models.&lt;br /&gt;
* If applying the scale did not help and your object has to be very small or large, consider to bring it into the normal scale mentioned above, and pretend that it has a larger/smaller size. For example, if you make a model of the solar system, you will just have to make the earth something like 12.742 m in diameter, and pretend that 1 m of your model is equal to 10^6 m. &lt;br /&gt;
* If both options above are not usable in your case, you can raise the minimum epsilon that LuxCore uses. This setting can be found in the scene properties, Units panel, after clicking &amp;quot;Advanced LuxCore Settings&amp;quot;. By default, the minimum epsilon is 0.00001. Try to raise it to 0.0001 (multiply by 10) for a start and see if the artifacts disappear. Do not set this value higher than necessary, because it will cause all sorts of hard-to-track problems. Be especially careful if you are rendering a scene with volumes.&lt;br /&gt;
&lt;br /&gt;
=== An object that I set to &amp;quot;smooth shading&amp;quot; looks like it is shaded flat in shadow penumbras ===&lt;br /&gt;
&lt;br /&gt;
This artifact is called &amp;quot;terminator problem&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Unfortunately there is no real solution. You can only try to mitigate the effect by subdividing the geometry further and/or increase the size of the light source that is causing the problem.&lt;br /&gt;
&lt;br /&gt;
=== How do I setup liquid in a glass container correctly? ===&lt;br /&gt;
&lt;br /&gt;
This forum thread shows an example: https://forums.luxcorerender.org/viewtopic.php?f=4&amp;amp;t=728#p7550&lt;br /&gt;
&lt;br /&gt;
=== Can I export my scene in LuxCore format to render it in LuxCore standalone? ===&lt;br /&gt;
&lt;br /&gt;
Yes. In the render properties, LuxCore Tools panel, enable &amp;quot;FileSaver&amp;quot;. Then render with F12.&lt;br /&gt;
&lt;br /&gt;
=== How can I compile kernels from the command line? ===&lt;br /&gt;
Here is a way to compile kernels from the command line (out of Blender), for the latest version of pyluxcore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install pyluxcore --upgrade&lt;br /&gt;
python -c &amp;quot;import pyluxcore; pyluxcore.Init(); pyluxcore.KernelCacheFill()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Getting Help = &lt;br /&gt;
&lt;br /&gt;
If none of the above entries helped to solve your problem, consider asking in the [https://forums.luxcorerender.org/viewforum.php?f=4 user support forum] or [https://forums.luxcorerender.org/viewtopic.php?f=4&amp;amp;t=2 filing a bug report].&lt;br /&gt;
&lt;br /&gt;
[[Category:BlendLuxCore]]&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=BlendLuxCore_FAQ&amp;diff=2554</id>
		<title>BlendLuxCore FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=BlendLuxCore_FAQ&amp;diff=2554"/>
		<updated>2026-04-11T10:19:04Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: Add a new section about CUDA/OptiX&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Frequently Asked Questions =&lt;br /&gt;
&lt;br /&gt;
=== When trying to use CUDA/OptiX, Blender crashes ===&lt;br /&gt;
&lt;br /&gt;
This can be a different manifestation of the issue described below (CUDA_ERROR_UNSUPPORTED_PTX_VERSION). Try to upgrade the nvidia driver to the latest version, or try the studio driver branches for a latest stable version.&lt;br /&gt;
&lt;br /&gt;
Specifically, this has been observed with nvrtc13 in combination with drivers &amp;lt;590.&lt;br /&gt;
&lt;br /&gt;
=== When trying to use CUDA/OptiX, I get the error message: &amp;lt;code&amp;gt;RUNTIME ERROR: CUDA driver API error CUDA_ERROR_UNSUPPORTED_PTX_VERSION (code: 222, file:.../cuda.cpp, line: xxx): the provided PTX was compiled with an unsupported toolchain.&amp;lt;/code&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
Your nvidia driver is too old compared to nvidia runtime compiler used by LuxCore, so the code compiled by LuxCore runtime compiler cannot be run by your driver.&lt;br /&gt;
&lt;br /&gt;
Please upgrade your nvidia driver to latest version, or at least to a suitable version with regard to runtime compiler: https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#id7&lt;br /&gt;
&lt;br /&gt;
=== After installation, I get the error message &amp;quot;could not import pyluxcore&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;pyluxcore&amp;quot; is the binary core library. BlendLuxCore downloads and installs the correct version for your system during installation. This error indicates something went wrong with this installation. Possible solutions are:&lt;br /&gt;
* Check that online access is allowed in the Blender preferences.&lt;br /&gt;
* Download may be restricted in company networks. You can try an [https://wiki.luxcorerender.org/BlendLuxCore_Installation#Offline_Installation offline-installation].&lt;br /&gt;
&lt;br /&gt;
=== I can not enable the BlendLuxCore addon, it shows errors ===&lt;br /&gt;
&lt;br /&gt;
Most problems in this area stem from broken graphics driver installations. Try to re-install or update your graphics driver.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For Windows users:&#039;&#039;&#039;&lt;br /&gt;
* Make sure that you have installed the [https://www.microsoft.com/en-US/download/details.aspx?id=40784 Visual C++ Redistributable Packages for Visual Studio 2013]&lt;br /&gt;
* If you use v2.1alpha0 or later, you will also need:&lt;br /&gt;
** [https://aka.ms/vs/15/release/vc_redist.x64.exe Microsoft Visual C++ Redistributable for Visual Studio 2017]&lt;br /&gt;
** [https://software.intel.com/sites/default/files/managed/59/aa/ww_icl_redist_msi_2018.3.210.zip Intel C++ redistributable]&lt;br /&gt;
&lt;br /&gt;
If this does not solve the problem, browse the [https://github.com/LuxCoreRender/BlendLuxCore/issues?q=is%3Aissue+label%3Ainstallation installation issues] in the bug tracker to check if your error message was already reported. &lt;br /&gt;
If it was not reported yet, open a new issue and copy the error message from the Blender console (on Windows, click Window -&amp;gt; Toggle System Console in Blender&#039;s menu. On Linux, start Blender from a terminal and try to enable the addon, then copy the error message from the terminal).&lt;br /&gt;
&lt;br /&gt;
See the [[BlendLuxCore_Installation | installation page]] for information on how to install, update and remove the BlendLuxCore addon.&lt;br /&gt;
&lt;br /&gt;
=== Is there something like Cycles&#039; Layer Weight/Fresnel/Facing node in LuxCore? ===&lt;br /&gt;
&lt;br /&gt;
No, in LuxCore there is no direct equivalent to this node, because it would not work with the many algorithms in LuxCore that trace rays from lights (instead of from the camera), like the bidirectional engine, light tracing mode, or the PhotonGI cache.&lt;br /&gt;
&lt;br /&gt;
Of course, all materials in LuxCore are physically based and have realistic fresnel effects built-in.&lt;br /&gt;
&lt;br /&gt;
You can achieve a similar effect with the dot product node, but it will work only for one viewpoint:&lt;br /&gt;
&lt;br /&gt;
[[File:Layer_weight_for_one_direction.PNG | thumb | 400px | center]]&lt;br /&gt;
&lt;br /&gt;
=== Can Cycles materials be used in BlendLuxCore? ===&lt;br /&gt;
&lt;br /&gt;
To an extent, yes. Many common Cycles shader nodes can be used in BlendLuxCore:&lt;br /&gt;
&lt;br /&gt;
* You can enable this individually for each material with the &amp;quot;Use Cycles Nodes&amp;quot; option in the material properties.&lt;br /&gt;
* You can also enable it for the whole scene at once with the &amp;quot;Use Cycles Settings&amp;quot; button in the render properties. This will configure all materials, lights and the world to use Cycles settings&lt;br /&gt;
&lt;br /&gt;
Not all Cycles nodes and settings are supported. Here is an overview: https://github.com/LuxCoreRender/BlendLuxCore/issues/272&lt;br /&gt;
&lt;br /&gt;
=== Can 2D/3D mapping be driven by textures in LuxCore? ===&lt;br /&gt;
&lt;br /&gt;
In general, no, because it would lead to much worse performance on GPUs.&lt;br /&gt;
&lt;br /&gt;
However, if you only need to drive the translation part of a texture mapping, since LuxCore v2.5 you can use the distort texture for this purpose:&lt;br /&gt;
&lt;br /&gt;
[[File:Distort_texture.PNG | thumb | 400px | center | A checker texture (left) is distorted by a clouds texture (right). The result can be seen in the center]]&lt;br /&gt;
&lt;br /&gt;
Texturing of rotation and scale is not yet possible.&lt;br /&gt;
&lt;br /&gt;
=== What can be done against fireflies/hotpixels? ===&lt;br /&gt;
&lt;br /&gt;
Sometimes, pixels appear that are much brighter than the surrounding pixels. Sometimes they are singular, sometimes clumped up. The underlying reason are light paths that are correct, but very hard to find with the current rendering algorithms, and thus they take much longer to render until noise-free than all other light paths in the image.&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to approach this problem:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Try another rendering algorithm&#039;&#039;&#039;, it might be able to find the firefly-causing light paths much easier than the one you currently use. For example, try going to the render properties, open the Light Paths panel and enable &amp;quot;Light Tracing&amp;quot;, or try the [[PhotonGI | PhotonGI caustic cache]], or try using the bidirectional engine.&lt;br /&gt;
* You can &#039;&#039;&#039;clamp the brightness of all light paths&#039;&#039;&#039; to a maximum value, in the render properties, Light Paths panel, &amp;quot;Clamping&amp;quot; setting. BlendLuxCore can auto-detect a value for this setting that is in the right ballpark for your scene if you render once without clamping enabled, but often this value will not be the best, so you will need a bit of trial-and-error to find a good value. Note that the clamping value depends on the lighting in your scene, so there is no one universally good clamping value, and you might need to adjust it if you add a new light source to your scene that is brighter than the others. Using a clamping value that is too low will result in a low-contrast, washed-out image, while a too high value will leave fireflies unaffected.&lt;br /&gt;
* Try to find out which lights or materials are responsible for the fireflies. There might be small, hard-to-find light sources that are causing them. Or a specular material is reflecting such a light source. If you are willing to alter the look of the scene, you can make such a light source more visible/larger, or lower the specularity of such a material. You can also make some light sources invisble to indirect light rays, thus eliminating fireflies (light properties, &amp;quot;Visibility&amp;quot; panel). This can be a good idea for the sun, for example, if your scene contains lots of specular materials.&lt;br /&gt;
&lt;br /&gt;
=== Why is my HDRI environment black and not showing up? ===&lt;br /&gt;
You probably have other very bright light sources in the scene, for example a sun or a sky lamp.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; raise the gain value of the area or HDRI light source that is black. The gain value might need to be very high, e.g. 100000.&lt;br /&gt;
&lt;br /&gt;
=== Why is my area lamp black? ===&lt;br /&gt;
See [[#&amp;quot;Why is my HDRI environment black and not showing up?&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
=== When I change the brightness of my lamp, nothing happens ===&lt;br /&gt;
&lt;br /&gt;
You are probably using an automatic tonemapper which adjusts itself to the changed brightness, making it seem like the brightness did not change.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Use a non-automatic tonemapper (camera settings -&amp;gt; [[ImagePipeline]]).&lt;br /&gt;
&amp;lt;!-- TODO describe how to switch to one, and/or add a link to the tonemapping settings page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When I make one of my lights brighter, all the other lights get darker (or vice versa) ===&lt;br /&gt;
&lt;br /&gt;
Similar to [[#&amp;quot;When I change the brightness of my lamp, nothing happens&amp;quot;]].&amp;lt;br&amp;gt;&lt;br /&gt;
You are using an automatic tonemapper which tries to keep the image at the same brightness, making it seem like the brightness of the lamps changed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Use a non-automatic tonemapper (camera settings -&amp;gt; [[ImagePipeline]]).&lt;br /&gt;
&amp;lt;!-- TODO describe how to switch to one, and/or add a link to the tonemapping settings page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A material/object appears to be flickering when I move the camera and shows artifacts in final render ===&lt;br /&gt;
&lt;br /&gt;
This effect is called [https://en.wikipedia.org/wiki/Z-fighting Z-fighting] and is usually caused by mesh faces being exactly on top of each other, e.g. two planes on the same world coordinates.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; &lt;br /&gt;
* Check if there are two objects on top of each other, e.g. because you duplicated the object, cancelled the transform and forgot about it.&lt;br /&gt;
* Check if the mesh has duplicate faces. Enter edit mode and use the Remove Doubles button in the Tools panel, which might solve the problem in some cases.&lt;br /&gt;
Duplicate faces are often caused by extruding, cancelling the transform and forgetting about it.&lt;br /&gt;
&lt;br /&gt;
=== There are dark triangular artifacts on my model, and I already checked for duplicate faces ===&lt;br /&gt;
&lt;br /&gt;
Floating point numbers have a limited precision. When objects are very large (kilometers) or very small (micrometers), these precision issues become visible. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; &lt;br /&gt;
* If the object has a &amp;quot;normal&amp;quot; size (something like 1 cm to 1 km), but was scaled up/down by a huge amount, try to apply the scale (Ctrl+A -&amp;gt; Scale). For example, this often happens with imported CAD models.&lt;br /&gt;
* If applying the scale did not help and your object has to be very small or large, consider to bring it into the normal scale mentioned above, and pretend that it has a larger/smaller size. For example, if you make a model of the solar system, you will just have to make the earth something like 12.742 m in diameter, and pretend that 1 m of your model is equal to 10^6 m. &lt;br /&gt;
* If both options above are not usable in your case, you can raise the minimum epsilon that LuxCore uses. This setting can be found in the scene properties, Units panel, after clicking &amp;quot;Advanced LuxCore Settings&amp;quot;. By default, the minimum epsilon is 0.00001. Try to raise it to 0.0001 (multiply by 10) for a start and see if the artifacts disappear. Do not set this value higher than necessary, because it will cause all sorts of hard-to-track problems. Be especially careful if you are rendering a scene with volumes.&lt;br /&gt;
&lt;br /&gt;
=== An object that I set to &amp;quot;smooth shading&amp;quot; looks like it is shaded flat in shadow penumbras ===&lt;br /&gt;
&lt;br /&gt;
This artifact is called &amp;quot;terminator problem&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Unfortunately there is no real solution. You can only try to mitigate the effect by subdividing the geometry further and/or increase the size of the light source that is causing the problem.&lt;br /&gt;
&lt;br /&gt;
=== How do I setup liquid in a glass container correctly? ===&lt;br /&gt;
&lt;br /&gt;
This forum thread shows an example: https://forums.luxcorerender.org/viewtopic.php?f=4&amp;amp;t=728#p7550&lt;br /&gt;
&lt;br /&gt;
=== Can I export my scene in LuxCore format to render it in LuxCore standalone? ===&lt;br /&gt;
&lt;br /&gt;
Yes. In the render properties, LuxCore Tools panel, enable &amp;quot;FileSaver&amp;quot;. Then render with F12.&lt;br /&gt;
&lt;br /&gt;
=== How can I compile kernels from the command line? ===&lt;br /&gt;
Here is a way to compile kernels from the command line (out of Blender), for the latest version of pyluxcore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install pyluxcore --upgrade&lt;br /&gt;
python -c &amp;quot;import pyluxcore; pyluxcore.Init(); pyluxcore.KernelCacheFill()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Getting Help = &lt;br /&gt;
&lt;br /&gt;
If none of the above entries helped to solve your problem, consider asking in the [https://forums.luxcorerender.org/viewforum.php?f=4 user support forum] or [https://forums.luxcorerender.org/viewtopic.php?f=4&amp;amp;t=2 filing a bug report].&lt;br /&gt;
&lt;br /&gt;
[[Category:BlendLuxCore]]&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2553</id>
		<title>LuxCoreRender Release Notes v2.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2553"/>
		<updated>2026-04-03T11:53:15Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: sorting entries&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BlendLuxCore =&lt;br /&gt;
&#039;&#039;&#039;Coding/Backend&#039;&#039;&#039;&lt;br /&gt;
* Include &amp;quot;OptiX&amp;quot; in addon settings label to avoid user questions about compatibility&lt;br /&gt;
* Remove leftover code from the Addons system that is no longer used with the Extensions system.&lt;br /&gt;
* Use LuxCore internal OIDN (rather than embedding and calling an external OIDN executable)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugfix&#039;&#039;&#039;&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed https://projects.blender.org/blender/blender/issues/140488&lt;br /&gt;
* Limit float values in viewport render to 16-bit in order to avoid overexposed areas being displayed as black.&lt;br /&gt;
* Fix rounding of convergence percentage, reaching 100% to early for complex scenes&lt;br /&gt;
* Fix Blender crash when clicking Copy Material&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features for users&#039;&#039;&#039;&lt;br /&gt;
* Update compatibility for Blender 5.0&lt;br /&gt;
* Fresnel texture: &amp;quot;custom n,k&amp;quot; now accepts values &amp;gt; 1&lt;br /&gt;
* Remove default filtering of Intel GPU devices&lt;br /&gt;
* Add a checkbox to the material output node for enabling an override: When using shadow color, this allows light rays in addition to the shadow rays. (default off == no light rays, only shadow rays)&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space (c.f. section LuxCore)&lt;br /&gt;
* New shape node &amp;quot;MergeOnDistance&amp;quot; (like Blender Merge by Distance)&lt;br /&gt;
* Subdiv: (simple) crease management&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= BlendLuxHelper =&lt;br /&gt;
* Adding BlendLuxHelper: A new helper, in the form of a Blender extension, which allows to configure the wheel that is imported by BlendLuxCore.&lt;br /&gt;
* &amp;lt;del&amp;gt;Change installation mechanism to use bpy.utils.extension_path_user()&amp;lt;/del&amp;gt; (Reworked within the scope of BlendLuxHelper)&lt;br /&gt;
* &amp;lt;del&amp;gt;Added a Linux development shell script (optional utility for developers)&amp;lt;/del&amp;gt; (replaced by BlendLuxHelper)&lt;br /&gt;
&lt;br /&gt;
= LuxCore =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Coding/Backend&#039;&#039;&#039;&lt;br /&gt;
* Subdivision: multithreaded version, in order to improve speed&lt;br /&gt;
* Reduction of Boost footprint, replaced with standard equivalents available in C++20.&lt;br /&gt;
* For the need of previous point: replacement of apple-clang by clang 20 on MacOS platforms&lt;br /&gt;
* New target &#039;wheel-test&#039; that builds a testing wheel in local build (&amp;lt;code&amp;gt;make wheel-test&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Requirement checking in &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;&lt;br /&gt;
* luxrays: rename GetConfigDir as GetCacheDir and use XDG_CACHE_HOME according to specifications (@illwieckz)&lt;br /&gt;
* Adapt CI pipelines to MacOS-15 runners (after deprecation of MacOS-13 runners on Github)&lt;br /&gt;
* Remove direct access to Blender internal objects. Use Blender API instead, more stable.&lt;br /&gt;
* Add support for Python 3.14 (and remove support for 3.9)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bugfix&#039;&#039;&#039;&lt;br /&gt;
* Fix a bug leading to unstable brightness between renderings when using saved crashes (Credit to FELIX Render developers)&lt;br /&gt;
* Fix volume evaluation in BiDir engine https://github.com/LuxCoreRender/LuxCore/issues/647&lt;br /&gt;
* Fix various bugs when using orthographic camera with light tracing https://github.com/LuxCoreRender/LuxCore/issues/667&lt;br /&gt;
* Fix various memory-related issues (leaks, potential access violations...). Modernize memory handling (to be continued)&lt;br /&gt;
* Avoid crash if no OpenCL and/or Nvidia API is found&lt;br /&gt;
* Fix several race conditions&lt;br /&gt;
* Fixed an error where paused renderings can&#039;t be stopped anymore&lt;br /&gt;
* 3D-mapping: Fix inconsistent behavior between local and random-local mapping https://github.com/LuxCoreRender/BlendLuxCore/issues/656&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features for users&#039;&#039;&#039;&lt;br /&gt;
* Subdivision: add an &amp;quot;adaptive&amp;quot; setting to select between adaptive refinement and uniform refinement&lt;br /&gt;
* Make `pyluxcoretools` available again (in the wheels)&lt;br /&gt;
* Apply the behavior of the BiDir engine w.r.t. shadow color mechanism to Path+Light tracing. &amp;lt;b&amp;gt;Breaking change for scenes using shadow color and light tracing (not BiDir)!&amp;lt;/b&amp;gt; https://github.com/LuxCoreRender/LuxCore/issues/671&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space https://github.com/LuxCoreRender/BlendLuxCore/issues/644&lt;br /&gt;
&lt;br /&gt;
= LuxCoreDeps =&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
* Better dependency pinning (for nvrtc and conan-index)&lt;br /&gt;
* Removed a workaround introduced in previous version (we used to build a fake wheel to get containerization)&lt;br /&gt;
* OpenMP - MacOS: Use of homebrew OpenMP (up-to-date, compatible with clang 20) rather than Conan llvm-openmp (version 17...). As a consequence, for MacOS Intel, a version &amp;gt;= 13.0 is required.&lt;br /&gt;
* Opensubdiv: tbb activation. As a consequence, for MacOS Arm, a version &amp;gt;= 14.2 is required.&lt;br /&gt;
* OpenImageIO: deactivation of several image formats that seem unrelated to or unsupported by LuxCore: freetype, hdf5, ffmpeg, libheif, ptex, opencv, webp. This removal spares both compilation time and build result size. Those formats are reactivable, in case they were missing.&lt;br /&gt;
* OpenImageIO: To the contrary, activation of tbb option.&lt;br /&gt;
* Embree: Upgraded to version 4.&lt;br /&gt;
* libjpeg: Replaced with libjpeg-turbo&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2540</id>
		<title>LuxCoreRender Release Notes v2.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2540"/>
		<updated>2026-04-02T11:41:38Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* BlendLuxCore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
* Fresnel texture: &amp;quot;custom n,k&amp;quot; now accepts values &amp;gt; 1&lt;br /&gt;
* Include &amp;quot;OptiX&amp;quot; in addon settings label to avoid user questions about compatibility&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed https://projects.blender.org/blender/blender/issues/140488&lt;br /&gt;
* Remove leftover code from the Addons system that is no longer used with the Extensions system.&lt;br /&gt;
* Limit float values in viewport render to 16-bit in order to avoid overexposed areas being displayed as black.&lt;br /&gt;
* Remove default filtering of Intel GPU devices&lt;br /&gt;
* Add a checkbox to the material output node for enabling an override: When using shadow color, this allows light rays in addition to the shadow rays. (default off == no light rays, only shadow rays)&lt;br /&gt;
* Fix rounding of convergence percentage, reaching 100% to early for complex scenes&lt;br /&gt;
* Update compatibility for Blender 5.0&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space (c.f. section LuxCore(&lt;br /&gt;
&lt;br /&gt;
= BlendLuxHelper =&lt;br /&gt;
* Adding BlendLuxHelper: A new helper, in the form of a Blender extension, which allows to configure the wheel that is imported by BlendLuxCore.&lt;br /&gt;
* &amp;lt;del&amp;gt;Change installation mechanism to use bpy.utils.extension_path_user()&amp;lt;/del&amp;gt; (Reworked within the scope of BlendLuxHelper)&lt;br /&gt;
* &amp;lt;del&amp;gt;Added a Linux development shell script (optional utility for developers)&amp;lt;/del&amp;gt; (replaced by BlendLuxHelper)&lt;br /&gt;
&lt;br /&gt;
= LuxCore =&lt;br /&gt;
* Reduction of Boost footprint, replaced with standard equivalents available in C++20.&lt;br /&gt;
* For the need of previous point: replacement of apple-clang by clang 20 on MacOS platforms&lt;br /&gt;
* New target &#039;wheel-test&#039; that builds a testing wheel in local build (&amp;lt;code&amp;gt;make wheel-test&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Requirement checking in &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;&lt;br /&gt;
* luxrays: rename GetConfigDir as GetCacheDir and use XDG_CACHE_HOME according to specifications (@illwieckz)&lt;br /&gt;
* Subdivision: add an &amp;quot;adaptive&amp;quot; setting to select between adaptive refinement and uniform refinement&lt;br /&gt;
* Subdivision: multithreaded version&lt;br /&gt;
* Fix a bug leading to unstable brightness between renderings when using saved crashes (Credit to FELIX Render developers)&lt;br /&gt;
* Fix volume evaluation in BiDir engine https://github.com/LuxCoreRender/LuxCore/issues/647&lt;br /&gt;
* Fix various bugs when using orthographic camera with light tracing https://github.com/LuxCoreRender/LuxCore/issues/667&lt;br /&gt;
* Apply the behavior of the BiDir engine w.r.t. shadow color mechanism to Path+Light tracing. &amp;lt;b&amp;gt;Breaking change for scenes using shadow color and light tracing (not BiDir)!&amp;lt;/b&amp;gt; https://github.com/LuxCoreRender/LuxCore/issues/671&lt;br /&gt;
* Fixed an error where paused renderings can&#039;t be stopped anymore&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space https://github.com/LuxCoreRender/BlendLuxCore/issues/644&lt;br /&gt;
* 3D-mapping: Fix inconsistent behavior between local and random-local mapping https://github.com/LuxCoreRender/BlendLuxCore/issues/656&lt;br /&gt;
&lt;br /&gt;
= LuxCoreDeps =&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
* Removed a workaround introduced in previous version (we used to build a fake wheel to get containerization)&lt;br /&gt;
* OpenMP - MacOS: Use of homebrew OpenMP (up-to-date, compatible with clang 20) rather than Conan llvm-openmp (version 17...). As a consequence, for MacOS Intel, a version &amp;gt;= 13.0 is required.&lt;br /&gt;
* Opensubdiv: tbb activation. As a consequence, for MacOS Arm, a version &amp;gt;= 14.2 is required.&lt;br /&gt;
* OpenImageIO: deactivation of several image formats that seem unrelated to or unsupported by LuxCore: freetype, hdf5, ffmpeg, libheif, ptex, opencv, webp. This removal spares both compilation time and build result size. Those formats are reactivable, in case they were missing.&lt;br /&gt;
* OpenImageIO: To the contrary, activation of tbb option.&lt;br /&gt;
* Embree: Upgraded to version 4.&lt;br /&gt;
* libjpeg: Replaced with libjpeg-turbo&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2539</id>
		<title>LuxCoreRender Release Notes v2.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2539"/>
		<updated>2026-04-02T11:41:03Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* LuxCore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
* Fresnel texture: &amp;quot;custom n,k&amp;quot; now accepts values &amp;gt; 1&lt;br /&gt;
* Include &amp;quot;OptiX&amp;quot; in addon settings label to avoid user questions about compatibility&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed https://projects.blender.org/blender/blender/issues/140488&lt;br /&gt;
* Remove leftover code from the Addons system that is no longer used with the Extensions system.&lt;br /&gt;
* Limit float values in viewport render to 16-bit in order to avoid overexposed areas being displayed as black.&lt;br /&gt;
* Remove default filtering of Intel GPU devices&lt;br /&gt;
* Add a checkbox to the material output node for enabling an override: When using shadow color, this allows light rays in addition to the shadow rays. (default off == no light rays, only shadow rays)&lt;br /&gt;
* Fix rounding of convergence percentage, reaching 100% to early for complex scenes&lt;br /&gt;
* Update compatibility for Blender 5.0&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space&lt;br /&gt;
&lt;br /&gt;
= BlendLuxHelper =&lt;br /&gt;
* Adding BlendLuxHelper: A new helper, in the form of a Blender extension, which allows to configure the wheel that is imported by BlendLuxCore.&lt;br /&gt;
* &amp;lt;del&amp;gt;Change installation mechanism to use bpy.utils.extension_path_user()&amp;lt;/del&amp;gt; (Reworked within the scope of BlendLuxHelper)&lt;br /&gt;
* &amp;lt;del&amp;gt;Added a Linux development shell script (optional utility for developers)&amp;lt;/del&amp;gt; (replaced by BlendLuxHelper)&lt;br /&gt;
&lt;br /&gt;
= LuxCore =&lt;br /&gt;
* Reduction of Boost footprint, replaced with standard equivalents available in C++20.&lt;br /&gt;
* For the need of previous point: replacement of apple-clang by clang 20 on MacOS platforms&lt;br /&gt;
* New target &#039;wheel-test&#039; that builds a testing wheel in local build (&amp;lt;code&amp;gt;make wheel-test&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Requirement checking in &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;&lt;br /&gt;
* luxrays: rename GetConfigDir as GetCacheDir and use XDG_CACHE_HOME according to specifications (@illwieckz)&lt;br /&gt;
* Subdivision: add an &amp;quot;adaptive&amp;quot; setting to select between adaptive refinement and uniform refinement&lt;br /&gt;
* Subdivision: multithreaded version&lt;br /&gt;
* Fix a bug leading to unstable brightness between renderings when using saved crashes (Credit to FELIX Render developers)&lt;br /&gt;
* Fix volume evaluation in BiDir engine https://github.com/LuxCoreRender/LuxCore/issues/647&lt;br /&gt;
* Fix various bugs when using orthographic camera with light tracing https://github.com/LuxCoreRender/LuxCore/issues/667&lt;br /&gt;
* Apply the behavior of the BiDir engine w.r.t. shadow color mechanism to Path+Light tracing. &amp;lt;b&amp;gt;Breaking change for scenes using shadow color and light tracing (not BiDir)!&amp;lt;/b&amp;gt; https://github.com/LuxCoreRender/LuxCore/issues/671&lt;br /&gt;
* Fixed an error where paused renderings can&#039;t be stopped anymore&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space https://github.com/LuxCoreRender/BlendLuxCore/issues/644&lt;br /&gt;
* 3D-mapping: Fix inconsistent behavior between local and random-local mapping https://github.com/LuxCoreRender/BlendLuxCore/issues/656&lt;br /&gt;
&lt;br /&gt;
= LuxCoreDeps =&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
* Removed a workaround introduced in previous version (we used to build a fake wheel to get containerization)&lt;br /&gt;
* OpenMP - MacOS: Use of homebrew OpenMP (up-to-date, compatible with clang 20) rather than Conan llvm-openmp (version 17...). As a consequence, for MacOS Intel, a version &amp;gt;= 13.0 is required.&lt;br /&gt;
* Opensubdiv: tbb activation. As a consequence, for MacOS Arm, a version &amp;gt;= 14.2 is required.&lt;br /&gt;
* OpenImageIO: deactivation of several image formats that seem unrelated to or unsupported by LuxCore: freetype, hdf5, ffmpeg, libheif, ptex, opencv, webp. This removal spares both compilation time and build result size. Those formats are reactivable, in case they were missing.&lt;br /&gt;
* OpenImageIO: To the contrary, activation of tbb option.&lt;br /&gt;
* Embree: Upgraded to version 4.&lt;br /&gt;
* libjpeg: Replaced with libjpeg-turbo&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2538</id>
		<title>LuxCoreRender Release Notes v2.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2538"/>
		<updated>2026-04-02T11:34:31Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* BlendLuxCore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
* Fresnel texture: &amp;quot;custom n,k&amp;quot; now accepts values &amp;gt; 1&lt;br /&gt;
* Include &amp;quot;OptiX&amp;quot; in addon settings label to avoid user questions about compatibility&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed https://projects.blender.org/blender/blender/issues/140488&lt;br /&gt;
* Remove leftover code from the Addons system that is no longer used with the Extensions system.&lt;br /&gt;
* Limit float values in viewport render to 16-bit in order to avoid overexposed areas being displayed as black.&lt;br /&gt;
* Remove default filtering of Intel GPU devices&lt;br /&gt;
* Add a checkbox to the material output node for enabling an override: When using shadow color, this allows light rays in addition to the shadow rays. (default off == no light rays, only shadow rays)&lt;br /&gt;
* Fix rounding of convergence percentage, reaching 100% to early for complex scenes&lt;br /&gt;
* Update compatibility for Blender 5.0&lt;br /&gt;
* 2D-mapping: Add an option to allow rotation around the center of UV-coordinate space&lt;br /&gt;
&lt;br /&gt;
= BlendLuxHelper =&lt;br /&gt;
* Adding BlendLuxHelper: A new helper, in the form of a Blender extension, which allows to configure the wheel that is imported by BlendLuxCore.&lt;br /&gt;
* &amp;lt;del&amp;gt;Change installation mechanism to use bpy.utils.extension_path_user()&amp;lt;/del&amp;gt; (Reworked within the scope of BlendLuxHelper)&lt;br /&gt;
* &amp;lt;del&amp;gt;Added a Linux development shell script (optional utility for developers)&amp;lt;/del&amp;gt; (replaced by BlendLuxHelper)&lt;br /&gt;
&lt;br /&gt;
= LuxCore =&lt;br /&gt;
* Reduction of Boost footprint, replaced with standard equivalents available in C++20.&lt;br /&gt;
* For the need of previous point: replacement of apple-clang by clang 20 on MacOS platforms&lt;br /&gt;
* New target &#039;wheel-test&#039; that builds a testing wheel in local build (&amp;lt;code&amp;gt;make wheel-test&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Requirement checking in &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;&lt;br /&gt;
* luxrays: rename GetConfigDir as GetCacheDir and use XDG_CACHE_HOME according to specifications (@illwieckz)&lt;br /&gt;
* Subdivision: add an &amp;quot;adaptive&amp;quot; setting to select between adaptive refinement and uniform refinement&lt;br /&gt;
* Subdivision: multithreaded version&lt;br /&gt;
* Fix a bug leading to unstable brightness between renderings when using saved crashes (Credit to FELIX Render developers)&lt;br /&gt;
* Fix volume evaluation in BiDir engine https://github.com/LuxCoreRender/LuxCore/issues/647&lt;br /&gt;
* Fix various bugs when using orthographic camera with light tracing https://github.com/LuxCoreRender/LuxCore/issues/667&lt;br /&gt;
* Apply the behavior of the BiDir engine w.r.t. shadow color mechanism to Path+Light tracing. &amp;lt;b&amp;gt;Breaking change for scenes using shadow color and light tracing (not BiDir)!&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= LuxCoreDeps =&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
* Removed a workaround introduced in previous version (we used to build a fake wheel to get containerization)&lt;br /&gt;
* OpenMP - MacOS: Use of homebrew OpenMP (up-to-date, compatible with clang 20) rather than Conan llvm-openmp (version 17...). As a consequence, for MacOS Intel, a version &amp;gt;= 13.0 is required.&lt;br /&gt;
* Opensubdiv: tbb activation. As a consequence, for MacOS Arm, a version &amp;gt;= 14.2 is required.&lt;br /&gt;
* OpenImageIO: deactivation of several image formats that seem unrelated to or unsupported by LuxCore: freetype, hdf5, ffmpeg, libheif, ptex, opencv, webp. This removal spares both compilation time and build result size. Those formats are reactivable, in case they were missing.&lt;br /&gt;
* OpenImageIO: To the contrary, activation of tbb option.&lt;br /&gt;
* Embree: Upgraded to version 4.&lt;br /&gt;
* libjpeg: Replaced with libjpeg-turbo&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2537</id>
		<title>LuxCoreRender Release Notes v2.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2537"/>
		<updated>2026-04-02T11:30:03Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: Split BlendLuxHelper into its own category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
* Fresnel texture: &amp;quot;custom n,k&amp;quot; now accepts values &amp;gt; 1&lt;br /&gt;
&lt;br /&gt;
* Include &amp;quot;OptiX&amp;quot; in addon settings label to avoid user questions about compatibility&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed&lt;br /&gt;
* Remove leftover code from the Addons system that is no longer used with the Extensions system.&lt;br /&gt;
* Limit float values in viewport render to 16-bit in order to avoid overexposed areas being displayed as black.&lt;br /&gt;
* Remove default filtering of Intel GPU devices&lt;br /&gt;
* Add a checkbox to the material output node for enabling an override: When using shadow color, this allows light rays in addition to the shadow rays. (default off == no light rays, only shadow rays)&lt;br /&gt;
&lt;br /&gt;
= BlendLuxHelper =&lt;br /&gt;
* Adding BlendLuxHelper: A new helper, in the form of a Blender extension, which allows to configure the wheel that is imported by BlendLuxCore.&lt;br /&gt;
* &amp;lt;del&amp;gt;Change installation mechanism to use bpy.utils.extension_path_user()&amp;lt;/del&amp;gt; (Reworked within the scope of BlendLuxHelper)&lt;br /&gt;
* &amp;lt;del&amp;gt;Added a Linux development shell script (optional utility for developers)&amp;lt;/del&amp;gt; (replaced by BlendLuxHelper)&lt;br /&gt;
&lt;br /&gt;
= LuxCore =&lt;br /&gt;
* Reduction of Boost footprint, replaced with standard equivalents available in C++20.&lt;br /&gt;
* For the need of previous point: replacement of apple-clang by clang 20 on MacOS platforms&lt;br /&gt;
* New target &#039;wheel-test&#039; that builds a testing wheel in local build (&amp;lt;code&amp;gt;make wheel-test&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Requirement checking in &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;&lt;br /&gt;
* luxrays: rename GetConfigDir as GetCacheDir and use XDG_CACHE_HOME according to specifications (@illwieckz)&lt;br /&gt;
* Subdivision: add an &amp;quot;adaptive&amp;quot; setting to select between adaptive refinement and uniform refinement&lt;br /&gt;
* Subdivision: multithreaded version&lt;br /&gt;
* Fix a bug leading to unstable brightness between renderings when using saved crashes (Credit to FELIX Render developers)&lt;br /&gt;
* Fix volume evaluation in BiDir engine https://github.com/LuxCoreRender/LuxCore/issues/647&lt;br /&gt;
* Fix various bugs when using orthographic camera with light tracing https://github.com/LuxCoreRender/LuxCore/issues/667&lt;br /&gt;
* Apply the behavior of the BiDir engine w.r.t. shadow color mechanism to Path+Light tracing. &amp;lt;b&amp;gt;Breaking change for scenes using shadow color and light tracing (not BiDir)!&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= LuxCoreDeps =&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
* Removed a workaround introduced in previous version (we used to build a fake wheel to get containerization)&lt;br /&gt;
* OpenMP - MacOS: Use of homebrew OpenMP (up-to-date, compatible with clang 20) rather than Conan llvm-openmp (version 17...). As a consequence, for MacOS Intel, a version &amp;gt;= 13.0 is required.&lt;br /&gt;
* Opensubdiv: tbb activation. As a consequence, for MacOS Arm, a version &amp;gt;= 14.2 is required.&lt;br /&gt;
* OpenImageIO: deactivation of several image formats that seem unrelated to or unsupported by LuxCore: freetype, hdf5, ffmpeg, libheif, ptex, opencv, webp. This removal spares both compilation time and build result size. Those formats are reactivable, in case they were missing.&lt;br /&gt;
* OpenImageIO: To the contrary, activation of tbb option.&lt;br /&gt;
* Embree: Upgraded to version 4.&lt;br /&gt;
* libjpeg: Replaced with libjpeg-turbo&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2432</id>
		<title>LuxCoreRender Release Notes v2.10</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2432"/>
		<updated>2025-10-23T20:30:56Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* BlendLuxCore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
=Bugfix release v2.10.2=&lt;br /&gt;
&lt;br /&gt;
===LuxCore===&lt;br /&gt;
&lt;br /&gt;
===BlendLuxCore===&lt;br /&gt;
* Fix an issue with the blendev utility script and the .gitignore file&lt;br /&gt;
* Remove some filtering of Intel devices left from times when iGPU devices were not powerful enough&lt;br /&gt;
* Remove deprecated bgl imports, to establish preliminary compatibility with Blender 5.0.0-beta&lt;br /&gt;
* Change the calculation of percentage completion when using noise threshold to avoid the display being stuck at 100% before the rendering is actually finished&lt;br /&gt;
&lt;br /&gt;
=Bugfix release v2.10.1=&lt;br /&gt;
&lt;br /&gt;
===LuxCore===&lt;br /&gt;
* Fixed a bug in luxcoreui (crash when loading a new .cfg file)&lt;br /&gt;
* Pin nvrtc dependency of pyluxcore to a specific version&lt;br /&gt;
&lt;br /&gt;
===BlendLuxCore===&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed: [https://projects.blender.org/blender/blender/issues/140488 Blender Issue Tracker]&lt;br /&gt;
* Added a linux development shell script (optional utility for developers, [https://wiki.luxcorerender.org/Developing_and_debugging_BlendLuxCore#Utility_shell_script_for_launching_Blender see here])&lt;br /&gt;
* Viewport: Limit values in extremely overexposed areas, previously causing these areas to appear black&lt;br /&gt;
&lt;br /&gt;
=LuxCore=&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
&lt;br /&gt;
* New, multiplatform dependency manager: LuxCoreDeps. The new dep manager is based on Conan, an open source software which gives access to a database of thousands of build recipes, maintained up-to-date both by a company (JFrog) and a dynamic community. The deps are now built from sources, for a better control of build settings, binary compatibility etc.&lt;br /&gt;
&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
&lt;br /&gt;
* Buildability restored for all previous platforms: Linux, Windows, MacOS Intel&lt;br /&gt;
&lt;br /&gt;
* Buildability added MacOS ARM platform.&lt;br /&gt;
&lt;br /&gt;
* LuxCoreRender delivered  in the form of Python wheels, published on PyPi.&lt;br /&gt;
&lt;br /&gt;
* Automation (check, build, publish...) rewritten in Github Actions&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
&lt;br /&gt;
* LuxCore is now buildable again, on all previous platforms (Linux, Windows, MacOS Intel) + one (MacOS ARM).&lt;br /&gt;
* Crash fixed on tile path&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
&lt;br /&gt;
= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
* Compatibility for Blender 4.2 and 4.3&lt;br /&gt;
* Partial compatibility for Blender 4.4 (not a release goal)&lt;br /&gt;
* Moved from Blenders addon system to the new extension system&lt;br /&gt;
* BlendLuxCore no longer bundles LuxCore binaries, platform specific binaries now distributed via PyPi&lt;br /&gt;
* Changed build pipeline from Azure to GitHub CI/CD&lt;br /&gt;
* Add square-root option to math node (alias to power 0.5)&lt;br /&gt;
* Add a setting to suppress LuxCore console log output&lt;br /&gt;
* Glass material now accepts IOR &amp;lt; 1&lt;br /&gt;
* Materials can now be individually excluded from material override&lt;br /&gt;
* BlendLuxCore specific menus are marked with an icon&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
* Motion blur support for instances&lt;br /&gt;
* Improve custom normals export time by utilizing mesh.loops.foreach_get()&lt;br /&gt;
* LOL: Changed data access to adapt to new webhosting requirements&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
* Crashes are observed on macOS with Blender 4.2 and Blender 4.3. Related to window resizing and render completion. Unknown if Blender specific or also happening in standalone.&lt;br /&gt;
* Motion blur does not seem to work on &amp;quot;deeper iterations&amp;quot;, e.g. copying an instanced object&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2431</id>
		<title>LuxCoreRender Release Notes v2.10</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2431"/>
		<updated>2025-10-23T19:53:42Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* BlendLuxCore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
=Bugfix release v2.10.2=&lt;br /&gt;
&lt;br /&gt;
===LuxCore===&lt;br /&gt;
&lt;br /&gt;
===BlendLuxCore===&lt;br /&gt;
* fix an issue with the blendev utility script and the .gitignore file&lt;br /&gt;
* Remove some filtering of Intel devices left from times when iGPU devices were not powerful enough&lt;br /&gt;
* Remove deprecated bgl imports, to establish preliminary compatibility with Blender 5.0.0-beta&lt;br /&gt;
* Change the calculation of percentage completion when using noise threshold to avoid the display being stuck at 100% before the rendering is actually finished&lt;br /&gt;
&lt;br /&gt;
=Bugfix release v2.10.1=&lt;br /&gt;
&lt;br /&gt;
===LuxCore===&lt;br /&gt;
* Fixed a bug in luxcoreui (crash when loading a new .cfg file)&lt;br /&gt;
* Pin nvrtc dependency of pyluxcore to a specific version&lt;br /&gt;
&lt;br /&gt;
===BlendLuxCore===&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed: [https://projects.blender.org/blender/blender/issues/140488 Blender Issue Tracker]&lt;br /&gt;
* Added a linux development shell script (optional utility for developers, [https://wiki.luxcorerender.org/Developing_and_debugging_BlendLuxCore#Utility_shell_script_for_launching_Blender see here])&lt;br /&gt;
* Viewport: Limit values in extremely overexposed areas, previously causing these areas to appear black&lt;br /&gt;
&lt;br /&gt;
=LuxCore=&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
&lt;br /&gt;
* New, multiplatform dependency manager: LuxCoreDeps. The new dep manager is based on Conan, an open source software which gives access to a database of thousands of build recipes, maintained up-to-date both by a company (JFrog) and a dynamic community. The deps are now built from sources, for a better control of build settings, binary compatibility etc.&lt;br /&gt;
&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
&lt;br /&gt;
* Buildability restored for all previous platforms: Linux, Windows, MacOS Intel&lt;br /&gt;
&lt;br /&gt;
* Buildability added MacOS ARM platform.&lt;br /&gt;
&lt;br /&gt;
* LuxCoreRender delivered  in the form of Python wheels, published on PyPi.&lt;br /&gt;
&lt;br /&gt;
* Automation (check, build, publish...) rewritten in Github Actions&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
&lt;br /&gt;
* LuxCore is now buildable again, on all previous platforms (Linux, Windows, MacOS Intel) + one (MacOS ARM).&lt;br /&gt;
* Crash fixed on tile path&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
&lt;br /&gt;
= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
* Compatibility for Blender 4.2 and 4.3&lt;br /&gt;
* Partial compatibility for Blender 4.4 (not a release goal)&lt;br /&gt;
* Moved from Blenders addon system to the new extension system&lt;br /&gt;
* BlendLuxCore no longer bundles LuxCore binaries, platform specific binaries now distributed via PyPi&lt;br /&gt;
* Changed build pipeline from Azure to GitHub CI/CD&lt;br /&gt;
* Add square-root option to math node (alias to power 0.5)&lt;br /&gt;
* Add a setting to suppress LuxCore console log output&lt;br /&gt;
* Glass material now accepts IOR &amp;lt; 1&lt;br /&gt;
* Materials can now be individually excluded from material override&lt;br /&gt;
* BlendLuxCore specific menus are marked with an icon&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
* Motion blur support for instances&lt;br /&gt;
* Improve custom normals export time by utilizing mesh.loops.foreach_get()&lt;br /&gt;
* LOL: Changed data access to adapt to new webhosting requirements&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
* Crashes are observed on macOS with Blender 4.2 and Blender 4.3. Related to window resizing and render completion. Unknown if Blender specific or also happening in standalone.&lt;br /&gt;
* Motion blur does not seem to work on &amp;quot;deeper iterations&amp;quot;, e.g. copying an instanced object&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2430</id>
		<title>LuxCoreRender Release Notes v2.10</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2430"/>
		<updated>2025-10-23T19:50:52Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: Add section for v2.10.2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
=Bugfix release v2.10.2=&lt;br /&gt;
&lt;br /&gt;
===LuxCore===&lt;br /&gt;
&lt;br /&gt;
===BlendLuxCore===&lt;br /&gt;
&lt;br /&gt;
=Bugfix release v2.10.1=&lt;br /&gt;
&lt;br /&gt;
===LuxCore===&lt;br /&gt;
* Fixed a bug in luxcoreui (crash when loading a new .cfg file)&lt;br /&gt;
* Pin nvrtc dependency of pyluxcore to a specific version&lt;br /&gt;
&lt;br /&gt;
===BlendLuxCore===&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed: [https://projects.blender.org/blender/blender/issues/140488 Blender Issue Tracker]&lt;br /&gt;
* Added a linux development shell script (optional utility for developers, [https://wiki.luxcorerender.org/Developing_and_debugging_BlendLuxCore#Utility_shell_script_for_launching_Blender see here])&lt;br /&gt;
* Viewport: Limit values in extremely overexposed areas, previously causing these areas to appear black&lt;br /&gt;
&lt;br /&gt;
=LuxCore=&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
&lt;br /&gt;
* New, multiplatform dependency manager: LuxCoreDeps. The new dep manager is based on Conan, an open source software which gives access to a database of thousands of build recipes, maintained up-to-date both by a company (JFrog) and a dynamic community. The deps are now built from sources, for a better control of build settings, binary compatibility etc.&lt;br /&gt;
&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
&lt;br /&gt;
* Buildability restored for all previous platforms: Linux, Windows, MacOS Intel&lt;br /&gt;
&lt;br /&gt;
* Buildability added MacOS ARM platform.&lt;br /&gt;
&lt;br /&gt;
* LuxCoreRender delivered  in the form of Python wheels, published on PyPi.&lt;br /&gt;
&lt;br /&gt;
* Automation (check, build, publish...) rewritten in Github Actions&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
&lt;br /&gt;
* LuxCore is now buildable again, on all previous platforms (Linux, Windows, MacOS Intel) + one (MacOS ARM).&lt;br /&gt;
* Crash fixed on tile path&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
&lt;br /&gt;
= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
* Compatibility for Blender 4.2 and 4.3&lt;br /&gt;
* Partial compatibility for Blender 4.4 (not a release goal)&lt;br /&gt;
* Moved from Blenders addon system to the new extension system&lt;br /&gt;
* BlendLuxCore no longer bundles LuxCore binaries, platform specific binaries now distributed via PyPi&lt;br /&gt;
* Changed build pipeline from Azure to GitHub CI/CD&lt;br /&gt;
* Add square-root option to math node (alias to power 0.5)&lt;br /&gt;
* Add a setting to suppress LuxCore console log output&lt;br /&gt;
* Glass material now accepts IOR &amp;lt; 1&lt;br /&gt;
* Materials can now be individually excluded from material override&lt;br /&gt;
* BlendLuxCore specific menus are marked with an icon&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
* Motion blur support for instances&lt;br /&gt;
* Improve custom normals export time by utilizing mesh.loops.foreach_get()&lt;br /&gt;
* LOL: Changed data access to adapt to new webhosting requirements&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
* Crashes are observed on macOS with Blender 4.2 and Blender 4.3. Related to window resizing and render completion. Unknown if Blender specific or also happening in standalone.&lt;br /&gt;
* Motion blur does not seem to work on &amp;quot;deeper iterations&amp;quot;, e.g. copying an instanced object&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2426</id>
		<title>LuxCoreRender Release Notes v2.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2426"/>
		<updated>2025-10-11T19:20:17Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* LuxCore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
* Fresnel texture: &amp;quot;custom n,k&amp;quot; now accepts values &amp;gt; 1&lt;br /&gt;
* &amp;lt;del&amp;gt;Change installation mechanism to use bpy.utils.extension_path_user()&amp;lt;/del&amp;gt; (Reworked again within the scope of BlendLuxHelper)&lt;br /&gt;
* Include &amp;quot;OptiX&amp;quot; in addon settings label to avoid user questions about compatibility&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed&lt;br /&gt;
* &amp;lt;del&amp;gt;Added a Linux development shell script (optional utility for developers)&amp;lt;/del&amp;gt; (replaced by BlendLuxHelper)&lt;br /&gt;
* Remove leftover code from the Addons system that is no longer used with the Extensions system.&lt;br /&gt;
* BlendLuxHelper: A new helper, in the form of a Blender extension, which allows to configure the wheel which is imported by BlendLuxCore.&lt;br /&gt;
* Limit float values in viewport render to 16-bit in order to avoid overexposed areas being displayed as black.&lt;br /&gt;
* Remove default filtering of Intel GPU devices&lt;br /&gt;
* Add a checkbox to the material output node for enabling an override: When using shadow color, this allows light rays in addition to the shadow rays. (default off == no light rays, only shadow rays)&lt;br /&gt;
&lt;br /&gt;
= LuxCore =&lt;br /&gt;
* Reduction of Boost footprint, replaced with standard equivalents available in C++20.&lt;br /&gt;
* For the need of previous point: replacement of apple-clang by clang 20 on MacOS platforms&lt;br /&gt;
* New target &#039;wheel-test&#039; that builds a testing wheel in local build (&amp;lt;code&amp;gt;make wheel-test&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Requirement checking in &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;&lt;br /&gt;
* luxrays: rename GetConfigDir as GetCacheDir and use XDG_CACHE_HOME according to specifications (@illwieckz)&lt;br /&gt;
* Subdivision: add an &amp;quot;adaptive&amp;quot; setting to select between adaptive refinement and uniform refinement&lt;br /&gt;
* Subdivision: multithreaded version&lt;br /&gt;
* Fix a bug leading to unstable brightness between renderings when using saved crashes (Credit to FELIX Render developers)&lt;br /&gt;
* Fix volume evaluation in BiDir engine https://github.com/LuxCoreRender/LuxCore/issues/647&lt;br /&gt;
* Fix various bugs when using orthographic camera with light tracing https://github.com/LuxCoreRender/LuxCore/issues/667&lt;br /&gt;
* Apply the behavior of the BiDir engine w.r.t. shadow color mechanism to Path+Light tracing. &amp;lt;b&amp;gt;Breaking change for scenes using shadow color and light tracing (not BiDir)!&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= LuxCoreDeps =&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
* Removed a workaround introduced in previous version (we used to build a fake wheel to get containerization)&lt;br /&gt;
* OpenMP - MacOS: Use of homebrew OpenMP (up-to-date, compatible with clang 20) rather than Conan llvm-openmp (version 17...). As a consequence, for MacOS Intel, a version &amp;gt;= 13.0 is required.&lt;br /&gt;
* Opensubdiv: tbb activation. As a consequence, for MacOS Arm, a version &amp;gt;= 14.2 is required.&lt;br /&gt;
* OpenImageIO: deactivation of several image formats that seem unrelated to or unsupported by LuxCore: freetype, hdf5, ffmpeg, libheif, ptex, opencv, webp. This removal spares both compilation time and build result size. Those formats are reactivable, in case they were missing.&lt;br /&gt;
* OpenImageIO: To the contrary, activation of tbb option.&lt;br /&gt;
* Embree: Upgraded to version 4.&lt;br /&gt;
* libjpeg: Replaced with libjpeg-turbo&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2425</id>
		<title>LuxCoreRender Release Notes v2.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2425"/>
		<updated>2025-10-11T19:10:31Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* BlendLuxCore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
* Fresnel texture: &amp;quot;custom n,k&amp;quot; now accepts values &amp;gt; 1&lt;br /&gt;
* &amp;lt;del&amp;gt;Change installation mechanism to use bpy.utils.extension_path_user()&amp;lt;/del&amp;gt; (Reworked again within the scope of BlendLuxHelper)&lt;br /&gt;
* Include &amp;quot;OptiX&amp;quot; in addon settings label to avoid user questions about compatibility&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed&lt;br /&gt;
* &amp;lt;del&amp;gt;Added a Linux development shell script (optional utility for developers)&amp;lt;/del&amp;gt; (replaced by BlendLuxHelper)&lt;br /&gt;
* Remove leftover code from the Addons system that is no longer used with the Extensions system.&lt;br /&gt;
* BlendLuxHelper: A new helper, in the form of a Blender extension, which allows to configure the wheel which is imported by BlendLuxCore.&lt;br /&gt;
* Limit float values in viewport render to 16-bit in order to avoid overexposed areas being displayed as black.&lt;br /&gt;
* Remove default filtering of Intel GPU devices&lt;br /&gt;
* Add a checkbox to the material output node for enabling an override: When using shadow color, this allows light rays in addition to the shadow rays. (default off == no light rays, only shadow rays)&lt;br /&gt;
&lt;br /&gt;
= LuxCore =&lt;br /&gt;
* Reduction of Boost footprint, replaced with standard equivalents available in C++20.&lt;br /&gt;
* For the need of previous point: replacement of apple-clang by clang 20 on MacOS platforms&lt;br /&gt;
* New target &#039;wheel-test&#039; that builds a testing wheel in local build (&amp;lt;code&amp;gt;make wheel-test&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Requirement checking in &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;&lt;br /&gt;
* luxrays: rename GetConfigDir as GetCacheDir and use XDG_CACHE_HOME according to specifications (@illwieckz)&lt;br /&gt;
* Subdivision: add an &amp;quot;adaptive&amp;quot; setting to select between adaptive refinement and uniform refinement&lt;br /&gt;
* Subdivision: multithreaded version&lt;br /&gt;
&lt;br /&gt;
= LuxCoreDeps =&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
* Removed a workaround introduced in previous version (we used to build a fake wheel to get containerization)&lt;br /&gt;
* OpenMP - MacOS: Use of homebrew OpenMP (up-to-date, compatible with clang 20) rather than Conan llvm-openmp (version 17...). As a consequence, for MacOS Intel, a version &amp;gt;= 13.0 is required.&lt;br /&gt;
* Opensubdiv: tbb activation. As a consequence, for MacOS Arm, a version &amp;gt;= 14.2 is required.&lt;br /&gt;
* OpenImageIO: deactivation of several image formats that seem unrelated to or unsupported by LuxCore: freetype, hdf5, ffmpeg, libheif, ptex, opencv, webp. This removal spares both compilation time and build result size. Those formats are reactivable, in case they were missing.&lt;br /&gt;
* OpenImageIO: To the contrary, activation of tbb option.&lt;br /&gt;
* Embree: Upgraded to version 4.&lt;br /&gt;
* libjpeg: Replaced with libjpeg-turbo&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2424</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2424"/>
		<updated>2025-10-07T19:51:03Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Installation of BlendLuxHelper and Setup of BlendLuxCore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
In addition, there may be the need to handle some unusual cases, for example performing an offline-installation in restrictive company networks where dependencies cannot be downloaded via pip.&lt;br /&gt;
&lt;br /&gt;
To facilitate the configuration of these scenarios, we provide a separate extension, &amp;lt;b&amp;gt;BlendLuxHelper&amp;lt;/b&amp;gt; (BLH). &lt;br /&gt;
&lt;br /&gt;
The setup and usage of BlendLuxCore together with BlendLuxHelper will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You made yourself familiar with Blenders official [https://developer.blender.org/docs/handbook/extensions/addon_dev_setup/ Add-on Development Setup] guide.&lt;br /&gt;
&lt;br /&gt;
= Installation of BlendLuxHelper and Setup of BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Uninstall any previously installed version of BLC. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 2 (optional):&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Add a new local extension repository for installation of the BLC/BLH development environment.&amp;lt;br&amp;gt;&lt;br /&gt;
Suggested name: &amp;lt;code&amp;gt;blc_dbg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 3:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Download the latest release of [https://github.com/LuxCoreRender/BlendLuxHelper BLH on GitHub], or - if necessary - build the extension from source.&lt;br /&gt;
&lt;br /&gt;
Install BLH in Blender through the extensions menu using the [https://docs.blender.org/manual/en/latest/editors/preferences/extensions.html#bpy-ops-extensions-package-install-files Install from Disk] option.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 4:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Create a symbolic link to the local BLC git-repository, as outlined in Blenders Add-on Development Setup guide.&lt;br /&gt;
In the Addon preferences menu of BLH, at the bottom, you can find a function to perform this step with a graphical interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 5:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Close and reopen Blender. Go to the addon-preferences menu and enable the BLC addon.&lt;br /&gt;
The addon should now be installed, including the installation of pyluxcore and its dependencies.&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
If you followed the previous instructions and installed BLC via a symbolic link, BLC will always be loaded from your local git repository source at Blender startup.&lt;br /&gt;
&lt;br /&gt;
if you make changes to BLC and want to reload the addon, you can use Blenders internal function &amp;quot;Reload Scripts&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Nota: This feature is WIP for BLC and may not yet be functional for all of its submodules.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
To use a custom wheel of pyluxcore, open the addon preferences of BLH.&lt;br /&gt;
Set the option &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Local Wheel&amp;lt;/code&amp;gt;. You can then enter a &amp;lt;code&amp;gt;Path to Wheel file&amp;lt;/code&amp;gt;, which must point to the wheel itself, not the folder where it is located!&lt;br /&gt;
&lt;br /&gt;
At each startup (or reload), BLC computes a hash of the linked wheel. This hash is compared against information stored in a local file, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel, and update accordingly if you change the selection of &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore [...]&amp;lt;/code&amp;gt; --&amp;gt; A local version will be used.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version: [...]&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. [...]&amp;lt;/code&amp;gt; --&amp;gt; BLC detected that the installed wheel matches the designated wheel, and installation is skipped. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Scenario #3: Offline installation =&lt;br /&gt;
&lt;br /&gt;
When you need to perform an offline installation, you first need to download the dependencies of pyluxcore as wheel-files.&amp;lt;br&amp;gt;&lt;br /&gt;
If you are unsure about the correct modules and versions, or where to get them, please ask on the support channels (Forum, Discord, ...).&lt;br /&gt;
&lt;br /&gt;
In the BLH addon preferences, first configure to use a Local Wheel as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
Then, use the additional option &amp;lt;code&amp;gt;Path to additional dependency folder (optional)&amp;lt;/code&amp;gt; to specify the path where the dependencies are located.&amp;lt;br&amp;gt;&lt;br /&gt;
In this field enter a &amp;lt;b&amp;gt;folder path&amp;lt;/b&amp;gt; that contains all the dependency wheels that you previously downloaded. (Not a wheel directly, as required in the previous section.)&lt;br /&gt;
&lt;br /&gt;
At the next startup, Blender will install the local wheel including the local dependencies.&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/.user/&amp;lt;repository&amp;gt;/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2423</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2423"/>
		<updated>2025-10-07T19:50:50Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Installation of BlendLuxHelper and Setup of BlendLuxCore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
In addition, there may be the need to handle some unusual cases, for example performing an offline-installation in restrictive company networks where dependencies cannot be downloaded via pip.&lt;br /&gt;
&lt;br /&gt;
To facilitate the configuration of these scenarios, we provide a separate extension, &amp;lt;b&amp;gt;BlendLuxHelper&amp;lt;/b&amp;gt; (BLH). &lt;br /&gt;
&lt;br /&gt;
The setup and usage of BlendLuxCore together with BlendLuxHelper will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You made yourself familiar with Blenders official [https://developer.blender.org/docs/handbook/extensions/addon_dev_setup/ Add-on Development Setup] guide.&lt;br /&gt;
&lt;br /&gt;
= Installation of BlendLuxHelper and Setup of BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Uninstall any previously installed version of BLC. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 2 (optional):&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Add a new local extension repository for installation of the BLC/BLH development environment.&lt;br /&gt;
Suggested name: &amp;lt;code&amp;gt;blc_dbg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 3:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Download the latest release of [https://github.com/LuxCoreRender/BlendLuxHelper BLH on GitHub], or - if necessary - build the extension from source.&lt;br /&gt;
&lt;br /&gt;
Install BLH in Blender through the extensions menu using the [https://docs.blender.org/manual/en/latest/editors/preferences/extensions.html#bpy-ops-extensions-package-install-files Install from Disk] option.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 4:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Create a symbolic link to the local BLC git-repository, as outlined in Blenders Add-on Development Setup guide.&lt;br /&gt;
In the Addon preferences menu of BLH, at the bottom, you can find a function to perform this step with a graphical interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 5:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Close and reopen Blender. Go to the addon-preferences menu and enable the BLC addon.&lt;br /&gt;
The addon should now be installed, including the installation of pyluxcore and its dependencies.&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
If you followed the previous instructions and installed BLC via a symbolic link, BLC will always be loaded from your local git repository source at Blender startup.&lt;br /&gt;
&lt;br /&gt;
if you make changes to BLC and want to reload the addon, you can use Blenders internal function &amp;quot;Reload Scripts&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Nota: This feature is WIP for BLC and may not yet be functional for all of its submodules.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
To use a custom wheel of pyluxcore, open the addon preferences of BLH.&lt;br /&gt;
Set the option &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Local Wheel&amp;lt;/code&amp;gt;. You can then enter a &amp;lt;code&amp;gt;Path to Wheel file&amp;lt;/code&amp;gt;, which must point to the wheel itself, not the folder where it is located!&lt;br /&gt;
&lt;br /&gt;
At each startup (or reload), BLC computes a hash of the linked wheel. This hash is compared against information stored in a local file, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel, and update accordingly if you change the selection of &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore [...]&amp;lt;/code&amp;gt; --&amp;gt; A local version will be used.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version: [...]&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. [...]&amp;lt;/code&amp;gt; --&amp;gt; BLC detected that the installed wheel matches the designated wheel, and installation is skipped. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Scenario #3: Offline installation =&lt;br /&gt;
&lt;br /&gt;
When you need to perform an offline installation, you first need to download the dependencies of pyluxcore as wheel-files.&amp;lt;br&amp;gt;&lt;br /&gt;
If you are unsure about the correct modules and versions, or where to get them, please ask on the support channels (Forum, Discord, ...).&lt;br /&gt;
&lt;br /&gt;
In the BLH addon preferences, first configure to use a Local Wheel as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
Then, use the additional option &amp;lt;code&amp;gt;Path to additional dependency folder (optional)&amp;lt;/code&amp;gt; to specify the path where the dependencies are located.&amp;lt;br&amp;gt;&lt;br /&gt;
In this field enter a &amp;lt;b&amp;gt;folder path&amp;lt;/b&amp;gt; that contains all the dependency wheels that you previously downloaded. (Not a wheel directly, as required in the previous section.)&lt;br /&gt;
&lt;br /&gt;
At the next startup, Blender will install the local wheel including the local dependencies.&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/.user/&amp;lt;repository&amp;gt;/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2422</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2422"/>
		<updated>2025-10-07T19:50:09Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
In addition, there may be the need to handle some unusual cases, for example performing an offline-installation in restrictive company networks where dependencies cannot be downloaded via pip.&lt;br /&gt;
&lt;br /&gt;
To facilitate the configuration of these scenarios, we provide a separate extension, &amp;lt;b&amp;gt;BlendLuxHelper&amp;lt;/b&amp;gt; (BLH). &lt;br /&gt;
&lt;br /&gt;
The setup and usage of BlendLuxCore together with BlendLuxHelper will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You made yourself familiar with Blenders official [https://developer.blender.org/docs/handbook/extensions/addon_dev_setup/ Add-on Development Setup] guide.&lt;br /&gt;
&lt;br /&gt;
= Installation of BlendLuxHelper and Setup of BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Uninstall any previously installed version of BLC. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 2 (optional):&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Add a new local extension repository for installation of the BLC/BLH development environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 3:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Download the latest release of [https://github.com/LuxCoreRender/BlendLuxHelper BLH on GitHub], or - if necessary - build the extension from source.&lt;br /&gt;
&lt;br /&gt;
Install BLH in Blender through the extensions menu using the [https://docs.blender.org/manual/en/latest/editors/preferences/extensions.html#bpy-ops-extensions-package-install-files Install from Disk] option.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 4:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Create a symbolic link to the local BLC git-repository, as outlined in Blenders Add-on Development Setup guide.&lt;br /&gt;
In the Addon preferences menu of BLH, at the bottom, you can find a function to perform this step with a graphical interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 5:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Close and reopen Blender. Go to the addon-preferences menu and enable the BLC addon.&lt;br /&gt;
The addon should now be installed, including the installation of pyluxcore and its dependencies.&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
If you followed the previous instructions and installed BLC via a symbolic link, BLC will always be loaded from your local git repository source at Blender startup.&lt;br /&gt;
&lt;br /&gt;
if you make changes to BLC and want to reload the addon, you can use Blenders internal function &amp;quot;Reload Scripts&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Nota: This feature is WIP for BLC and may not yet be functional for all of its submodules.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
To use a custom wheel of pyluxcore, open the addon preferences of BLH.&lt;br /&gt;
Set the option &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Local Wheel&amp;lt;/code&amp;gt;. You can then enter a &amp;lt;code&amp;gt;Path to Wheel file&amp;lt;/code&amp;gt;, which must point to the wheel itself, not the folder where it is located!&lt;br /&gt;
&lt;br /&gt;
At each startup (or reload), BLC computes a hash of the linked wheel. This hash is compared against information stored in a local file, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel, and update accordingly if you change the selection of &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore [...]&amp;lt;/code&amp;gt; --&amp;gt; A local version will be used.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version: [...]&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. [...]&amp;lt;/code&amp;gt; --&amp;gt; BLC detected that the installed wheel matches the designated wheel, and installation is skipped. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Scenario #3: Offline installation =&lt;br /&gt;
&lt;br /&gt;
When you need to perform an offline installation, you first need to download the dependencies of pyluxcore as wheel-files.&amp;lt;br&amp;gt;&lt;br /&gt;
If you are unsure about the correct modules and versions, or where to get them, please ask on the support channels (Forum, Discord, ...).&lt;br /&gt;
&lt;br /&gt;
In the BLH addon preferences, first configure to use a Local Wheel as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
Then, use the additional option &amp;lt;code&amp;gt;Path to additional dependency folder (optional)&amp;lt;/code&amp;gt; to specify the path where the dependencies are located.&amp;lt;br&amp;gt;&lt;br /&gt;
In this field enter a &amp;lt;b&amp;gt;folder path&amp;lt;/b&amp;gt; that contains all the dependency wheels that you previously downloaded. (Not a wheel directly, as required in the previous section.)&lt;br /&gt;
&lt;br /&gt;
At the next startup, Blender will install the local wheel including the local dependencies.&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/.user/&amp;lt;repository&amp;gt;/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2421</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2421"/>
		<updated>2025-10-07T19:49:32Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Statement of problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
In addition, there may be the need to handle some unusual cases, for example performing an offline-installation in restrictive company networks where dependencies cannot be downloaded via pip.&lt;br /&gt;
&lt;br /&gt;
To facilitate the configuration of these scenarios, we provide a separate extension, &amp;lt;b&amp;gt;BlendLuxHelper&amp;lt;/b&amp;gt; (BLH). &lt;br /&gt;
&lt;br /&gt;
The setup and usage of BlendLuxCore together with BlendLuxHelper will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You made yourself familiar with Blenders official [https://developer.blender.org/docs/handbook/extensions/addon_dev_setup/ Add-on Development Setup] guide.&lt;br /&gt;
&lt;br /&gt;
= Installation of BlendLuxHelper and Setup of BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Uninstall any previously installed version of BLC. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 2 (optional):&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Add a new local extension repository for installation of the BLC/BLH development environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 3:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Download the latest release of [https://github.com/LuxCoreRender/BlendLuxHelper BLH on GitHub], or - if necessary - build the extension from source.&lt;br /&gt;
&lt;br /&gt;
Install BLH in Blender through the extensions menu using the [https://docs.blender.org/manual/en/latest/editors/preferences/extensions.html#bpy-ops-extensions-package-install-files Install from Disk] option.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 4:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Create a symbolic link to the local BLC git-repository, as outlined in Blenders Add-on Development Setup guide.&lt;br /&gt;
In the Addon preferences menu of BLH, at the bottom, you can find a function to perform this step with a graphical interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 5:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Close and reopen Blender. Go to the addon-preferences menu and enable the BLC addon.&lt;br /&gt;
The addon should now be installed, including the installation of pyluxcore and its dependencies.&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
If you followed the previous instructions and installed BLC via a symbolic link, BLC will always be loaded from your local git repository source at Blender startup.&lt;br /&gt;
&lt;br /&gt;
if you make changes to BLC and want to reload the addon, you can use Blenders internal function &amp;quot;Reload Scripts&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Nota: This feature is WIP for BLC and may not yet be functional for all of its submodules.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
To use a custom wheel of pyluxcore, open the addon preferences of BLH.&lt;br /&gt;
Set the option &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Local Wheel&amp;lt;/code&amp;gt;. You can then enter a &amp;lt;code&amp;gt;Path to Wheel file&amp;lt;/code&amp;gt;, which must point to the wheel itself, not the folder where it is located!&lt;br /&gt;
&lt;br /&gt;
At each startup (or reload), BLC computes a hash of the linked wheel. This hash is compared against information stored in a local file, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel, and update accordingly if you change the selection of &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore [...]&amp;lt;/code&amp;gt; --&amp;gt; A local version will be used.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version: [...]&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. [...]&amp;lt;/code&amp;gt; --&amp;gt; BLC detected that the installed wheel matches the designated wheel, and installation is skipped. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Scenario #3: Offline installation =&lt;br /&gt;
&lt;br /&gt;
When you need to perform an offline installation, you first need to download the dependencies of pyluxcore as wheel-files.&amp;lt;br&amp;gt;&lt;br /&gt;
If you are unsure about the correct modules and versions, or where to get them, please ask on the support channels (Forum, Discord, ...).&lt;br /&gt;
&lt;br /&gt;
In the BLH addon preferences, first configure to use a Local Wheel as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
Then, use the additional option &amp;lt;code&amp;gt;Path to additional dependency folder (optional)&amp;lt;/code&amp;gt; to specify the path where the dependencies are located.&amp;lt;br&amp;gt;&lt;br /&gt;
In this field enter a &amp;lt;b&amp;gt;folder path&amp;lt;/b&amp;gt; that contains all the dependency wheels that you previously downloaded. (Not a wheel directly, as required in the previous section.)&lt;br /&gt;
&lt;br /&gt;
At the next startup, Blender will install the local wheel including the local dependencies.&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/.user/blc_dbg/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2416</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2416"/>
		<updated>2025-10-07T19:01:06Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
In addition, there may be the need to handle some unusual cases, for example performing an offline-installation in restrictive company networks where dependencies cannot be downloaded via pip.&lt;br /&gt;
&lt;br /&gt;
To facilitate the configuration of these scenarios, we provide a separate extension, &amp;lt;b&amp;gt;BlendLuxHelper&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The setup and usage of BlendLuxCore together with BlendLuxHelper will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You made yourself familiar with Blenders official [https://developer.blender.org/docs/handbook/extensions/addon_dev_setup/ Add-on Development Setup] guide.&lt;br /&gt;
&lt;br /&gt;
= Installation of BlendLuxHelper and Setup of BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Uninstall any previously installed version of BLC. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 2 (optional):&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Add a new local extension repository for installation of the BLC/BLH development environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 3:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Download the latest release of [https://github.com/LuxCoreRender/BlendLuxHelper BLH on GitHub], or - if necessary - build the extension from source.&lt;br /&gt;
&lt;br /&gt;
Install BLH in Blender thorugh the extensions menu using the [https://docs.blender.org/manual/en/latest/editors/preferences/extensions.html#bpy-ops-extensions-package-install-files Install from Disk] option.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 4:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Create a symbolic link to the local BLC git-repository, as outlined in Blenders Add-on Development Setup guide.&lt;br /&gt;
In the Addon preferences menu of BLH, at the bottom, you can find a function to perform this step with a graphical interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 5:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Close and reopen Blender. Go to the addon-preferences menu and enable the BLC addon.&lt;br /&gt;
The addon should now be installed, including the installation of pyluxcore and its dependencies.&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
If you followed the previous instructions and installed BLC via a symbolic link, BLC will always be loaded from your local git repository source at Blender startup.&lt;br /&gt;
&lt;br /&gt;
if you make changes to BLC and want to reload the addon, you can use Blenders internal function &amp;quot;Reload Scripts&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Nota: This feature is WIP for BLC and may not yet be functional for all of its submodules.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
To use a custom wheel of pyluxcore, open the addon preferences of BLH.&lt;br /&gt;
Set the option &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Local Wheel&amp;lt;/code&amp;gt;. You can then enter a &amp;lt;code&amp;gt;Path to Wheel file&amp;lt;/code&amp;gt;, which must point to the wheel itself, not the folder where it is located!&lt;br /&gt;
&lt;br /&gt;
At each startup (or reload), BLC computes a hash of the linked wheel. This hash is compared against information stored in a local file, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel, and update accordingly if you change the selection of &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore [...]&amp;lt;/code&amp;gt; --&amp;gt; A local version will be used.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version: [...]&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. [...]&amp;lt;/code&amp;gt; --&amp;gt; BLC detected that the installed wheel matches the designated wheel, and installation is skipped. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Scenario #3: Offline installation =&lt;br /&gt;
&lt;br /&gt;
When you need to perform an offline installation, you first need to download the dependencies of pyluxcore as wheel-files.&amp;lt;br&amp;gt;&lt;br /&gt;
If you are unsure about the correct modules and versions, or where to get them, please ask on the support channels (Forum, Discord, ...).&lt;br /&gt;
&lt;br /&gt;
In the BLH addon preferences, first configure to use a Local Wheel as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
Then, use the additional option &amp;lt;code&amp;gt;Path to additional dependency folder (optional)&amp;lt;/code&amp;gt; to specify the path where the dependencies are located.&amp;lt;br&amp;gt;&lt;br /&gt;
In this field enter a &amp;lt;b&amp;gt;folder path&amp;lt;/b&amp;gt; that contains all the dependency wheels that you previously downloaded. (Not a wheel directly, as required in the previous section.)&lt;br /&gt;
&lt;br /&gt;
At the next startup, Blender will install the local wheel including the local dependencies.&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;THIS SECTION NEEDS AN UPDATE&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2415</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2415"/>
		<updated>2025-10-07T19:00:17Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: Add offline installation option&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
In addition, there may be the need to handle some unusual cases, for example performing an offline-installation in restrictive company networks where dependencies cannot be downloaded via pip.&lt;br /&gt;
&lt;br /&gt;
To facilitate the configuration of these scenarios, we provide a separate extension, &amp;lt;b&amp;gt;BlendLuxHelper&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The setup and usage of BlendLuxCore together with BlendLuxHelper will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You made yourself familiar with Blenders official [https://developer.blender.org/docs/handbook/extensions/addon_dev_setup/ Add-on Development Setup] guide.&lt;br /&gt;
&lt;br /&gt;
= Installation of BlendLuxHelper and Setup of BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Uninstall any previously installed version of BLC. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 2 (optional):&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Add a new local extension repository for installation of the BLC/BLH development environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 3:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Download the latest release of [https://github.com/LuxCoreRender/BlendLuxHelper BLH on GitHub], or - if necessary - build the extension from source.&lt;br /&gt;
&lt;br /&gt;
Install BLH in Blender thorugh the extensions menu using the [https://docs.blender.org/manual/en/latest/editors/preferences/extensions.html#bpy-ops-extensions-package-install-files Install from Disk] option.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 4:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Create a symbolic link to the local BLC git-repository, as outlined in Blenders Add-on Development Setup guide.&lt;br /&gt;
In the Addon preferences menu of BLH, at the bottom, you can find a function to perform this step with a graphical interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 5:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Close and reopen Blender. Go to the addon-preferences menu and enable the BLC addon.&lt;br /&gt;
The addon should now be installed, including the installation of pyluxcore and its dependencies.&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
If you followed the previous instructions and installed BLC via a symbolic link, BLC will always be loaded from your local git repository source at Blender startup.&lt;br /&gt;
&lt;br /&gt;
if you make changes to BLC and want to reload the addon, you can use Blenders internal function &amp;quot;Reload Scripts&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Nota: This feature is WIP for BLC and may not yet be functional for all of its submodules.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
To use a custom wheel of pyluxcore, open the addon preferences of BLH.&lt;br /&gt;
Set the option &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Local Wheel&amp;lt;/code&amp;gt;. You can then enter a &amp;lt;code&amp;gt;Path to Wheel file&amp;lt;/code&amp;gt;, which must point to the wheel itself, not the folder where it is located!&lt;br /&gt;
&lt;br /&gt;
At each startup (or reload), BLC computes a hash of the linked wheel. This hash is compared against information stored in a local file, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel, and update accordingly if you change the selection of &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore [...]&amp;lt;/code&amp;gt; --&amp;gt; A local version will be used.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version: [...]&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. [...]&amp;lt;/code&amp;gt; --&amp;gt; BLC detected that the installed wheel matches the designated wheel, and installation is skipped. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Scenario #3: Offline installation =&lt;br /&gt;
&lt;br /&gt;
When you need to perform an offline installation, you first need to download the dependencies of pyluxcore as wheel-files.&amp;lt;br&amp;gt;&lt;br /&gt;
If you are unsure about the correct modules and versions, or where to get them, please ask on the support channels (Forum, Discord, ...).&lt;br /&gt;
&lt;br /&gt;
In the BLH addon preferences, first configure to use a Local Wheel as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
Then, use the additional option &amp;lt;code&amp;gt;Path to additional dependency folder (optional)&amp;lt;/code&amp;gt; to specify the path where the dependencies are located.&amp;lt;br&amp;gt;&lt;br /&gt;
In this field enter a &amp;lt;b&amp;gt;folder path&amp;lt;/b&amp;gt; that contains all the dependency wheels that you previously downloaded. (Not a wheel directly, as required in the previous section.)&lt;br /&gt;
&lt;br /&gt;
At the next startup, Blender will install the local wheel including the local dependencies.&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2414</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2414"/>
		<updated>2025-10-07T18:47:39Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Tips &amp;amp; Tricks */ Remove obsolete sections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
In addition, there may be the need to handle some unusual cases, for example performing an offline-installation in restrictive company networks where dependencies cannot be downloaded via pip.&lt;br /&gt;
&lt;br /&gt;
To facilitate the configuration of these scenarios, we provide a separate extension, &amp;lt;b&amp;gt;BlendLuxHelper&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The setup and usage of BlendLuxCore together with BlendLuxHelper will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You made yourself familiar with Blenders official [https://developer.blender.org/docs/handbook/extensions/addon_dev_setup/ Add-on Development Setup] guide.&lt;br /&gt;
&lt;br /&gt;
= Installation of BlendLuxHelper and Setup of BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Uninstall any previously installed version of BLC. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 2 (optional):&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Add a new local extension repository for installation of the BLC/BLH development environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 3:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Download the latest release of [https://github.com/LuxCoreRender/BlendLuxHelper BLH on GitHub], or - if necessary - build the extension from source.&lt;br /&gt;
&lt;br /&gt;
Install BLH in Blender thorugh the extensions menu using the [https://docs.blender.org/manual/en/latest/editors/preferences/extensions.html#bpy-ops-extensions-package-install-files Install from Disk] option.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 4:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Create a symbolic link to the local BLC git-repository, as outlined in Blenders Add-on Development Setup guide.&lt;br /&gt;
In the Addon preferences menu of BLH, at the bottom, you can find a function to perform this step with a graphical interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 5:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Close and reopen Blender. Go to the addon-preferences menu and enable the BLC addon.&lt;br /&gt;
The addon should now be installed, including the installation of pyluxcore and its dependencies.&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
If you followed the previous instructions and installed BLC via a symbolic link, BLC will always be loaded from your local git repository source at Blender startup.&lt;br /&gt;
&lt;br /&gt;
if you make changes to BLC and want to reload the addon, you can use Blenders internal function &amp;quot;Reload Scripts&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Nota: This feature is WIP for BLC and may not yet be functional for all of its submodules.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
To use a custom wheel of pyluxcore, open the addon preferences of BLH.&lt;br /&gt;
Set the option &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Local Wheel&amp;lt;/code&amp;gt;. You can then enter a &amp;lt;code&amp;gt;Path to Wheel file&amp;lt;/code&amp;gt;, which must point to the wheel itself, not the folder where it is located!&lt;br /&gt;
&lt;br /&gt;
At each startup (or reload), BLC computes a hash of the linked wheel. This hash is compared against information stored in a local file, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel, and update accordingly if you change the selection of &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore [...]&amp;lt;/code&amp;gt; --&amp;gt; A local version will be used.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version: [...]&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. [...]&amp;lt;/code&amp;gt; --&amp;gt; BLC detected that the installed wheel matches the designated wheel, and installation is skipped. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2413</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2413"/>
		<updated>2025-10-07T18:47:05Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Scenario #2: Working on pyluxcore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
In addition, there may be the need to handle some unusual cases, for example performing an offline-installation in restrictive company networks where dependencies cannot be downloaded via pip.&lt;br /&gt;
&lt;br /&gt;
To facilitate the configuration of these scenarios, we provide a separate extension, &amp;lt;b&amp;gt;BlendLuxHelper&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The setup and usage of BlendLuxCore together with BlendLuxHelper will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You made yourself familiar with Blenders official [https://developer.blender.org/docs/handbook/extensions/addon_dev_setup/ Add-on Development Setup] guide.&lt;br /&gt;
&lt;br /&gt;
= Installation of BlendLuxHelper and Setup of BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Uninstall any previously installed version of BLC. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 2 (optional):&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Add a new local extension repository for installation of the BLC/BLH development environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 3:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Download the latest release of [https://github.com/LuxCoreRender/BlendLuxHelper BLH on GitHub], or - if necessary - build the extension from source.&lt;br /&gt;
&lt;br /&gt;
Install BLH in Blender thorugh the extensions menu using the [https://docs.blender.org/manual/en/latest/editors/preferences/extensions.html#bpy-ops-extensions-package-install-files Install from Disk] option.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 4:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Create a symbolic link to the local BLC git-repository, as outlined in Blenders Add-on Development Setup guide.&lt;br /&gt;
In the Addon preferences menu of BLH, at the bottom, you can find a function to perform this step with a graphical interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 5:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Close and reopen Blender. Go to the addon-preferences menu and enable the BLC addon.&lt;br /&gt;
The addon should now be installed, including the installation of pyluxcore and its dependencies.&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
If you followed the previous instructions and installed BLC via a symbolic link, BLC will always be loaded from your local git repository source at Blender startup.&lt;br /&gt;
&lt;br /&gt;
if you make changes to BLC and want to reload the addon, you can use Blenders internal function &amp;quot;Reload Scripts&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Nota: This feature is WIP for BLC and may not yet be functional for all of its submodules.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
To use a custom wheel of pyluxcore, open the addon preferences of BLH.&lt;br /&gt;
Set the option &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;Local Wheel&amp;lt;/code&amp;gt;. You can then enter a &amp;lt;code&amp;gt;Path to Wheel file&amp;lt;/code&amp;gt;, which must point to the wheel itself, not the folder where it is located!&lt;br /&gt;
&lt;br /&gt;
At each startup (or reload), BLC computes a hash of the linked wheel. This hash is compared against information stored in a local file, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel, and update accordingly if you change the selection of &amp;lt;code&amp;gt;Wheel Source&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore [...]&amp;lt;/code&amp;gt; --&amp;gt; A local version will be used.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version: [...]&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. [...]&amp;lt;/code&amp;gt; --&amp;gt; BLC detected that the installed wheel matches the designated wheel, and installation is skipped. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utility shell script for launching Blender ==&lt;br /&gt;
&lt;br /&gt;
The BlendLuxCore repository contains a shell script, called &amp;lt;code&amp;gt;blendev&amp;lt;/code&amp;gt; (short for blender-development), located inside the &amp;lt;code&amp;gt;debug-helpers&amp;lt;/code&amp;gt; subdirectory.&lt;br /&gt;
The purpose of this script is to easily launch Blender and switch between multiple versions of Blender, a regularly installed version of BlendLuxCore and pyluxcore, local development code of BlendLuxCore, and locally compiled versions of pyluxcore.&lt;br /&gt;
At the time of writing, this script is available only for linux/bash development.&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;code&amp;gt;Readme.md&amp;lt;/code&amp;gt; supplied alongside the script, and its internal help output &amp;lt;code&amp;gt;blendev -h&amp;lt;/code&amp;gt; for detailed instructions on how to use it.&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2412</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2412"/>
		<updated>2025-10-07T18:39:44Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Scenario #1: Working on BLC, using standard pyluxcore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
In addition, there may be the need to handle some unusual cases, for example performing an offline-installation in restrictive company networks where dependencies cannot be downloaded via pip.&lt;br /&gt;
&lt;br /&gt;
To facilitate the configuration of these scenarios, we provide a separate extension, &amp;lt;b&amp;gt;BlendLuxHelper&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The setup and usage of BlendLuxCore together with BlendLuxHelper will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You made yourself familiar with Blenders official [https://developer.blender.org/docs/handbook/extensions/addon_dev_setup/ Add-on Development Setup] guide.&lt;br /&gt;
&lt;br /&gt;
= Installation of BlendLuxHelper and Setup of BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Uninstall any previously installed version of BLC. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 2 (optional):&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Add a new local extension repository for installation of the BLC/BLH development environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 3:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Download the latest release of [https://github.com/LuxCoreRender/BlendLuxHelper BLH on GitHub], or - if necessary - build the extension from source.&lt;br /&gt;
&lt;br /&gt;
Install BLH in Blender thorugh the extensions menu using the [https://docs.blender.org/manual/en/latest/editors/preferences/extensions.html#bpy-ops-extensions-package-install-files Install from Disk] option.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 4:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Create a symbolic link to the local BLC git-repository, as outlined in Blenders Add-on Development Setup guide.&lt;br /&gt;
In the Addon preferences menu of BLH, at the bottom, you can find a function to perform this step with a graphical interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 5:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Close and reopen Blender. Go to the addon-preferences menu and enable the BLC addon.&lt;br /&gt;
The addon should now be installed, including the installation of pyluxcore and its dependencies.&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
If you followed the previous instructions and installed BLC via a symbolic link, BLC will always be loaded from your local git repository source at Blender startup.&lt;br /&gt;
&lt;br /&gt;
if you make changes to BLC and want to reload the addon, you can use Blenders internal function &amp;quot;Reload Scripts&amp;quot;.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Nota: This feature is WIP for BLC and may not yet be functional for all of its submodules.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed Python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precedence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore&amp;lt;/code&amp;gt; --&amp;gt; A new local version will be installed. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;lt;/code&amp;gt; --&amp;gt; A local version was previously installed and is used again. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version:&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Specified version already installed.&amp;lt;/code&amp;gt; --&amp;gt; A PyPi version was previously installed and is used again.&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utility shell script for launching Blender ==&lt;br /&gt;
&lt;br /&gt;
The BlendLuxCore repository contains a shell script, called &amp;lt;code&amp;gt;blendev&amp;lt;/code&amp;gt; (short for blender-development), located inside the &amp;lt;code&amp;gt;debug-helpers&amp;lt;/code&amp;gt; subdirectory.&lt;br /&gt;
The purpose of this script is to easily launch Blender and switch between multiple versions of Blender, a regularly installed version of BlendLuxCore and pyluxcore, local development code of BlendLuxCore, and locally compiled versions of pyluxcore.&lt;br /&gt;
At the time of writing, this script is available only for linux/bash development.&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;code&amp;gt;Readme.md&amp;lt;/code&amp;gt; supplied alongside the script, and its internal help output &amp;lt;code&amp;gt;blendev -h&amp;lt;/code&amp;gt; for detailed instructions on how to use it.&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2411</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2411"/>
		<updated>2025-10-07T18:36:05Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Installation of BlendLuxHelper and Setup of BlendLuxCore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
In addition, there may be the need to handle some unusual cases, for example performing an offline-installation in restrictive company networks where dependencies cannot be downloaded via pip.&lt;br /&gt;
&lt;br /&gt;
To facilitate the configuration of these scenarios, we provide a separate extension, &amp;lt;b&amp;gt;BlendLuxHelper&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The setup and usage of BlendLuxCore together with BlendLuxHelper will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You made yourself familiar with Blenders official [https://developer.blender.org/docs/handbook/extensions/addon_dev_setup/ Add-on Development Setup] guide.&lt;br /&gt;
&lt;br /&gt;
= Installation of BlendLuxHelper and Setup of BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Uninstall any previously installed version of BLC. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 2 (optional):&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Add a new local extension repository for installation of the BLC/BLH development environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 3:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Download the latest release of [https://github.com/LuxCoreRender/BlendLuxHelper BLH on GitHub], or - if necessary - build the extension from source.&lt;br /&gt;
&lt;br /&gt;
Install BLH in Blender thorugh the extensions menu using the [https://docs.blender.org/manual/en/latest/editors/preferences/extensions.html#bpy-ops-extensions-package-install-files Install from Disk] option.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 4:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Create a symbolic link to the local BLC git-repository, as outlined in Blenders Add-on Development Setup guide.&lt;br /&gt;
In the Addon preferences menu of BLH, at the bottom, you can find a function to perform this step with a graphical interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 5:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Close and reopen Blender. Go to the addon-preferences menu and enable the BLC addon.&lt;br /&gt;
The addon should now be installed, including the installation of pyluxcore and its dependencies.&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path folder containing the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, and BlendLuxCore has already been installed using the normal installation method, set &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt; to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
For clarification, set this folder like you would set the systems &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;PYTHONPATH&amp;lt;/code&amp;gt; variable, i.e. so that Python can &amp;lt;code&amp;gt;import BlendLuxCore&amp;lt;/code&amp;gt; from this location!&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all Python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
As a verification of this working correctly, the console output of Blender at startup will show the following line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] USING LOCAL DEV VERSION OF BlendLuxCore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed Python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precedence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore&amp;lt;/code&amp;gt; --&amp;gt; A new local version will be installed. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;lt;/code&amp;gt; --&amp;gt; A local version was previously installed and is used again. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version:&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Specified version already installed.&amp;lt;/code&amp;gt; --&amp;gt; A PyPi version was previously installed and is used again.&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utility shell script for launching Blender ==&lt;br /&gt;
&lt;br /&gt;
The BlendLuxCore repository contains a shell script, called &amp;lt;code&amp;gt;blendev&amp;lt;/code&amp;gt; (short for blender-development), located inside the &amp;lt;code&amp;gt;debug-helpers&amp;lt;/code&amp;gt; subdirectory.&lt;br /&gt;
The purpose of this script is to easily launch Blender and switch between multiple versions of Blender, a regularly installed version of BlendLuxCore and pyluxcore, local development code of BlendLuxCore, and locally compiled versions of pyluxcore.&lt;br /&gt;
At the time of writing, this script is available only for linux/bash development.&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;code&amp;gt;Readme.md&amp;lt;/code&amp;gt; supplied alongside the script, and its internal help output &amp;lt;code&amp;gt;blendev -h&amp;lt;/code&amp;gt; for detailed instructions on how to use it.&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2410</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2410"/>
		<updated>2025-10-07T18:33:57Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: Add section about BLH installation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
In addition, there may be the need to handle some unusual cases, for example performing an offline-installation in restrictive company networks where dependencies cannot be downloaded via pip.&lt;br /&gt;
&lt;br /&gt;
To facilitate the configuration of these scenarios, we provide a separate extension, &amp;lt;b&amp;gt;BlendLuxHelper&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The setup and usage of BlendLuxCore together with BlendLuxHelper will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You made yourself familiar with Blenders official [https://developer.blender.org/docs/handbook/extensions/addon_dev_setup/ Add-on Development Setup] guide.&lt;br /&gt;
&lt;br /&gt;
= Installation of BlendLuxHelper and Setup of BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 1:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Uninstall any previously installed version of BLC. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 2 (optional):&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Add a new local extension repository for installation of the BLC/BLH development environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 3:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Download the latest release of [https://github.com/LuxCoreRender/BlendLuxHelper BLH on GitHub], or - if necessary - build the extension from source.&lt;br /&gt;
&lt;br /&gt;
Install BLH in Blender thorugh the extensions menu using the [https://docs.blender.org/manual/en/latest/editors/preferences/extensions.html#bpy-ops-extensions-package-install-files Install from Disk] option.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Step 4:&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Create a symbolic link to the local BLC git-repository, as outlined in Blenders Add-on Development Setup guide.&lt;br /&gt;
In the Addon preferences menu of BLH, at the bottom, you can find a function to perform this step with a graphical interface.&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path folder containing the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, and BlendLuxCore has already been installed using the normal installation method, set &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt; to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
For clarification, set this folder like you would set the systems &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;PYTHONPATH&amp;lt;/code&amp;gt; variable, i.e. so that Python can &amp;lt;code&amp;gt;import BlendLuxCore&amp;lt;/code&amp;gt; from this location!&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all Python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
As a verification of this working correctly, the console output of Blender at startup will show the following line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] USING LOCAL DEV VERSION OF BlendLuxCore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed Python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precedence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore&amp;lt;/code&amp;gt; --&amp;gt; A new local version will be installed. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;lt;/code&amp;gt; --&amp;gt; A local version was previously installed and is used again. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version:&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Specified version already installed.&amp;lt;/code&amp;gt; --&amp;gt; A PyPi version was previously installed and is used again.&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utility shell script for launching Blender ==&lt;br /&gt;
&lt;br /&gt;
The BlendLuxCore repository contains a shell script, called &amp;lt;code&amp;gt;blendev&amp;lt;/code&amp;gt; (short for blender-development), located inside the &amp;lt;code&amp;gt;debug-helpers&amp;lt;/code&amp;gt; subdirectory.&lt;br /&gt;
The purpose of this script is to easily launch Blender and switch between multiple versions of Blender, a regularly installed version of BlendLuxCore and pyluxcore, local development code of BlendLuxCore, and locally compiled versions of pyluxcore.&lt;br /&gt;
At the time of writing, this script is available only for linux/bash development.&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;code&amp;gt;Readme.md&amp;lt;/code&amp;gt; supplied alongside the script, and its internal help output &amp;lt;code&amp;gt;blendev -h&amp;lt;/code&amp;gt; for detailed instructions on how to use it.&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2409</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2409"/>
		<updated>2025-10-07T18:21:07Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Prerequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
In addition, there may be the need to handle some unusual cases, for example performing an offline-installation in restrictive company networks where dependencies cannot be downloaded via pip.&lt;br /&gt;
&lt;br /&gt;
To facilitate the configuration of these scenarios, we provide a separate extension, &amp;lt;b&amp;gt;BlendLuxHelper&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The setup and usage of BlendLuxCore together with BlendLuxHelper will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You made yourself familiar with Blenders official [https://developer.blender.org/docs/handbook/extensions/addon_dev_setup/ Add-on Development Setup] guide.&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path folder containing the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, and BlendLuxCore has already been installed using the normal installation method, set &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt; to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
For clarification, set this folder like you would set the systems &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;PYTHONPATH&amp;lt;/code&amp;gt; variable, i.e. so that Python can &amp;lt;code&amp;gt;import BlendLuxCore&amp;lt;/code&amp;gt; from this location!&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all Python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
As a verification of this working correctly, the console output of Blender at startup will show the following line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] USING LOCAL DEV VERSION OF BlendLuxCore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed Python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precedence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore&amp;lt;/code&amp;gt; --&amp;gt; A new local version will be installed. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;lt;/code&amp;gt; --&amp;gt; A local version was previously installed and is used again. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version:&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Specified version already installed.&amp;lt;/code&amp;gt; --&amp;gt; A PyPi version was previously installed and is used again.&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utility shell script for launching Blender ==&lt;br /&gt;
&lt;br /&gt;
The BlendLuxCore repository contains a shell script, called &amp;lt;code&amp;gt;blendev&amp;lt;/code&amp;gt; (short for blender-development), located inside the &amp;lt;code&amp;gt;debug-helpers&amp;lt;/code&amp;gt; subdirectory.&lt;br /&gt;
The purpose of this script is to easily launch Blender and switch between multiple versions of Blender, a regularly installed version of BlendLuxCore and pyluxcore, local development code of BlendLuxCore, and locally compiled versions of pyluxcore.&lt;br /&gt;
At the time of writing, this script is available only for linux/bash development.&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;code&amp;gt;Readme.md&amp;lt;/code&amp;gt; supplied alongside the script, and its internal help output &amp;lt;code&amp;gt;blendev -h&amp;lt;/code&amp;gt; for detailed instructions on how to use it.&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2408</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2408"/>
		<updated>2025-10-07T18:07:30Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Statement of problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
In addition, there may be the need to handle some unusual cases, for example performing an offline-installation in restrictive company networks where dependencies cannot be downloaded via pip.&lt;br /&gt;
&lt;br /&gt;
To facilitate the configuration of these scenarios, we provide a separate extension, &amp;lt;b&amp;gt;BlendLuxHelper&amp;lt;/b&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The setup and usage of BlendLuxCore together with BlendLuxHelper will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path folder containing the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, and BlendLuxCore has already been installed using the normal installation method, set &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt; to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
For clarification, set this folder like you would set the systems &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;PYTHONPATH&amp;lt;/code&amp;gt; variable, i.e. so that Python can &amp;lt;code&amp;gt;import BlendLuxCore&amp;lt;/code&amp;gt; from this location!&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all Python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
As a verification of this working correctly, the console output of Blender at startup will show the following line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] USING LOCAL DEV VERSION OF BlendLuxCore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed Python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precedence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore&amp;lt;/code&amp;gt; --&amp;gt; A new local version will be installed. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;lt;/code&amp;gt; --&amp;gt; A local version was previously installed and is used again. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version:&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Specified version already installed.&amp;lt;/code&amp;gt; --&amp;gt; A PyPi version was previously installed and is used again.&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utility shell script for launching Blender ==&lt;br /&gt;
&lt;br /&gt;
The BlendLuxCore repository contains a shell script, called &amp;lt;code&amp;gt;blendev&amp;lt;/code&amp;gt; (short for blender-development), located inside the &amp;lt;code&amp;gt;debug-helpers&amp;lt;/code&amp;gt; subdirectory.&lt;br /&gt;
The purpose of this script is to easily launch Blender and switch between multiple versions of Blender, a regularly installed version of BlendLuxCore and pyluxcore, local development code of BlendLuxCore, and locally compiled versions of pyluxcore.&lt;br /&gt;
At the time of writing, this script is available only for linux/bash development.&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;code&amp;gt;Readme.md&amp;lt;/code&amp;gt; supplied alongside the script, and its internal help output &amp;lt;code&amp;gt;blendev -h&amp;lt;/code&amp;gt; for detailed instructions on how to use it.&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2407</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2407"/>
		<updated>2025-10-07T17:56:07Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Goal and audience */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
* Use cases with non-standard requirements, e.g. the need to perform an offline installation.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
&lt;br /&gt;
These methods will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path folder containing the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, and BlendLuxCore has already been installed using the normal installation method, set &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt; to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
For clarification, set this folder like you would set the systems &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;PYTHONPATH&amp;lt;/code&amp;gt; variable, i.e. so that Python can &amp;lt;code&amp;gt;import BlendLuxCore&amp;lt;/code&amp;gt; from this location!&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all Python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
As a verification of this working correctly, the console output of Blender at startup will show the following line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] USING LOCAL DEV VERSION OF BlendLuxCore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed Python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precedence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore&amp;lt;/code&amp;gt; --&amp;gt; A new local version will be installed. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;lt;/code&amp;gt; --&amp;gt; A local version was previously installed and is used again. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version:&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Specified version already installed.&amp;lt;/code&amp;gt; --&amp;gt; A PyPi version was previously installed and is used again.&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utility shell script for launching Blender ==&lt;br /&gt;
&lt;br /&gt;
The BlendLuxCore repository contains a shell script, called &amp;lt;code&amp;gt;blendev&amp;lt;/code&amp;gt; (short for blender-development), located inside the &amp;lt;code&amp;gt;debug-helpers&amp;lt;/code&amp;gt; subdirectory.&lt;br /&gt;
The purpose of this script is to easily launch Blender and switch between multiple versions of Blender, a regularly installed version of BlendLuxCore and pyluxcore, local development code of BlendLuxCore, and locally compiled versions of pyluxcore.&lt;br /&gt;
At the time of writing, this script is available only for linux/bash development.&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;code&amp;gt;Readme.md&amp;lt;/code&amp;gt; supplied alongside the script, and its internal help output &amp;lt;code&amp;gt;blendev -h&amp;lt;/code&amp;gt; for detailed instructions on how to use it.&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2406</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2406"/>
		<updated>2025-10-07T17:54:55Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: Add note about v2.11 WIP content&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This article is work in progress for the development of BlendLuxCore v2.11. Instructions for v2.10 can be found in the article [[Developing and debugging BlendLuxCore v2.10]] &amp;lt;/b&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
&lt;br /&gt;
These methods will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path folder containing the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, and BlendLuxCore has already been installed using the normal installation method, set &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt; to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
For clarification, set this folder like you would set the systems &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;PYTHONPATH&amp;lt;/code&amp;gt; variable, i.e. so that Python can &amp;lt;code&amp;gt;import BlendLuxCore&amp;lt;/code&amp;gt; from this location!&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all Python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
As a verification of this working correctly, the console output of Blender at startup will show the following line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] USING LOCAL DEV VERSION OF BlendLuxCore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed Python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precedence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore&amp;lt;/code&amp;gt; --&amp;gt; A new local version will be installed. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;lt;/code&amp;gt; --&amp;gt; A local version was previously installed and is used again. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version:&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Specified version already installed.&amp;lt;/code&amp;gt; --&amp;gt; A PyPi version was previously installed and is used again.&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utility shell script for launching Blender ==&lt;br /&gt;
&lt;br /&gt;
The BlendLuxCore repository contains a shell script, called &amp;lt;code&amp;gt;blendev&amp;lt;/code&amp;gt; (short for blender-development), located inside the &amp;lt;code&amp;gt;debug-helpers&amp;lt;/code&amp;gt; subdirectory.&lt;br /&gt;
The purpose of this script is to easily launch Blender and switch between multiple versions of Blender, a regularly installed version of BlendLuxCore and pyluxcore, local development code of BlendLuxCore, and locally compiled versions of pyluxcore.&lt;br /&gt;
At the time of writing, this script is available only for linux/bash development.&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;code&amp;gt;Readme.md&amp;lt;/code&amp;gt; supplied alongside the script, and its internal help output &amp;lt;code&amp;gt;blendev -h&amp;lt;/code&amp;gt; for detailed instructions on how to use it.&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore_v2.10&amp;diff=2405</id>
		<title>Developing and debugging BlendLuxCore v2.10</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore_v2.10&amp;diff=2405"/>
		<updated>2025-10-07T17:53:05Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: Add note about deprecation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This page is documenting the development process used in v2.10.x of BlendLuxCore. The content is no longer under active development. See the main article [[Developing and debugging BlendLuxCore]] for the latest instructions.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
&lt;br /&gt;
These methods will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path folder containing the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, and BlendLuxCore has already been installed using the normal installation method, set &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt; to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
For clarification, set this folder like you would set the systems &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;PYTHONPATH&amp;lt;/code&amp;gt; variable, i.e. so that Python can &amp;lt;code&amp;gt;import BlendLuxCore&amp;lt;/code&amp;gt; from this location!&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all Python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
As a verification of this working correctly, the console output of Blender at startup will show the following line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] USING LOCAL DEV VERSION OF BlendLuxCore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed Python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precedence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore&amp;lt;/code&amp;gt; --&amp;gt; A new local version will be installed. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;lt;/code&amp;gt; --&amp;gt; A local version was previously installed and is used again. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version:&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Specified version already installed.&amp;lt;/code&amp;gt; --&amp;gt; A PyPi version was previously installed and is used again.&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utility shell script for launching Blender ==&lt;br /&gt;
&lt;br /&gt;
The BlendLuxCore repository contains a shell script, called &amp;lt;code&amp;gt;blendev&amp;lt;/code&amp;gt; (short for blender-development), located inside the &amp;lt;code&amp;gt;debug-helpers&amp;lt;/code&amp;gt; subdirectory.&lt;br /&gt;
The purpose of this script is to easily launch Blender and switch between multiple versions of Blender, a regularly installed version of BlendLuxCore and pyluxcore, local development code of BlendLuxCore, and locally compiled versions of pyluxcore.&lt;br /&gt;
At the time of writing, this script is available only for linux/bash development.&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;code&amp;gt;Readme.md&amp;lt;/code&amp;gt; supplied alongside the script, and its internal help output &amp;lt;code&amp;gt;blendev -h&amp;lt;/code&amp;gt; for detailed instructions on how to use it.&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore_v2.10&amp;diff=2404</id>
		<title>Developing and debugging BlendLuxCore v2.10</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore_v2.10&amp;diff=2404"/>
		<updated>2025-10-07T17:45:53Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: Created page with &amp;quot;= Introduction =  == Goal and audience == This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&amp;#039;s possible to test and debug it.&amp;lt;br&amp;gt; The targeted audience encompasses: * BlendLuxCore development contributors * BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature. * LuxCore developers who want to use Blender as a tool to test changes to the core eng...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
&lt;br /&gt;
These methods will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path folder containing the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, and BlendLuxCore has already been installed using the normal installation method, set &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt; to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
For clarification, set this folder like you would set the systems &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;PYTHONPATH&amp;lt;/code&amp;gt; variable, i.e. so that Python can &amp;lt;code&amp;gt;import BlendLuxCore&amp;lt;/code&amp;gt; from this location!&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all Python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
As a verification of this working correctly, the console output of Blender at startup will show the following line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] USING LOCAL DEV VERSION OF BlendLuxCore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed Python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precedence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed Python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore&amp;lt;/code&amp;gt; --&amp;gt; A new local version will be installed. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;lt;/code&amp;gt; --&amp;gt; A local version was previously installed and is used again. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version:&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Specified version already installed.&amp;lt;/code&amp;gt; --&amp;gt; A PyPi version was previously installed and is used again.&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utility shell script for launching Blender ==&lt;br /&gt;
&lt;br /&gt;
The BlendLuxCore repository contains a shell script, called &amp;lt;code&amp;gt;blendev&amp;lt;/code&amp;gt; (short for blender-development), located inside the &amp;lt;code&amp;gt;debug-helpers&amp;lt;/code&amp;gt; subdirectory.&lt;br /&gt;
The purpose of this script is to easily launch Blender and switch between multiple versions of Blender, a regularly installed version of BlendLuxCore and pyluxcore, local development code of BlendLuxCore, and locally compiled versions of pyluxcore.&lt;br /&gt;
At the time of writing, this script is available only for linux/bash development.&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;code&amp;gt;Readme.md&amp;lt;/code&amp;gt; supplied alongside the script, and its internal help output &amp;lt;code&amp;gt;blendev -h&amp;lt;/code&amp;gt; for detailed instructions on how to use it.&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2389</id>
		<title>LuxCoreRender Release Notes v2.10</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2389"/>
		<updated>2025-07-25T08:36:55Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Bugfix release v2.10.1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
=Bugfix release v2.10.1=&lt;br /&gt;
&lt;br /&gt;
===LuxCore===&lt;br /&gt;
* Fixed a bug in luxcoreui (crash when loading a new .cfg file)&lt;br /&gt;
* Pin nvrtc dependency of pyluxcore to a specific version&lt;br /&gt;
&lt;br /&gt;
===BlendLuxCore===&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed: [https://projects.blender.org/blender/blender/issues/140488 Blender Issue Tracker]&lt;br /&gt;
* Added a linux development shell script (optional utility for developers, [https://wiki.luxcorerender.org/Developing_and_debugging_BlendLuxCore#Utility_shell_script_for_launching_Blender see here])&lt;br /&gt;
* Viewport: Limit values in extremely overexposed areas, previously causing these areas to appear black&lt;br /&gt;
&lt;br /&gt;
=LuxCore=&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
&lt;br /&gt;
* New, multiplatform dependency manager: LuxCoreDeps. The new dep manager is based on Conan, an open source software which gives access to a database of thousands of build recipes, maintained up-to-date both by a company (JFrog) and a dynamic community. The deps are now built from sources, for a better control of build settings, binary compatibility etc.&lt;br /&gt;
&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
&lt;br /&gt;
* Buildability restored for all previous platforms: Linux, Windows, MacOS Intel&lt;br /&gt;
&lt;br /&gt;
* Buildability added MacOS ARM platform.&lt;br /&gt;
&lt;br /&gt;
* LuxCoreRender delivered  in the form of Python wheels, published on PyPi.&lt;br /&gt;
&lt;br /&gt;
* Automation (check, build, publish...) rewritten in Github Actions&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
&lt;br /&gt;
* LuxCore is now buildable again, on all previous platforms (Linux, Windows, MacOS Intel) + one (MacOS ARM).&lt;br /&gt;
* Crash fixed on tile path&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
&lt;br /&gt;
= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
* Compatibility for Blender 4.2 and 4.3&lt;br /&gt;
* Partial compatibility for Blender 4.4 (not a release goal)&lt;br /&gt;
* Moved from Blenders addon system to the new extension system&lt;br /&gt;
* BlendLuxCore no longer bundles LuxCore binaries, platform specific binaries now distributed via PyPi&lt;br /&gt;
* Changed build pipeline from Azure to GitHub CI/CD&lt;br /&gt;
* Add square-root option to math node (alias to power 0.5)&lt;br /&gt;
* Add a setting to suppress LuxCore console log output&lt;br /&gt;
* Glass material now accepts IOR &amp;lt; 1&lt;br /&gt;
* Materials can now be individually excluded from material override&lt;br /&gt;
* BlendLuxCore specific menus are marked with an icon&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
* Motion blur support for instances&lt;br /&gt;
* Improve custom normals export time by utilizing mesh.loops.foreach_get()&lt;br /&gt;
* LOL: Changed data access to adapt to new webhosting requirements&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
* Crashes are observed on macOS with Blender 4.2 and Blender 4.3. Related to window resizing and render completion. Unknown if Blender specific or also happening in standalone.&lt;br /&gt;
* Motion blur does not seem to work on &amp;quot;deeper iterations&amp;quot;, e.g. copying an instanced object&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2388</id>
		<title>LuxCoreRender Release Notes v2.10</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2388"/>
		<updated>2025-07-23T15:21:37Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Bugfix release v2.10.1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
=Bugfix release v2.10.1=&lt;br /&gt;
&lt;br /&gt;
===LuxCore===&lt;br /&gt;
* Fixed a bug in luxcoreui (crash when loading a new .cfg file)&lt;br /&gt;
* Pin nvrtc dependency of pyluxcore to a specific version&lt;br /&gt;
&lt;br /&gt;
===BlendLuxCore===&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed: [https://projects.blender.org/blender/blender/issues/140488 Blender Issue Tracker]&lt;br /&gt;
* Added a linux development shell script (optional utility for developers)&lt;br /&gt;
* Viewport: Limit values in extremely overexposed areas, previously causing these areas to appear black&lt;br /&gt;
&lt;br /&gt;
=LuxCore=&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
&lt;br /&gt;
* New, multiplatform dependency manager: LuxCoreDeps. The new dep manager is based on Conan, an open source software which gives access to a database of thousands of build recipes, maintained up-to-date both by a company (JFrog) and a dynamic community. The deps are now built from sources, for a better control of build settings, binary compatibility etc.&lt;br /&gt;
&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
&lt;br /&gt;
* Buildability restored for all previous platforms: Linux, Windows, MacOS Intel&lt;br /&gt;
&lt;br /&gt;
* Buildability added MacOS ARM platform.&lt;br /&gt;
&lt;br /&gt;
* LuxCoreRender delivered  in the form of Python wheels, published on PyPi.&lt;br /&gt;
&lt;br /&gt;
* Automation (check, build, publish...) rewritten in Github Actions&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
&lt;br /&gt;
* LuxCore is now buildable again, on all previous platforms (Linux, Windows, MacOS Intel) + one (MacOS ARM).&lt;br /&gt;
* Crash fixed on tile path&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
&lt;br /&gt;
= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
* Compatibility for Blender 4.2 and 4.3&lt;br /&gt;
* Partial compatibility for Blender 4.4 (not a release goal)&lt;br /&gt;
* Moved from Blenders addon system to the new extension system&lt;br /&gt;
* BlendLuxCore no longer bundles LuxCore binaries, platform specific binaries now distributed via PyPi&lt;br /&gt;
* Changed build pipeline from Azure to GitHub CI/CD&lt;br /&gt;
* Add square-root option to math node (alias to power 0.5)&lt;br /&gt;
* Add a setting to suppress LuxCore console log output&lt;br /&gt;
* Glass material now accepts IOR &amp;lt; 1&lt;br /&gt;
* Materials can now be individually excluded from material override&lt;br /&gt;
* BlendLuxCore specific menus are marked with an icon&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
* Motion blur support for instances&lt;br /&gt;
* Improve custom normals export time by utilizing mesh.loops.foreach_get()&lt;br /&gt;
* LOL: Changed data access to adapt to new webhosting requirements&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
* Crashes are observed on macOS with Blender 4.2 and Blender 4.3. Related to window resizing and render completion. Unknown if Blender specific or also happening in standalone.&lt;br /&gt;
* Motion blur does not seem to work on &amp;quot;deeper iterations&amp;quot;, e.g. copying an instanced object&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2387</id>
		<title>LuxCoreRender Release Notes v2.10</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2387"/>
		<updated>2025-07-23T15:04:01Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Bugfix release v2.10.1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
=Bugfix release v2.10.1=&lt;br /&gt;
&lt;br /&gt;
===LuxCore===&lt;br /&gt;
* Fixed a bug in luxcoreui (crash when loading a new .cfg file)&lt;br /&gt;
* Pin nvrtc dependency of pyluxcore to a specific version&lt;br /&gt;
&lt;br /&gt;
===BlendLuxCore===&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed&lt;br /&gt;
* Added a linux development shell script (optional utility for developers)&lt;br /&gt;
* Viewport: Limit values in extremely overexposed areas, previously causing these areas to appear black&lt;br /&gt;
&lt;br /&gt;
=LuxCore=&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
&lt;br /&gt;
* New, multiplatform dependency manager: LuxCoreDeps. The new dep manager is based on Conan, an open source software which gives access to a database of thousands of build recipes, maintained up-to-date both by a company (JFrog) and a dynamic community. The deps are now built from sources, for a better control of build settings, binary compatibility etc.&lt;br /&gt;
&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
&lt;br /&gt;
* Buildability restored for all previous platforms: Linux, Windows, MacOS Intel&lt;br /&gt;
&lt;br /&gt;
* Buildability added MacOS ARM platform.&lt;br /&gt;
&lt;br /&gt;
* LuxCoreRender delivered  in the form of Python wheels, published on PyPi.&lt;br /&gt;
&lt;br /&gt;
* Automation (check, build, publish...) rewritten in Github Actions&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
&lt;br /&gt;
* LuxCore is now buildable again, on all previous platforms (Linux, Windows, MacOS Intel) + one (MacOS ARM).&lt;br /&gt;
* Crash fixed on tile path&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
&lt;br /&gt;
= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
* Compatibility for Blender 4.2 and 4.3&lt;br /&gt;
* Partial compatibility for Blender 4.4 (not a release goal)&lt;br /&gt;
* Moved from Blenders addon system to the new extension system&lt;br /&gt;
* BlendLuxCore no longer bundles LuxCore binaries, platform specific binaries now distributed via PyPi&lt;br /&gt;
* Changed build pipeline from Azure to GitHub CI/CD&lt;br /&gt;
* Add square-root option to math node (alias to power 0.5)&lt;br /&gt;
* Add a setting to suppress LuxCore console log output&lt;br /&gt;
* Glass material now accepts IOR &amp;lt; 1&lt;br /&gt;
* Materials can now be individually excluded from material override&lt;br /&gt;
* BlendLuxCore specific menus are marked with an icon&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
* Motion blur support for instances&lt;br /&gt;
* Improve custom normals export time by utilizing mesh.loops.foreach_get()&lt;br /&gt;
* LOL: Changed data access to adapt to new webhosting requirements&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
* Crashes are observed on macOS with Blender 4.2 and Blender 4.3. Related to window resizing and render completion. Unknown if Blender specific or also happening in standalone.&lt;br /&gt;
* Motion blur does not seem to work on &amp;quot;deeper iterations&amp;quot;, e.g. copying an instanced object&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=BlendLuxCore_FAQ&amp;diff=2386</id>
		<title>BlendLuxCore FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=BlendLuxCore_FAQ&amp;diff=2386"/>
		<updated>2025-07-21T08:33:11Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: Add &amp;quot;could not import pyluxcore&amp;quot; section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Frequently Asked Questions =&lt;br /&gt;
&lt;br /&gt;
=== When trying to use CUDA/OptiX, I get the error message: &amp;lt;code&amp;gt;RUNTIME ERROR: CUDA driver API error CUDA_ERROR_UNSUPPORTED_PTX_VERSION (code: 222, file:.../cuda.cpp, line: xxx): the provided PTX was compiled with an unsupported toolchain.&amp;lt;/code&amp;gt;  ===&lt;br /&gt;
&lt;br /&gt;
Your nvidia driver is too old compared to nvidia runtime compiler used by LuxCore, so the code compiled by LuxCore runtime compiler cannot be run by your driver.&lt;br /&gt;
&lt;br /&gt;
Please upgrade your nvidia driver to latest version, or at least to a suitable version with regard to runtime compiler: https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#id7&lt;br /&gt;
&lt;br /&gt;
=== After installation, I get the error message &amp;quot;could not import pyluxcore&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;pyluxcore&amp;quot; is the binary core library. BlendLuxCore downloads and installs the correct version for your system during installation. This error indicates something went wrong with this installation. Possible solutions are:&lt;br /&gt;
* Check that online access is allowed in the Blender preferences.&lt;br /&gt;
* Download may be restricted in company networks. You can try an [https://wiki.luxcorerender.org/BlendLuxCore_Installation#Offline_Installation offline-installation].&lt;br /&gt;
&lt;br /&gt;
=== I can not enable the BlendLuxCore addon, it shows errors ===&lt;br /&gt;
&lt;br /&gt;
Most problems in this area stem from broken graphics driver installations. Try to re-install or update your graphics driver.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;For Windows users:&#039;&#039;&#039;&lt;br /&gt;
* Make sure that you have installed the [https://www.microsoft.com/en-US/download/details.aspx?id=40784 Visual C++ Redistributable Packages for Visual Studio 2013]&lt;br /&gt;
* If you use v2.1alpha0 or later, you will also need:&lt;br /&gt;
** [https://aka.ms/vs/15/release/vc_redist.x64.exe Microsoft Visual C++ Redistributable for Visual Studio 2017]&lt;br /&gt;
** [https://software.intel.com/sites/default/files/managed/59/aa/ww_icl_redist_msi_2018.3.210.zip Intel C++ redistributable]&lt;br /&gt;
&lt;br /&gt;
If this does not solve the problem, browse the [https://github.com/LuxCoreRender/BlendLuxCore/issues?q=is%3Aissue+label%3Ainstallation installation issues] in the bug tracker to check if your error message was already reported. &lt;br /&gt;
If it was not reported yet, open a new issue and copy the error message from the Blender console (on Windows, click Window -&amp;gt; Toggle System Console in Blender&#039;s menu. On Linux, start Blender from a terminal and try to enable the addon, then copy the error message from the terminal).&lt;br /&gt;
&lt;br /&gt;
See the [[BlendLuxCore_Installation | installation page]] for information on how to install, update and remove the BlendLuxCore addon.&lt;br /&gt;
&lt;br /&gt;
=== Is there something like Cycles&#039; Layer Weight/Fresnel/Facing node in LuxCore? ===&lt;br /&gt;
&lt;br /&gt;
No, in LuxCore there is no direct equivalent to this node, because it would not work with the many algorithms in LuxCore that trace rays from lights (instead of from the camera), like the bidirectional engine, light tracing mode, or the PhotonGI cache.&lt;br /&gt;
&lt;br /&gt;
Of course, all materials in LuxCore are physically based and have realistic fresnel effects built-in.&lt;br /&gt;
&lt;br /&gt;
You can achieve a similar effect with the dot product node, but it will work only for one viewpoint:&lt;br /&gt;
&lt;br /&gt;
[[File:Layer_weight_for_one_direction.PNG | thumb | 400px | center]]&lt;br /&gt;
&lt;br /&gt;
=== Can Cycles materials be used in BlendLuxCore? ===&lt;br /&gt;
&lt;br /&gt;
To an extent, yes. Many common Cycles shader nodes can be used in BlendLuxCore:&lt;br /&gt;
&lt;br /&gt;
* You can enable this individually for each material with the &amp;quot;Use Cycles Nodes&amp;quot; option in the material properties.&lt;br /&gt;
* You can also enable it for the whole scene at once with the &amp;quot;Use Cycles Settings&amp;quot; button in the render properties. This will configure all materials, lights and the world to use Cycles settings&lt;br /&gt;
&lt;br /&gt;
Not all Cycles nodes and settings are supported. Here is an overview: https://github.com/LuxCoreRender/BlendLuxCore/issues/272&lt;br /&gt;
&lt;br /&gt;
=== Can 2D/3D mapping be driven by textures in LuxCore? ===&lt;br /&gt;
&lt;br /&gt;
In general, no, because it would lead to much worse performance on GPUs.&lt;br /&gt;
&lt;br /&gt;
However, if you only need to drive the translation part of a texture mapping, since LuxCore v2.5 you can use the distort texture for this purpose:&lt;br /&gt;
&lt;br /&gt;
[[File:Distort_texture.PNG | thumb | 400px | center | A checker texture (left) is distorted by a clouds texture (right). The result can be seen in the center]]&lt;br /&gt;
&lt;br /&gt;
Texturing of rotation and scale is not yet possible.&lt;br /&gt;
&lt;br /&gt;
=== What can be done against fireflies/hotpixels? ===&lt;br /&gt;
&lt;br /&gt;
Sometimes, pixels appear that are much brighter than the surrounding pixels. Sometimes they are singular, sometimes clumped up. The underlying reason are light paths that are correct, but very hard to find with the current rendering algorithms, and thus they take much longer to render until noise-free than all other light paths in the image.&lt;br /&gt;
&lt;br /&gt;
There are multiple ways to approach this problem:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Try another rendering algorithm&#039;&#039;&#039;, it might be able to find the firefly-causing light paths much easier than the one you currently use. For example, try going to the render properties, open the Light Paths panel and enable &amp;quot;Light Tracing&amp;quot;, or try the [[PhotonGI | PhotonGI caustic cache]], or try using the bidirectional engine.&lt;br /&gt;
* You can &#039;&#039;&#039;clamp the brightness of all light paths&#039;&#039;&#039; to a maximum value, in the render properties, Light Paths panel, &amp;quot;Clamping&amp;quot; setting. BlendLuxCore can auto-detect a value for this setting that is in the right ballpark for your scene if you render once without clamping enabled, but often this value will not be the best, so you will need a bit of trial-and-error to find a good value. Note that the clamping value depends on the lighting in your scene, so there is no one universally good clamping value, and you might need to adjust it if you add a new light source to your scene that is brighter than the others. Using a clamping value that is too low will result in a low-contrast, washed-out image, while a too high value will leave fireflies unaffected.&lt;br /&gt;
* Try to find out which lights or materials are responsible for the fireflies. There might be small, hard-to-find light sources that are causing them. Or a specular material is reflecting such a light source. If you are willing to alter the look of the scene, you can make such a light source more visible/larger, or lower the specularity of such a material. You can also make some light sources invisble to indirect light rays, thus eliminating fireflies (light properties, &amp;quot;Visibility&amp;quot; panel). This can be a good idea for the sun, for example, if your scene contains lots of specular materials.&lt;br /&gt;
&lt;br /&gt;
=== Why is my HDRI environment black and not showing up? ===&lt;br /&gt;
You probably have other very bright light sources in the scene, for example a sun or a sky lamp.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; raise the gain value of the area or HDRI light source that is black. The gain value might need to be very high, e.g. 100000.&lt;br /&gt;
&lt;br /&gt;
=== Why is my area lamp black? ===&lt;br /&gt;
See [[#&amp;quot;Why is my HDRI environment black and not showing up?&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
=== When I change the brightness of my lamp, nothing happens ===&lt;br /&gt;
&lt;br /&gt;
You are probably using an automatic tonemapper which adjusts itself to the changed brightness, making it seem like the brightness did not change.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Use a non-automatic tonemapper (camera settings -&amp;gt; [[ImagePipeline]]).&lt;br /&gt;
&amp;lt;!-- TODO describe how to switch to one, and/or add a link to the tonemapping settings page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== When I make one of my lights brighter, all the other lights get darker (or vice versa) ===&lt;br /&gt;
&lt;br /&gt;
Similar to [[#&amp;quot;When I change the brightness of my lamp, nothing happens&amp;quot;]].&amp;lt;br&amp;gt;&lt;br /&gt;
You are using an automatic tonemapper which tries to keep the image at the same brightness, making it seem like the brightness of the lamps changed.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Use a non-automatic tonemapper (camera settings -&amp;gt; [[ImagePipeline]]).&lt;br /&gt;
&amp;lt;!-- TODO describe how to switch to one, and/or add a link to the tonemapping settings page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== A material/object appears to be flickering when I move the camera and shows artifacts in final render ===&lt;br /&gt;
&lt;br /&gt;
This effect is called [https://en.wikipedia.org/wiki/Z-fighting Z-fighting] and is usually caused by mesh faces being exactly on top of each other, e.g. two planes on the same world coordinates.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; &lt;br /&gt;
* Check if there are two objects on top of each other, e.g. because you duplicated the object, cancelled the transform and forgot about it.&lt;br /&gt;
* Check if the mesh has duplicate faces. Enter edit mode and use the Remove Doubles button in the Tools panel, which might solve the problem in some cases.&lt;br /&gt;
Duplicate faces are often caused by extruding, cancelling the transform and forgetting about it.&lt;br /&gt;
&lt;br /&gt;
=== There are dark triangular artifacts on my model, and I already checked for duplicate faces ===&lt;br /&gt;
&lt;br /&gt;
Floating point numbers have a limited precision. When objects are very large (kilometers) or very small (micrometers), these precision issues become visible. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; &lt;br /&gt;
* If the object has a &amp;quot;normal&amp;quot; size (something like 1 cm to 1 km), but was scaled up/down by a huge amount, try to apply the scale (Ctrl+A -&amp;gt; Scale). For example, this often happens with imported CAD models.&lt;br /&gt;
* If applying the scale did not help and your object has to be very small or large, consider to bring it into the normal scale mentioned above, and pretend that it has a larger/smaller size. For example, if you make a model of the solar system, you will just have to make the earth something like 12.742 m in diameter, and pretend that 1 m of your model is equal to 10^6 m. &lt;br /&gt;
* If both options above are not usable in your case, you can raise the minimum epsilon that LuxCore uses. This setting can be found in the scene properties, Units panel, after clicking &amp;quot;Advanced LuxCore Settings&amp;quot;. By default, the minimum epsilon is 0.00001. Try to raise it to 0.0001 (multiply by 10) for a start and see if the artifacts disappear. Do not set this value higher than necessary, because it will cause all sorts of hard-to-track problems. Be especially careful if you are rendering a scene with volumes.&lt;br /&gt;
&lt;br /&gt;
=== An object that I set to &amp;quot;smooth shading&amp;quot; looks like it is shaded flat in shadow penumbras ===&lt;br /&gt;
&lt;br /&gt;
This artifact is called &amp;quot;terminator problem&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solution:&#039;&#039;&#039; Unfortunately there is no real solution. You can only try to mitigate the effect by subdividing the geometry further and/or increase the size of the light source that is causing the problem.&lt;br /&gt;
&lt;br /&gt;
=== How do I setup liquid in a glass container correctly? ===&lt;br /&gt;
&lt;br /&gt;
This forum thread shows an example: https://forums.luxcorerender.org/viewtopic.php?f=4&amp;amp;t=728#p7550&lt;br /&gt;
&lt;br /&gt;
=== Can I export my scene in LuxCore format to render it in LuxCore standalone? ===&lt;br /&gt;
&lt;br /&gt;
Yes. In the render properties, LuxCore Tools panel, enable &amp;quot;FileSaver&amp;quot;. Then render with F12.&lt;br /&gt;
&lt;br /&gt;
=== How can I compile kernels from the command line? ===&lt;br /&gt;
Here is a way to compile kernels from the command line (out of Blender), for the latest version of pyluxcore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install pyluxcore --upgrade&lt;br /&gt;
python -c &amp;quot;import pyluxcore; pyluxcore.Init(); pyluxcore.KernelCacheFill()&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Getting Help = &lt;br /&gt;
&lt;br /&gt;
If none of the above entries helped to solve your problem, consider asking in the [https://forums.luxcorerender.org/viewforum.php?f=4 user support forum] or [https://forums.luxcorerender.org/viewtopic.php?f=4&amp;amp;t=2 filing a bug report].&lt;br /&gt;
&lt;br /&gt;
[[Category:BlendLuxCore]]&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2383</id>
		<title>LuxCoreRender Release Notes v2.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2383"/>
		<updated>2025-07-02T10:19:43Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* BlendLuxCore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
* Fresnel texture: &amp;quot;custom n,k&amp;quot; now accepts values &amp;gt; 1&lt;br /&gt;
* Change installation mechanism to use bpy.utils.extension_path_user() &amp;lt;b&amp;gt;INCOMPLETE&amp;lt;/b&amp;gt;&lt;br /&gt;
* Include &amp;quot;OptiX&amp;quot; in addon settings label to avoid user questions about compatibility&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed&lt;br /&gt;
* Added a linux development shell script (optional utility for developers)&lt;br /&gt;
* Remove löeftover code from the Addons system that is no longer used with the Extensions system.&lt;br /&gt;
&lt;br /&gt;
= LuxCore =&lt;br /&gt;
* Reduction of Boost footprint, replaced with standard equivalents available in C++20.&lt;br /&gt;
* For the need of previous point: replacement of apple-clang by clang 20 on MacOS platforms&lt;br /&gt;
* New target &#039;wheel-test&#039; that builds a testing wheel in local build (&amp;lt;code&amp;gt;make wheel-test&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Requirement checking in &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;&lt;br /&gt;
* luxrays: rename GetConfigDir as GetCacheDir and use XDG_CACHE_HOME according to specifications (@illwieckz)&lt;br /&gt;
* Subdivision: add an &amp;quot;adaptive&amp;quot; setting to select between adaptive refinement and uniform refinement&lt;br /&gt;
&lt;br /&gt;
= LuxCoreDeps =&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
* Removed a workaround introduced in previous version (we used to build a fake wheel to get containerization)&lt;br /&gt;
* OpenMP - MacOS: Use of homebrew OpenMP (up-to-date, compatible with clang 20) rather than Conan llvm-openmp (version 17...). As a consequence, for MacOS Intel, a version &amp;gt;= 13.0 is required.&lt;br /&gt;
* Opensubdiv: tbb activation. As a consequence, for MacOS Arm, a version &amp;gt;= 14.2 is required.&lt;br /&gt;
* OpenImageIO: deactivation of several image formats that seem unrelated to or unsupported by LuxCore: freetype, hdf5, ffmpeg, libheif, ptex, opencv, webp. This removal spares both compilation time and build result size. Those formats are reactivable, in case they were missing.&lt;br /&gt;
* OpenImageIO: To the contrary, activation of tbb option.&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2382</id>
		<title>LuxCoreRender Release Notes v2.10</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2382"/>
		<updated>2025-07-02T10:15:26Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: Added section for bugfix release v2.10.1&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
=Bugfix release v2.10.1=&lt;br /&gt;
&lt;br /&gt;
===LuxCore===&lt;br /&gt;
* Fixed a bug in luxcoreui (crash when loading a new .cfg file)&lt;br /&gt;
* Pin nvrtc dependency of pyluxcore to a specific version&lt;br /&gt;
&lt;br /&gt;
===BlendLuxCore===&lt;br /&gt;
* Added a workaround for a Blender bug that throws an error when Blender is closed&lt;br /&gt;
* Added a linux development shell script (optional utility for developers)&lt;br /&gt;
&lt;br /&gt;
=LuxCore=&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
&lt;br /&gt;
* New, multiplatform dependency manager: LuxCoreDeps. The new dep manager is based on Conan, an open source software which gives access to a database of thousands of build recipes, maintained up-to-date both by a company (JFrog) and a dynamic community. The deps are now built from sources, for a better control of build settings, binary compatibility etc.&lt;br /&gt;
&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
&lt;br /&gt;
* Buildability restored for all previous platforms: Linux, Windows, MacOS Intel&lt;br /&gt;
&lt;br /&gt;
* Buildability added MacOS ARM platform.&lt;br /&gt;
&lt;br /&gt;
* LuxCoreRender delivered  in the form of Python wheels, published on PyPi.&lt;br /&gt;
&lt;br /&gt;
* Automation (check, build, publish...) rewritten in Github Actions&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
&lt;br /&gt;
* LuxCore is now buildable again, on all previous platforms (Linux, Windows, MacOS Intel) + one (MacOS ARM).&lt;br /&gt;
* Crash fixed on tile path&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
&lt;br /&gt;
= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
* Compatibility for Blender 4.2 and 4.3&lt;br /&gt;
* Partial compatibility for Blender 4.4 (not a release goal)&lt;br /&gt;
* Moved from Blenders addon system to the new extension system&lt;br /&gt;
* BlendLuxCore no longer bundles LuxCore binaries, platform specific binaries now distributed via PyPi&lt;br /&gt;
* Changed build pipeline from Azure to GitHub CI/CD&lt;br /&gt;
* Add square-root option to math node (alias to power 0.5)&lt;br /&gt;
* Add a setting to suppress LuxCore console log output&lt;br /&gt;
* Glass material now accepts IOR &amp;lt; 1&lt;br /&gt;
* Materials can now be individually excluded from material override&lt;br /&gt;
* BlendLuxCore specific menus are marked with an icon&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
* Motion blur support for instances&lt;br /&gt;
* Improve custom normals export time by utilizing mesh.loops.foreach_get()&lt;br /&gt;
* LOL: Changed data access to adapt to new webhosting requirements&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
* Crashes are observed on macOS with Blender 4.2 and Blender 4.3. Related to window resizing and render completion. Unknown if Blender specific or also happening in standalone.&lt;br /&gt;
* Motion blur does not seem to work on &amp;quot;deeper iterations&amp;quot;, e.g. copying an instanced object&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2379</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2379"/>
		<updated>2025-06-12T11:47:25Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Tips &amp;amp; Tricks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
&lt;br /&gt;
These methods will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, and BlendLuxCore has already been installed using the normal installation method, set BLC_DEV_PATH to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
For clarification, set this folder like you would set the systems &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;PYTHONPATH&amp;lt;/code&amp;gt; variable, i.e. so that python can &amp;lt;code&amp;gt;import BlendLuxCore&amp;lt;/code&amp;gt; from this location!&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
As a verification of this working correctly, the console output of Blender at startup will show the following line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] USING LOCAL DEV VERSION OF BlendLuxCore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precendence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore&amp;lt;/code&amp;gt; --&amp;gt; A new local version will be installed. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;lt;/code&amp;gt; --&amp;gt; A local version was previously installed and is used again. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version:&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Specified version already installed.&amp;lt;/code&amp;gt; --&amp;gt; A PyPi version was previously installed and is used again.&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utility shell script for launching Blender ==&lt;br /&gt;
&lt;br /&gt;
The BlendLuxCore repository contains a shell script, called &amp;lt;code&amp;gt;blendev&amp;lt;/code&amp;gt; (short for blender-development), located inside the &amp;lt;code&amp;gt;debug-helpers&amp;lt;/code&amp;gt; subdirectory.&lt;br /&gt;
The purpose of this script is to easily launch Blender and switch between multiple versions of Blender, a regularly installed version of BlendLuxCore and pyluxcore, local development code of BlendLuxCore, and locally compiled versions of pyluxcore.&lt;br /&gt;
At the time of writing, this script is available only for linux/bash development.&lt;br /&gt;
&lt;br /&gt;
Please see the &amp;lt;code&amp;gt;Readme.md&amp;lt;/code&amp;gt; supplied alongside the script, and its internal help output &amp;lt;code&amp;gt;blendev -h&amp;lt;/code&amp;gt; for detailed instructions on how to use it.&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2378</id>
		<title>LuxCoreRender Wiki</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Wiki&amp;diff=2378"/>
		<updated>2025-06-12T11:35:27Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Documentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
* [[ BlendLuxCore_Installation | BlendLuxCore Installation]]&lt;br /&gt;
* [[ BlendLuxCore_FAQ | BlendLuxCore FAQ]]&lt;br /&gt;
* [[ LuxCoreRender_Tutorials | Tutorials ]]&lt;br /&gt;
* [[ LuxCoreRender_User%27s_Manual | LuxCoreRender User&#039;s Manual]]&lt;br /&gt;
* [[ :Category:BlendLuxCore | Blender Addon User&#039;s Manual ]]&lt;br /&gt;
* [[ PyLuxCoreTools | Command Line Tools ]]&lt;br /&gt;
* [[ LuxMark | LuxMark Benchmark]]&lt;br /&gt;
&lt;br /&gt;
=== Useful links ===&lt;br /&gt;
&lt;br /&gt;
* [https://luxcorerender.org/ &#039;&#039;LuxCoreRender Home Page&#039;&#039;]&lt;br /&gt;
* [https://forums.luxcorerender.org/ &#039;&#039;LuxCoreRender Forums&#039;&#039;]&lt;br /&gt;
* [[ External_Resources | External Resources ]]&lt;br /&gt;
* [[ Previous_Version | Previous Version (LuxRender) ]]&lt;br /&gt;
&lt;br /&gt;
== Developers &amp;amp; Admins ==&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [[ Building_LuxCoreRender | Building LuxCoreRender ]]&lt;br /&gt;
* [[ C++ Coding Guidelines ]]&lt;br /&gt;
* [[ Regular Maintenance Tasks ]]&lt;br /&gt;
* [[ Developing and debugging BlendLuxCore ]]&lt;br /&gt;
* [[ Compiling_LuxCore | Building LuxCoreRender (legacy) ]]&lt;br /&gt;
* [[ LuxCoreRender_Release_Notes | LuxCoreRender Release Notes ]]&lt;br /&gt;
* [[ LuxCore_API | LuxCore API ]]&lt;br /&gt;
* [[ LuxCore_API_Reference_Manual | LuxCore API Reference Manual]]&lt;br /&gt;
* [[ LuxCore_SDL_Reference_Manual | LuxCore SDL Reference Manual ]]&lt;br /&gt;
&lt;br /&gt;
=== MaxToLux Documentation ===&lt;br /&gt;
&lt;br /&gt;
* [[ MaxToLux_Plugin_Release_Notes | MaxToLux Plugin Release Notes]]&lt;br /&gt;
* [[ MaxToLux_Plugin_Reference_Manual | MaxToLux Plugin Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
=== Tutorials ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* [[ Writing_an_Imagepipeline_Plugin | How to Write an Imagepipeline Plugin ]]&lt;br /&gt;
* [[ Implementing_a_Texture | How to Implement a Texture ]]&lt;br /&gt;
&lt;br /&gt;
=== Information for Wiki Editors ===&lt;br /&gt;
&lt;br /&gt;
We had to close the wiki registration because of too many spambots.&amp;lt;br&amp;gt;&lt;br /&gt;
If you want to contribute to the wiki, please request an account in our [https://forums.luxcorerender.org/viewforum.php?f=10 general discussion forum].&lt;br /&gt;
&lt;br /&gt;
Consult the [//meta.wikimedia.org/wiki/Help:Contents User&#039;s Guide] for information on using the wiki software.&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2377</id>
		<title>LuxCoreRender Release Notes v2.11</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.11&amp;diff=2377"/>
		<updated>2025-06-10T05:44:04Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* BlendLuxCore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
* Fresnel texture: &amp;quot;custom n,k&amp;quot; now accepts values &amp;gt; 1&lt;br /&gt;
&lt;br /&gt;
= LuxCore =&lt;br /&gt;
* Reduction of Boost footprint, replaced with standard equivalents available in C++20.&lt;br /&gt;
* For the need of previous point: replacement of apple-clang by clang 20 on MacOS platforms&lt;br /&gt;
* New target &#039;wheel-test&#039; that builds a testing wheel in local build (&amp;lt;code&amp;gt;make wheel-test&amp;lt;/code&amp;gt;)&lt;br /&gt;
* Requirement checking in &amp;lt;code&amp;gt;make deps&amp;lt;/code&amp;gt;&lt;br /&gt;
* luxrays: rename GetConfigDir as GetCacheDir and use XDG_CACHE_HOME according to specifications (@illwieckz)&lt;br /&gt;
* Subdivision: add an &amp;quot;adaptive&amp;quot; setting to select between adaptive refinement and uniform refinement&lt;br /&gt;
&lt;br /&gt;
= LuxCoreDeps =&lt;br /&gt;
* Dependencies updated to latest versions&lt;br /&gt;
* Removed a workaround introduced in previous version (we used to build a fake wheel to get containerization)&lt;br /&gt;
* OpenMP - MacOS: Use of homebrew OpenMP (up-to-date, compatible with clang 20) rather than Conan llvm-openmp (version 17...). As a consequence, for MacOS Intel, a version &amp;gt;= 13.0 is required.&lt;br /&gt;
* Opensubdiv: tbb activation. As a consequence, for MacOS Arm, a version &amp;gt;= 14.2 is required.&lt;br /&gt;
* OpenImageIO: deactivation of several image formats that seem unrelated to or unsupported by LuxCore: freetype, hdf5, ffmpeg, libheif, ptex, opencv, webp. This removal spares both compilation time and build result size. Those formats are reactivable, in case they were missing.&lt;br /&gt;
* OpenImageIO: To the contrary, activation of tbb option.&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2376</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2376"/>
		<updated>2025-06-09T18:28:21Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Scenario #2: Working on pyluxcore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
&lt;br /&gt;
These methods will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, and BlendLuxCore has already been installed using the normal installation method, set BLC_DEV_PATH to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
For clarification, set this folder like you would set the systems &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;PYTHONPATH&amp;lt;/code&amp;gt; variable, i.e. so that python can &amp;lt;code&amp;gt;import BlendLuxCore&amp;lt;/code&amp;gt; from this location!&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
As a verification of this working correctly, the console output of Blender at startup will show the following line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] USING LOCAL DEV VERSION OF BlendLuxCore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precendence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
As a verification, check for the following lines in the console output of Blender at startup:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] Installing local version of pyluxcore&amp;lt;/code&amp;gt; --&amp;gt; A new local version will be installed. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;lt;/code&amp;gt; --&amp;gt; A local version was previously installed and is used again. &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] installing pyluxcore version:&amp;lt;/code&amp;gt; --&amp;gt; pyluxcore will be installed from PyPi. Replaces any previous installation.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] skipping pyluxcore installation. Specified version already installed.&amp;lt;/code&amp;gt; --&amp;gt; A PyPi version was previously installed and is used again.&lt;br /&gt;
&lt;br /&gt;
(Note: Further error messages exist but they are out of the scope of this article.)&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2375</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2375"/>
		<updated>2025-06-09T18:23:19Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Scenario #1: Working on BLC, using standard pyluxcore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
&lt;br /&gt;
These methods will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, and BlendLuxCore has already been installed using the normal installation method, set BLC_DEV_PATH to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
For clarification, set this folder like you would set the systems &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;PYTHONPATH&amp;lt;/code&amp;gt; variable, i.e. so that python can &amp;lt;code&amp;gt;import BlendLuxCore&amp;lt;/code&amp;gt; from this location!&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
As a verification of this working correctly, the console output of Blender at startup will show the following line:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;[BLC] USING LOCAL DEV VERSION OF BlendLuxCore&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precendence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2374</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2374"/>
		<updated>2025-06-09T18:20:51Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Scenario #1: Working on BLC, using standard pyluxcore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
&lt;br /&gt;
These methods will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, and BlendLuxCore has already been installed using the normal installation method, set BLC_DEV_PATH to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
For clarification, set this folder like you would set the systems &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;PYTHONPATH&amp;lt;/code&amp;gt; variable, i.e. so that python can &amp;lt;code&amp;gt;import BlendLuxCore&amp;lt;/code&amp;gt; from this location!&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precendence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2373</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2373"/>
		<updated>2025-06-09T18:17:31Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: Moving information to subsections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
&lt;br /&gt;
These methods will be explained in detail in the sections below.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, set BLC_DEV_PATH to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pack BLC, run Blender and install your packed version&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precendence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2372</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2372"/>
		<updated>2025-06-09T18:15:34Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Statement of problem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is composed of two parts:&lt;br /&gt;
* A Python module, essentially identical to the [https://github.com/LuxCoreRender/BlendLuxCore BlendLuxCore] repository.&lt;br /&gt;
* Underlying pyluxcore library, compiled from the [https://github.com/LuxCoreRender/LuxCore LuxCore] repository. Typically distributed as a Python wheel.&lt;br /&gt;
&lt;br /&gt;
The python module is distributed as a zip-file, which is installed in Blender as an extension. During the installation process, the pyluxcore-wheel is downloaded from PyPi. During subsequent startup of Blender, the python script verifies the presence of pyluxcore and an additional (time-consuming) download is not necessary.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of the python module&lt;br /&gt;
* And optionally make BLC load a development version of the pyluxcore-wheel&lt;br /&gt;
&lt;br /&gt;
The first goal can be achieved via an environment variable:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
&lt;br /&gt;
When this variable is set, all python code from the development repo will be loaded, &amp;lt;b&amp;gt;except&amp;lt;/b&amp;gt; the main &amp;lt;code&amp;gt;__init__.py&amp;lt;/code&amp;gt; file. Changes to the latter may require a full reinstallation of BlendLuxCore, depending on what was changed.&lt;br /&gt;
&lt;br /&gt;
For the second goal, two methods are available:&lt;br /&gt;
* Another environment variable, &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
* A subfolder &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; within the installed python module. A development version of the wheel can be copied into this folder.&lt;br /&gt;
Note that the presence of a file inside &amp;lt;code&amp;gt;pyluxcore_custom/&amp;lt;/code&amp;gt; will take precendence over the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable!&lt;br /&gt;
To simplify further explanations, all explanations are presented in terms of the &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
When this variable is set, BLC computes a hash of the linked wheel. This hash is compared against information stored in the file &amp;lt;code&amp;gt;pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;, located within the installed python module. If the information matches, installation is skipped. Else, if it does not match, the local pyluxcore-wheel will be installed, replacing the previous version.&lt;br /&gt;
The text file also stores information if the previous installation was from PyPi or from a local wheel. This means, when the environment variable is unset after testing, it will again be replaced with the regular version from PyPi.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, set BLC_DEV_PATH to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pack BLC, run Blender and install your packed version&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;WORK IN PROGRESS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2371</id>
		<title>Developing and debugging BlendLuxCore</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Developing_and_debugging_BlendLuxCore&amp;diff=2371"/>
		<updated>2025-06-09T17:57:27Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: /* Goal and audience */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
== Goal and audience ==&lt;br /&gt;
This document explains the approach to install a development version of BlendLuxCore (BLC) in Blender, so that it&#039;s possible to test and debug it.&amp;lt;br&amp;gt;&lt;br /&gt;
The targeted audience encompasses:&lt;br /&gt;
* BlendLuxCore development contributors&lt;br /&gt;
* BlendLuxCore advanced users/alpha testers who have been provided a dev version of BLC, in order to test a new feature.&lt;br /&gt;
* LuxCore developers who want to use Blender as a tool to test changes to the core engine.&lt;br /&gt;
&lt;br /&gt;
== Statement of problem ==&lt;br /&gt;
BlendLuxCore (BLC) is in two parts:&lt;br /&gt;
* Python module&lt;br /&gt;
* Underlying pyluxcore library, brought by a Python wheel&lt;br /&gt;
&lt;br /&gt;
In normal life, Blender loads the BLC Python module that has been regularly installed, which in turn loads the wheel from PyPi.&lt;br /&gt;
&lt;br /&gt;
However, when developing BLC, we typically need to:&lt;br /&gt;
* Make Blender load a development version of BLC&lt;br /&gt;
* And optionally make BLC load a development version of the wheel&lt;br /&gt;
&lt;br /&gt;
Those goals can be achieved via 2 environment variables:&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_DEV_PATH&amp;lt;/code&amp;gt;: path _folder containing_ the development repo of BlendLuxCore&lt;br /&gt;
* &amp;lt;code&amp;gt;BLC_WHEEL_PATH&amp;lt;/code&amp;gt;: path to a development version of the wheel&lt;br /&gt;
&lt;br /&gt;
We&#039;ll see the use of those variables through several scenarios.&lt;br /&gt;
&lt;br /&gt;
= Prerequisites =&lt;br /&gt;
In the next parts of the document, we shall assume:&lt;br /&gt;
&lt;br /&gt;
You have set a development environment on your local computer with:&lt;br /&gt;
* a cloned repository of BlendLuxCore&lt;br /&gt;
* and optionally a cloned repository of LuxCore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to &amp;quot;pack&amp;quot; BlendLuxCore, ie build an installable package of BLC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cmake -S . -B out -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
cmake --build out&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You know how to build a test wheel from LuxCore:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make wheel-test&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Scenario #1: Working on BLC, using standard pyluxcore =&lt;br /&gt;
&lt;br /&gt;
In the environment where you run Blender, set BLC_DEV_PATH to the path of your dev repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;export BLC_DEV_PATH=/path/to/folder/containing/BlendLuxCore&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pack BLC, run Blender and install your packed version&lt;br /&gt;
&lt;br /&gt;
= Scenario #2: Working on pyluxcore =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;WORK IN PROGRESS&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tips &amp;amp; Tricks =&lt;br /&gt;
&lt;br /&gt;
== Useful directories ==&lt;br /&gt;
&lt;br /&gt;
The extension is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender-version&amp;gt;/extensions/user_default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wheel is installed in:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;$HOME/.config/blender/&amp;lt;blender version&amp;gt;/extensions/.local/lib/python&amp;lt;python-version&amp;gt;/site-packages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wheel not loading - Python version mismatch between System and Blender ==&lt;br /&gt;
&lt;br /&gt;
You may work in an environment where the version of the system-wide Python interpreter is different from that of Blender&#039;s embedded interpreter. This can happen, for instance, if your OS is ArchLinux. System-wide Python will be the latest version available (say, 3.13), whereas Blender interpreter will be an older one (for instance, 3.11).&lt;br /&gt;
&lt;br /&gt;
If you build a test wheel without precaution, the tag will be the one of your system-wide Python and, when you try to install it in Blender, _the embedded interpreter will prevent you to do so (or will prevent you to import the lib)_.&lt;br /&gt;
&lt;br /&gt;
The most simple workaround consists in using &amp;lt;code&amp;gt;pyenv&amp;lt;/code&amp;gt; to set the right interpreter in your build session. Be careful to clear and reconfigure the whole project, afterwards: &amp;lt;pre&amp;gt;make clear &amp;amp;&amp;amp; make deps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once rebuilt, please check the version of pyluxcore in the build log:&lt;br /&gt;
&amp;lt;code&amp;gt;LuxCore/out/install/Debug/pyluxcore/pyluxcore.cpython-&amp;lt;version&amp;gt;-x86_64-linux-gnu.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;version&amp;gt; should match with the embedded interpreter.&lt;br /&gt;
&lt;br /&gt;
Another point to be cautious about, in the present case: if pyluxcore is already installed system-wide, for a different version of Python than Blender, then Blender will fail installing the wheel. In this case, you&#039;ll have to uninstall your system-wide pyluxcore (&amp;lt;code&amp;gt;pip uninstall pyluxcore&amp;lt;/code&amp;gt;) if you want Blender to install correctly.&lt;br /&gt;
&lt;br /&gt;
== Message &amp;quot;[BLC] skipping pyluxcore installation. Custom wheel matching hash already installed.&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
If you think this message is irrelevant, clean the following file: &amp;lt;code&amp;gt;$HOME/.config/blender/4.2/extensions/.user/user_default/BlendLuxCore/pyluxcore_installation_info.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging the wheel executing in Blender (Linux) ==&lt;br /&gt;
&lt;br /&gt;
It is possible to debug the wheel when it is executed in Blender. To do so, follow the procedure below:&lt;br /&gt;
* Build the wheel in debug mode:&lt;br /&gt;
&amp;lt;pre&amp;gt;export LUX_BUILD_TYPE=Debug&lt;br /&gt;
make wheel-test&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run Blender with gdb&lt;br /&gt;
&amp;lt;pre&amp;gt;gdb --args blender&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(nota bene: check that the latest wheel is correctly installed by BlendLuxCore)&lt;br /&gt;
&lt;br /&gt;
gdb should allow you to debug any call to LuxCore&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2270</id>
		<title>LuxCoreRender Release Notes v2.10</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=LuxCoreRender_Release_Notes_v2.10&amp;diff=2270"/>
		<updated>2025-05-09T07:50:57Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: BLC known problems&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
=LuxCore=&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
&lt;br /&gt;
= BlendLuxCore =&lt;br /&gt;
&lt;br /&gt;
===New Features===&lt;br /&gt;
* Compatibility for Blender 4.2 and 4.3&lt;br /&gt;
* Partial compatibility for Blender 4.4 (not a release goal)&lt;br /&gt;
* Moved from Blenders addon system to the new extension system&lt;br /&gt;
* BlendLuxCore no longer bundles LuxCore binaries, platform specific binaries now distributed via PyPi&lt;br /&gt;
* Changed build pipeline from Azure to GitHub CI/CD&lt;br /&gt;
* Add square-root option to math node (alias to power 0.5)&lt;br /&gt;
* Add a setting to suppress LuxCore console log output&lt;br /&gt;
* Glass material now accepts IOR &amp;lt; 1&lt;br /&gt;
* Materials can now be individually excluded from material override&lt;br /&gt;
* BlendLuxCore specific menus are marked with an icon&lt;br /&gt;
&lt;br /&gt;
===Fixed Bugs===&lt;br /&gt;
* Motion blur support for instances&lt;br /&gt;
* Improve custom normals export time by utilizing mesh.loops.foreach_get()&lt;br /&gt;
* LOL: Changed data access to adapt to new webhosting requirements&lt;br /&gt;
&lt;br /&gt;
===Known Problems===&lt;br /&gt;
* Crashes are observed on macOS with Blender 4.2 and Blender 4.3. Related to window resizing and render completion. Unknown if Blender specific or also happening in standalone.&lt;br /&gt;
* Motion blur does not seem to work on &amp;quot;deeper iterations&amp;quot;, e.g. copying an instanced object&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=BlendLuxCore_Installation&amp;diff=2263</id>
		<title>BlendLuxCore Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=BlendLuxCore_Installation&amp;diff=2263"/>
		<updated>2025-04-28T09:58:13Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: Update example files for offline installation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note: This version of the guide is valid as of Blender 4.2 LTS and BlendLuxCore v2.10. If you notice any incompatibilities with later versions, please inform the developers thorugh one of the community channels.&lt;br /&gt;
&lt;br /&gt;
The guide to install legacy versions can be found on the page [[BlendLuxCore Installation (legacy)]] &amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Downloading ==&lt;br /&gt;
&lt;br /&gt;
* Visit [https://luxcorerender.org/download/ the download page] to find the latest release versions.&lt;br /&gt;
* download the zip archive for one of the latest versions.&lt;br /&gt;
* Older versions of BlendLuxCore can be found on [https://github.com/LuxCoreRender/BlendLuxCore/releases the GitHub releases page].&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Follow the official Blender instructions for [https://docs.blender.org/manual/en/4.2/editors/preferences/extensions.html#get-extensions installing an extension]. Follow the steps for &amp;quot;Install from Disk&amp;quot;:&lt;br /&gt;
* Open up the preferences menu: &amp;quot;Edit&amp;quot; -&amp;gt; &amp;quot;Preferences&amp;quot; (first picture)&lt;br /&gt;
* Go to the &amp;quot;Get Extensions&amp;quot; tab (second picture)&lt;br /&gt;
* Open the menu in the top right corner and select &amp;quot;Install from disk...&amp;quot; (second picture)&lt;br /&gt;
* Select the zip archive.&lt;br /&gt;
* After the installation, BlendLuxCore should automatically be activated. You can verify this in the &amp;quot;Add-ons&amp;quot; tab.&lt;br /&gt;
* It is recommended to restart Blender before using BlendLuxCore, to ensure all features are loaded correctly.&lt;br /&gt;
&lt;br /&gt;
[[ File:Install-2.10-1.png | 372px ]]&lt;br /&gt;
&lt;br /&gt;
[[ File:Install-2.10-2.png | 733px ]]&lt;br /&gt;
&lt;br /&gt;
== How to Update ==&lt;br /&gt;
&lt;br /&gt;
To update BlendLuxCore, you need to first uninstall the current version and then install the new version as outlined in section [[#Installation|Installation]].&lt;br /&gt;
&lt;br /&gt;
To uninstall:&lt;br /&gt;
* Open up the preferences menu: &amp;quot;Edit&amp;quot; -&amp;gt; &amp;quot;Preferences&amp;quot;.&lt;br /&gt;
* Go to the &amp;quot;Get Extensions&amp;quot; tab.&lt;br /&gt;
* Click on the arrow to the right of the BlendLuxCore item to open up the actions menu.&lt;br /&gt;
* Click on &amp;quot;Uninstall&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Testing Experimental Versions ==&lt;br /&gt;
&lt;br /&gt;
If you want to follow the latest development status, support development by testing new features, or you need an urgent bug-fix, then a few steps are necessary to use the latest versions.&lt;br /&gt;
&lt;br /&gt;
What is important to understand in this context is the separation between &amp;quot;BlendLuxCore&amp;quot; and &amp;quot;LuxCore&amp;quot;:&lt;br /&gt;
* LuxCore is the core library, written in C++, and distributed as &amp;quot;pyluxcore&amp;quot;.&lt;br /&gt;
* BlendLuxCore is the interface between Blender and pyluxcore, written in python.&lt;br /&gt;
* The regular releases of BlendLuxCore will automatically download a specific, fixed version of pyluxcore.&lt;br /&gt;
* There is no automatic updating of either BlendLuxCore or pyluxcore, so that stability for production is not compromised.&lt;br /&gt;
* When using &amp;quot;latest&amp;quot; builds, both have to be installed separately&lt;br /&gt;
&lt;br /&gt;
For the latest version of BlendLuxCore:&lt;br /&gt;
* download the [https://github.com/LuxCoreRender/BlendLuxCore/releases/tag/latest &amp;quot;Latest&amp;quot;] release in GitHub and install it following the instructions in [[#How_to_Update|How to Update]] and [[#Installation|Installation]].&lt;br /&gt;
* Note: This version will still install a (pre-configured) official release of pyluxcore, NOT its latest build.&lt;br /&gt;
&lt;br /&gt;
To also get the latest version of pyluxcore:&lt;br /&gt;
* You will need an account on GitHub and log in.&lt;br /&gt;
* Go to the [https://github.com/LuxCoreRender/LuxCore/actions Actions] page of the LuxCore repository.&lt;br /&gt;
* Click on the latest workflow run. If you are in doubt which one is suitable, please ask in one of the support or community channels.&lt;br /&gt;
* At the bottom of the page, you find the &amp;quot;Artifacts&amp;quot; section.&lt;br /&gt;
* Download the correct file for your operating system and the python version used by your Blender version. The python (minor-)version is indicated by the last number of the file name&lt;br /&gt;
** Example: &amp;quot;cibw-wheels-windows-latest-11&amp;quot; is for Windows and python 3.11 --&amp;gt; &amp;lt;b&amp;gt;Python 3.11 is the version you need for Blender 4.X&amp;lt;/b&amp;gt;&lt;br /&gt;
* Unpack the zip-file you downloaded to get a .whl-file&lt;br /&gt;
* This file needs to be placed in a subfolder pyluxcore_custom/ inside the BlendLuxCore extension folder&lt;br /&gt;
** On Windows:&amp;lt;br&amp;gt;C:\Users\&amp;lt;b&amp;gt;USERNAME&amp;lt;/b&amp;gt;\Appdata\Roaming\Blender Foundation\Blender\&amp;lt;b&amp;gt;BLENDER_VERSION&amp;lt;/b&amp;gt;\extensions\user_default\BlendLuxCore\pyluxcore_custom\&lt;br /&gt;
** On Linux:&amp;lt;br&amp;gt;/home/&amp;lt;b&amp;gt;USERNAME&amp;lt;/b&amp;gt;/.config/blender/&amp;lt;b&amp;gt;BLENDER_VERSION&amp;lt;/b&amp;gt;/extensions/user_default/BlendLuxCore/pyluxcore_custom/&lt;br /&gt;
** on macOS:&amp;lt;br&amp;gt;/Users/&amp;lt;b&amp;gt;USERNAME&amp;lt;/b&amp;gt;/Library/Application Support/Blender/&amp;lt;b&amp;gt;BLENDER_VERSION&amp;lt;/b&amp;gt;/extensions/user_default/BlendLuxCore/pyluxcore_custom/&lt;br /&gt;
* Note: there must only be one .whl file in the pyluxcore_custom/ folder at any time!&lt;br /&gt;
* When you empty the pyluxcore_custom/ folder, the pre-defined release version will be installed again.&lt;br /&gt;
&lt;br /&gt;
== Offline Installation ==&lt;br /&gt;
&lt;br /&gt;
It is possible to install BlendLuxCore wihtout internet access, or in an environment where the regular installation method is blocked for network security reasons (i.e. some company networks).&lt;br /&gt;
&lt;br /&gt;
In addition to the BlendLuxCore zip-file itself (see [[#Downloading | Downloading]]), you need to have the python-wheel of pyluxcore, and any further python-wheels that are dependencies, in the a appropriate version for your platform.&lt;br /&gt;
&lt;br /&gt;
Example: For BlendLuxCore v2.10.0-rc.1, these will be:&lt;br /&gt;
* pyluxcore-2.10.0&lt;br /&gt;
* numpy-2.2.5&lt;br /&gt;
* nvidia_cuda_nvrtc_cu12-12.8.93&lt;br /&gt;
&lt;br /&gt;
Example part 2: For Windows, you are looking for download links like the following:&lt;br /&gt;
&lt;br /&gt;
[https://files.pythonhosted.org/packages/21/5b/76599c040e0873dd14885850f0e35d1d314f8abdf01200ebeb0b75422161/pyluxcore-2.10.0-cp311-cp311-win_amd64.whl pyluxcore]&lt;br /&gt;
&lt;br /&gt;
[https://files.pythonhosted.org/packages/98/89/0c93baaf0094bdaaaa0536fe61a27b1dce8a505fa262a865ec142208cfe9/numpy-2.2.5-cp311-cp311-win_amd64.whl numpy]&lt;br /&gt;
&lt;br /&gt;
[https://files.pythonhosted.org/packages/45/51/52a3d84baa2136cc8df15500ad731d74d3a1114d4c123e043cb608d4a32b/nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-win_amd64.whl nvidia-cuda-nvrtc]&lt;br /&gt;
&lt;br /&gt;
You can search and download these manually from [https://pypi.org PyPi], or copy them from another computer where the installation was successful. In the latter case, you should find the files in the wheels/ subdirectory of the extension installaton path (see [[#Testing_Experimental_Versions | Testing Experimental Versions]]).&lt;br /&gt;
&lt;br /&gt;
Once you have obtained the files, follow these steps:&lt;br /&gt;
* Install the addon as described in [[#Installation | Installation]]. This will fail to import pyluxcore, as expected, but create the extensions directory required for the next steps.&amp;lt;br&amp;gt;In Blender, the BlendLuxCore addon will be shown as installed, but disabled.&lt;br /&gt;
* Close Blender.&lt;br /&gt;
* Create a subdirectoy install_offline/ in the extension folder.&lt;br /&gt;
* Place the python-wheels in the install_offline/ subdirectory.&lt;br /&gt;
* Open Blender.&lt;br /&gt;
* Open the preferences menu, go to the Add-Ons tab.&lt;br /&gt;
* Activate BlendLuxCore by clicking the checkbox next to the BlendLuxCore item (see image).&lt;br /&gt;
* pyluxcore should now be installed. The install_offline/ directory will be deleted automatically if the installation was successful.&lt;br /&gt;
* Close and reopen Blender, and select LuxCoreRender as the rendering engine to verify that everythig works correctly.&lt;br /&gt;
&lt;br /&gt;
[[ File:BlendLuxCore_activate.png | 786px ]]&lt;br /&gt;
&lt;br /&gt;
== Common Problems and Errors ==&lt;br /&gt;
&lt;br /&gt;
Some fixes for common problems are listed in the [https://wiki.luxcorerender.org/BlendLuxCore_FAQ#I_can_not_enable_the_BlendLuxCore_addon.2C_it_shows_errors FAQ].&lt;br /&gt;
&lt;br /&gt;
[[Category:BlendLuxCore]]&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
	<entry>
		<id>https://wiki.luxcorerender.org/index.php?title=Talk:Building_LuxCoreRender&amp;diff=2234</id>
		<title>Talk:Building LuxCoreRender</title>
		<link rel="alternate" type="text/html" href="https://wiki.luxcorerender.org/index.php?title=Talk:Building_LuxCoreRender&amp;diff=2234"/>
		<updated>2025-04-25T22:36:50Z</updated>

		<summary type="html">&lt;p&gt;CodeHD: Continuation of external discussion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
== Workflow types ==&lt;br /&gt;
I did not sufficiently clarify my previous reasoning why &#039;&#039;&#039;Developer Workflows&#039;&#039;&#039; should come before &#039;&#039;&#039;Publisher workflows&#039;&#039;&#039;. Referencing to an unnamed statement in the introruction was insufficient on my side.&lt;br /&gt;
&lt;br /&gt;
My point was the typical order of execution: First, you do development, then you publish. Therefore, I would have placed development first.&lt;br /&gt;
&lt;br /&gt;
I do see your final line under the &#039;&#039;&#039;Workflow types&#039;&#039;&#039; section, now referencing this in an opposite logic.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Minor suggestions ==&lt;br /&gt;
* Publisher Workflows -&amp;gt; Prerequisites: Mention the use of a local fork already at this point.&lt;br /&gt;
&lt;br /&gt;
* use &#039;&#039;&#039;bold&#039;&#039;&#039; formatting instead of only &#039;&#039;cursive&#039;&#039; for more obvious emphasis in important locations. Without concrete suggestions right now which are particularly important.&lt;br /&gt;
&lt;br /&gt;
* Change the phrase &amp;quot;&#039;&#039;&#039;magic&#039;&#039;&#039; words&amp;quot;&lt;/div&gt;</summary>
		<author><name>CodeHD</name></author>
	</entry>
</feed>