<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.makehumancommunity.org/w/index.php?action=history&amp;feed=atom&amp;title=Documentation%3ADirectory_structure_and_core_modules</id>
		<title>Documentation:Directory structure and core modules - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://www.makehumancommunity.org/w/index.php?action=history&amp;feed=atom&amp;title=Documentation%3ADirectory_structure_and_core_modules"/>
		<link rel="alternate" type="text/html" href="http://www.makehumancommunity.org/w/index.php?title=Documentation:Directory_structure_and_core_modules&amp;action=history"/>
		<updated>2026-07-20T17:02:05Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.25.1</generator>

	<entry>
		<id>http://www.makehumancommunity.org/w/index.php?title=Documentation:Directory_structure_and_core_modules&amp;diff=1827&amp;oldid=prev</id>
		<title>Punkduck at 14:06, 25 July 2020</title>
		<link rel="alternate" type="text/html" href="http://www.makehumancommunity.org/w/index.php?title=Documentation:Directory_structure_and_core_modules&amp;diff=1827&amp;oldid=prev"/>
				<updated>2020-07-25T14:06:34Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 14:06, 25 July 2020&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;L1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Overview&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There are &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;10 main source folders with &lt;/del&gt;the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;main MakeHuman folder &lt;/del&gt;in the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;SVN &lt;/del&gt;repository&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;== Directory Structure of MakeHuman ==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* apps&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* core&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* data&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[[File:MHDirectories.png]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* docs&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* icons&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;The illustration shows the directory structure of MakeHuman. &lt;/ins&gt;There are &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;two different places for &lt;/ins&gt;the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;directory, one side is the &amp;quot;internal&amp;quot; one, which is normally located &lt;/ins&gt;in &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;a range where it cannot be overwritten from a normal user, so let's call it system directories. The other side is &lt;/ins&gt;the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;user space which can be changed by the user. The GIT &lt;/ins&gt;repository &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;is used to create the system folders shown above.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* lib&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* licences&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;The &lt;/ins&gt;folders &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/ins&gt;licenses&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''' &lt;/ins&gt;and &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/ins&gt;docs&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''' &lt;/ins&gt;are associated with the general housekeeping and installation aspects of MakeHuman.&amp;#160; Details of the housekeeping&amp;#160; folders will be summarized, where relevant, elsewhere in the documentation.&amp;#160; The remaining folder are discussed below.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* plugin&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;* shared&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;---- &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Of these, two &lt;/del&gt;folders&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;: (&lt;/del&gt;licenses and docs&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;)&amp;#160; &lt;/del&gt;are associated with the general housekeeping and installation aspects of MakeHuman.&amp;#160; Details of the housekeeping&amp;#160; folders will be summarized, where relevant, elsewhere in the documentation.&amp;#160; The remaining folder are discussed below.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;During the pyinstaller build process, only files in the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/ins&gt;makehuman/data&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''' &lt;/ins&gt;directory are included as data files, which means that any other data files will be skipped, causing file not found errors. Thus, the developer should place all data files under the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/ins&gt;data&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''' &lt;/ins&gt;folder. The idea is to be able to cleanly identify what is data to be loaded at run time and what is code that can be compiled at build time.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Directory Structure and the Build System&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;During the pyinstaller build process, only files in the makehuman/data&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;/ &lt;/del&gt;directory are included as data files, which means that any other data files will be skipped, causing file not found errors. Thus, the developer should place all data files under the data&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;/ &lt;/del&gt;folder. The idea is to be able to cleanly identify what is data to be loaded at run time&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;.&lt;/del&gt;and what is code that can be compiled at build time. One exception here is target (data) files that can optionally be precompiled to binary files at build time even though their binaries will reside in the data&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;/ &lt;/del&gt;directory. The rational for this is that target files are static data core assets and should therefore naturally reside in makehuman/data&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;/&lt;/del&gt;, but by compiling target files at build time, the size of the build distribution can be reduced and program startup times can be minimized&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;One exception here is target (data) files that can optionally be precompiled to binary files at build time even though their binaries will reside in the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/ins&gt;data&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''' &lt;/ins&gt;directory. The rational for this is that target files are static data core assets and should therefore naturally reside in &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/ins&gt;makehuman/data&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/ins&gt;, but by compiling target files at build time, the size of the build distribution can be reduced and program startup times can be minimized&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The files &lt;/del&gt;in makehuman/plugins&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;/ &lt;/del&gt;form a second exception to data is &amp;quot;loaded at runtime&amp;quot; and code is &amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;comiled &lt;/del&gt;at build time&amp;quot;. Files in the makehuman/plugins&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;/ &lt;/del&gt;folder are kept as a &amp;quot;side effect&amp;quot; of the fact that the makehuman/plugins&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;/ &lt;/del&gt;path is included as data. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;It is included as data to make it possible to load &lt;/del&gt;plugins at runtime by inspecting the folder. Plugins are compiled as well, though. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;This does not mean that &lt;/del&gt;data may be stored in &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;makehuman/&lt;/del&gt;plugins&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;/ as this practice threatens &lt;/del&gt;logical organization of code and data, and it is not guaranteed that this will keep working in the future.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Plugins should never be used as imported modules in other plugins or, even worse, in a core module. Currently, the core plugins of MakeHuman all start with a digit (e.g., import 9_export_mhx). This is done intentionally to prevent their improper import into other modules in the program because imports of a module starting with a digit will produce a syntax error. Core plugins that require data, for example those related to &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;.mhx &lt;/del&gt;export, should make use of a subfolder in the makehuman/data&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;/ &lt;/del&gt;path &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;(makehuman/data/mhx/)&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;----&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Third-party plugins might have slightly greater lattitude about including data than core assets, but the clean separation of code and data is strongly encouraged.&amp;#160; Therefore, third-party plugin developers should place data in makehuman/plugins/pluginName/data to make it easily identifiable.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;makehuman/data/ folder&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Files &lt;/ins&gt;in &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/ins&gt;makehuman/plugins&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''' &lt;/ins&gt;form a second exception to data is &amp;quot;loaded at runtime&amp;quot; and code is &amp;quot;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;compiled &lt;/ins&gt;at build time&amp;quot;. Files in the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/ins&gt;makehuman/plugins&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''' &lt;/ins&gt;folder are kept as a &amp;quot;side effect&amp;quot; of the fact that the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/ins&gt;makehuman/plugins&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''' &lt;/ins&gt;path is included as data. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;This allows loading &lt;/ins&gt;plugins at runtime by inspecting the folder. Plugins are compiled as well, though. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Additional &lt;/ins&gt;data &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;which are not code &lt;/ins&gt;may &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;not &lt;/ins&gt;be stored in &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;the '''&lt;/ins&gt;plugins&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''' folder. It would threaten &lt;/ins&gt;logical organization of code and data, and it is not guaranteed that this will keep working in the future.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Most operating systems set aside separate storage space for code and data, and programs can generally not write data to their own directory structure.&amp;#160; In addition, most OS support the notion of multiuser login, and support separate writable data areas for each user to customize. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;MakeHuman includes some &amp;quot;fixed data assets&amp;quot; that are intrinsic to the program.&amp;#160; These data assets are &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;save &lt;/del&gt;in the programs data folder within the program itself. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;However, MakeHuman also makes provision for third-party and user developed assets like additional clothes, additional hairstyles, etc.&amp;#160; These latter assets are not saved in the program area but rather are &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;save &lt;/del&gt;in &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;user writable areas under the path&amp;#160; userhome/makehuman/&lt;/del&gt;. For example, on Windows 7 systems this would be &amp;quot;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Docuements&lt;/del&gt;/makehuman&amp;quot;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &lt;/del&gt;In populating asset lists, the library holdings are generated based on the fact that &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;syspath/data/itemtype &lt;/del&gt;and &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;userhome/data/itemtype can coexist&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Themakehuman&lt;/del&gt;/data&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;/ folderdoes &lt;/del&gt;not contain any &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;codeper &lt;/del&gt;se. As its name implies this folder contains the basic data resources that ship with MakeHuman. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;Often, during the development and building of MakeHuman, a given resource may exist in multiple formats. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;Many if not most resources initially exist as “text-based” files which are stored in the data directory with an appropriate extension (see section of file extensions).&amp;#160; When MakeHuman is built for distribution on supported platforms, these text-based data resources are compressed into .&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;npy &lt;/del&gt;format to produce a smaller and more rapidly loading distribution package. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;Typically, the original text-based data files do not ship with standard, downloadable installation builds but instead, the corresponding compressed versions are distributed.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Plugins should never be used as imported modules in other plugins or, even worse, in a core module. Currently, the core plugins of MakeHuman all start with a digit (e.g., import 9_export_mhx). This is done intentionally to prevent their improper import into other modules in the program because imports of a module starting with a digit will produce a syntax error. Core plugins that require data, for example those related to &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;an &lt;/ins&gt;export, should make use of a subfolder in the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/ins&gt;makehuman/data&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''' &lt;/ins&gt;path.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The data folder contains many subfolders which correspond to unique data assets.&amp;#160; The details of these assets will not be discussed here, but the reader can get a general idea of asset types just by reviewing the folder names.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;3dobjs, animations, bvhs, expressions, eyebrows, eyes, genitals, hair, icons, languages, litspheres, materials, mhx, poses, povray, proxymeshes, rigs, scenes, shaders, skins, targets, textures, themes, uvs, vertesgroups, visemes.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Third-party plugins might have slightly greater lattitude about including data than core assets, but the clean separation of code and data is strongly encouraged.&amp;#160; Therefore, third-party plugin developers should place data in &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''&lt;/ins&gt;makehuman/plugins/pluginName/data&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''' &lt;/ins&gt;to make it easily identifiable.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Many of these data subfolders have subfolders themselves, but generally, this organization is easily discovered just by looking.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Four &lt;/del&gt;of the data subfolders (eyes, hair, and clothes) are directed at important geometry assets of the MakeHuman model.&amp;#160; MakeHuman supplies a special tool that lets developers or even end-users design additional assets using the 3D modeling program Blender. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; The name for this tool isMakeClotheseven though it supports the development of the other geometries as well&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;----&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Most operating systems set aside separate storage space for code and data, and programs can generally not write data to their own directory structure.&amp;#160; In addition, most OS support the notion of multiuser login, and support separate writable data areas for each user to customize.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;MakeHuman includes some &amp;quot;fixed data assets&amp;quot; that are intrinsic to the program.&amp;#160; These data assets are &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;saved &lt;/ins&gt;in the programs data folder within the program itself. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;However, MakeHuman also makes provision for third-party and user developed assets like additional clothes, additional hairstyles, etc.&amp;#160; These latter assets are not saved in the program area but rather are &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;saved &lt;/ins&gt;in &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;users login folder&lt;/ins&gt;. For example, on Windows 7 systems this would be &amp;quot;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Documents&lt;/ins&gt;/makehuman&amp;quot;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;In populating asset lists, the library holdings are generated based on the fact that &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;they scan system &lt;/ins&gt;and &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;user path always&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;----&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;'''makehuman&lt;/ins&gt;/data&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;''' folder does &lt;/ins&gt;not contain any &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;code per &lt;/ins&gt;se. As its name implies this folder contains the basic data resources that ship with MakeHuman.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Often, during the development and building of MakeHuman, a given resource may exist in multiple formats. Many if not most resources initially exist as “text-based” files which are stored in the data directory with an appropriate extension (see section of file extensions).&amp;#160; When MakeHuman is built for distribution on supported platforms, these text-based data resources are compressed into .&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;npz &lt;/ins&gt;format to produce a smaller and more rapidly loading distribution package.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Typically, the original text-based data files do not ship with standard, downloadable installation builds but instead, the corresponding compressed versions are distributed.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The data folder contains many subfolders which correspond to unique data assets.&amp;#160; The details of these assets will not be discussed here, but the reader can get a general idea of asset types just by reviewing the folder names &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;(see illustration)&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Some &lt;/ins&gt;of the data subfolders (&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;e.g. &lt;/ins&gt;eyes, hair, and clothes) are directed at important geometry assets of the MakeHuman model.&amp;#160; MakeHuman supplies a special tool that lets developers or even end-users design additional assets using the 3D modeling program Blender&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;, tools like MakeClothes, MakeSkin, MPFB etc&lt;/ins&gt;. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;use these directories&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== /makehuman/apps/ ====&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==== /makehuman/apps/ ====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki:diff:version:1.11a:oldid:713:newid:1827 --&gt;
&lt;/table&gt;</summary>
		<author><name>Punkduck</name></author>	</entry>

	<entry>
		<id>http://www.makehumancommunity.org/w/index.php?title=Documentation:Directory_structure_and_core_modules&amp;diff=713&amp;oldid=prev</id>
		<title>Joepal: Created page with &quot;Overview There are 10 main source folders with the main MakeHuman folder in the SVN repository: * apps * core * data * docs * icons * lib * licences * plugin * shared Of these...&quot;</title>
		<link rel="alternate" type="text/html" href="http://www.makehumancommunity.org/w/index.php?title=Documentation:Directory_structure_and_core_modules&amp;diff=713&amp;oldid=prev"/>
				<updated>2016-05-20T11:24:23Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;Overview There are 10 main source folders with the main MakeHuman folder in the SVN repository: * apps * core * data * docs * icons * lib * licences * plugin * shared Of these...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Overview&lt;br /&gt;
There are 10 main source folders with the main MakeHuman folder in the SVN repository:&lt;br /&gt;
* apps&lt;br /&gt;
* core&lt;br /&gt;
* data&lt;br /&gt;
* docs&lt;br /&gt;
* icons&lt;br /&gt;
* lib&lt;br /&gt;
* licences&lt;br /&gt;
* plugin&lt;br /&gt;
* shared&lt;br /&gt;
Of these, two folders: (licenses and docs)  are associated with the general housekeeping and installation aspects of MakeHuman.  Details of the housekeeping  folders will be summarized, where relevant, elsewhere in the documentation.  The remaining folder are discussed below.&lt;br /&gt;
 &lt;br /&gt;
Directory Structure and the Build System&lt;br /&gt;
During the pyinstaller build process, only files in the makehuman/data/ directory are included as data files, which means that any other data files will be skipped, causing file not found errors. Thus, the developer should place all data files under the data/ folder. The idea is to be able to cleanly identify what is data to be loaded at run time.and what is code that can be compiled at build time. One exception here is target (data) files that can optionally be precompiled to binary files at build time even though their binaries will reside in the data/ directory. The rational for this is that target files are static data core assets and should therefore naturally reside in makehuman/data/, but by compiling target files at build time, the size of the build distribution can be reduced and program startup times can be minimized&lt;br /&gt;
The files in makehuman/plugins/ form a second exception to data is &amp;quot;loaded at runtime&amp;quot; and code is &amp;quot;comiled at build time&amp;quot;. Files in the makehuman/plugins/ folder are kept as a &amp;quot;side effect&amp;quot; of the fact that the makehuman/plugins/ path is included as data. It is included as data to make it possible to load plugins at runtime by inspecting the folder. Plugins are compiled as well, though. This does not mean that data may be stored in makehuman/plugins/ as this practice threatens logical organization of code and data, and it is not guaranteed that this will keep working in the future.&lt;br /&gt;
Plugins should never be used as imported modules in other plugins or, even worse, in a core module. Currently, the core plugins of MakeHuman all start with a digit (e.g., import 9_export_mhx). This is done intentionally to prevent their improper import into other modules in the program because imports of a module starting with a digit will produce a syntax error. Core plugins that require data, for example those related to .mhx export, should make use of a subfolder in the makehuman/data/ path (makehuman/data/mhx/).&lt;br /&gt;
Third-party plugins might have slightly greater lattitude about including data than core assets, but the clean separation of code and data is strongly encouraged.  Therefore, third-party plugin developers should place data in makehuman/plugins/pluginName/data to make it easily identifiable.&lt;br /&gt;
makehuman/data/ folder&lt;br /&gt;
Most operating systems set aside separate storage space for code and data, and programs can generally not write data to their own directory structure.  In addition, most OS support the notion of multiuser login, and support separate writable data areas for each user to customize.  MakeHuman includes some &amp;quot;fixed data assets&amp;quot; that are intrinsic to the program.  These data assets are save in the programs data folder within the program itself.  However, MakeHuman also makes provision for third-party and user developed assets like additional clothes, additional hairstyles, etc.  These latter assets are not saved in the program area but rather are save in user writable areas under the path  userhome/makehuman/. For example, on Windows 7 systems this would be &amp;quot;Docuements/makehuman&amp;quot;.   In populating asset lists, the library holdings are generated based on the fact that syspath/data/itemtype and userhome/data/itemtype can coexist.&lt;br /&gt;
Themakehuman/data/ folderdoes not contain any codeper se. As its name implies this folder contains the basic data resources that ship with MakeHuman.  Often, during the development and building of MakeHuman, a given resource may exist in multiple formats.  Many if not most resources initially exist as “text-based” files which are stored in the data directory with an appropriate extension (see section of file extensions).  When MakeHuman is built for distribution on supported platforms, these text-based data resources are compressed into .npy format to produce a smaller and more rapidly loading distribution package.  Typically, the original text-based data files do not ship with standard, downloadable installation builds but instead, the corresponding compressed versions are distributed.&lt;br /&gt;
The data folder contains many subfolders which correspond to unique data assets.  The details of these assets will not be discussed here, but the reader can get a general idea of asset types just by reviewing the folder names.&lt;br /&gt;
3dobjs, animations, bvhs, expressions, eyebrows, eyes, genitals, hair, icons, languages, litspheres, materials, mhx, poses, povray, proxymeshes, rigs, scenes, shaders, skins, targets, textures, themes, uvs, vertesgroups, visemes.&lt;br /&gt;
Many of these data subfolders have subfolders themselves, but generally, this organization is easily discovered just by looking.&lt;br /&gt;
Four of the data subfolders (eyes, hair, and clothes) are directed at important geometry assets of the MakeHuman model.  MakeHuman supplies a special tool that lets developers or even end-users design additional assets using the 3D modeling program Blender.  The name for this tool isMakeClotheseven though it supports the development of the other geometries as well.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==== /makehuman/apps/ ====&lt;br /&gt;
&lt;br /&gt;
* catmull_clark_subdivision.py- an implementation of the!LINK!http://en.wikipedia.org/wiki/Catmull%E2%80%93Clark_subdivision_surface -- catmull clark subdivision algorithm.!/LINK!&lt;br /&gt;
* devtests.py- testing and development use only, and can safely be ignored.&lt;br /&gt;
* human.py- contains the Human class, which is the core data structure for MakeHuman model.&lt;br /&gt;
* humanmodifier.py- contains the functions and classes that link the GUI sliders to their respective effects on the MakeHuman mesh.&lt;br /&gt;
* metadataengine.py- implements algorithms to handle MakeHuman metadata tags within large files.  It makes it possible to quickly and easily associate descriptive adjectives (tags) such as &amp;quot;eye&amp;quot; or &amp;quot;brown&amp;quot; with the complete file path to an object that has these characteristics.&lt;br /&gt;
* mh2proxy.py- (unknown)&lt;br /&gt;
* posemode.py- contains classes and functions relevant to entering and exiting posemode, and altering a figure's pose. Changing the pose of a figure will deform the mesh and require the vertex warps to be reset.&lt;br /&gt;
* warpmodifier.py- contains classes and functions to handle the source and target of a warp.&lt;br /&gt;
* which.py- checks to see whether or not a program exists (needed for the GUI controls).&lt;br /&gt;
&lt;br /&gt;
==== /makehuman/core/ ====&lt;br /&gt;
&lt;br /&gt;
* algos3d.py- contains algorithms used to perform high-level 3D transformations on the 3D mesh that is used to represent the human figure in the MakeHuman application.&lt;br /&gt;
* aljabr.py- contains the most common 3D algebraic operations used in MakeHuman including vector, matrix, quaternion, and various other operations.&lt;br /&gt;
* animation3d.py- contains functions and classes to animate a wide range of objects. Includes support for rotation, scaling, translation, camera movement, and variety of interpolation methods.&lt;br /&gt;
* compat.py- (Unknown)&lt;br /&gt;
* download.py- contains classes and functions to download media from the web and import it into MakeHuman.&lt;br /&gt;
* events3d.py- contains classes to allow an object to handle events resulting from keyboard or mouse input, window resizing, and changes to the human model with MakeHuman.&lt;br /&gt;
* export.py- (Not fully implemented) contains classes to export the MakeHuman model.&lt;br /&gt;
* files3d.py- contains functions to convert other 3D file formats to and from the internal format used by MakeHuman.&lt;br /&gt;
* geometry3d.py- contains classes for commonly used 2D and 3d objects such as rectangles, cubes, and flat meshes.&lt;br /&gt;
* gui3d.py- contains classes defined to implement widgets that provide utility functions to the graphical user interface.&lt;br /&gt;
* mhmain.py- contains the operations and event handlers that provide the core functionality of MakeHuman.&lt;br /&gt;
* module3d.py- contains classes and functions to handle the appearance and behavior of 3D objects such as shading, texturing, visibility, transparency, and creating groups of faces.&lt;br /&gt;
* selection3d.py- contains classes and functions that allow users to select elements within a 3D scene by clicking on them with the mouse using a technique called &amp;quot;!LINK!http://www.opengl.org/archives/resources/faq/technical/selection.htm -- Selection Using Unique Color ID's!/LINK!&amp;quot;&lt;br /&gt;
* textures3d.py- contains functions to perform standard proccesses on bitmaps and translate UV coordinates to a pixel index in a bitmap.&lt;br /&gt;
* transformations.py- A library for calculating 4x4 matrices for translating, rotating, reflecting, scaling, shearing, projecting, orthogonalizing, and superimposing arrays of 3D homogeneous coordinates as well as for converting between rotation matrices, Euler angles, and quaternions. Also includes an Arcball control object and functions to decompose transformation matrices.&lt;br /&gt;
* warp.py- contains classes and functions to warp vertex locations from a source character to a target character. This makes it possible to correctly combine several morphs that affect overlapping regions of the body.&lt;br /&gt;
&lt;br /&gt;
==== /makehuman/lib/ ====&lt;br /&gt;
&lt;br /&gt;
* camera.py -handles camera events such as changing focus, camera mode, and field of view.&lt;br /&gt;
* core.py -sets default global variables&lt;br /&gt;
* debugdump.py -handles creating a debug text file in the user's home directory and writing relevant debug information to that file.&lt;br /&gt;
* filechooser.py- a Qt based filechooser widget that allows the user to preview and select files as well as sort them by name, creation date, modification date, and size.&lt;br /&gt;
* getpath.py- Utility module for finding the user's home path.&lt;br /&gt;
* glmodule.py- contains classes and functions to render 3D objects with openGL in both draw mode and pick mode.&lt;br /&gt;
* gui.py -alias from gui.py to qtgui.py&lt;br /&gt;
* image.py- handles flipping and resizing images as well as converting between RGB, ARGB, and greyscale.&lt;br /&gt;
* imageqt.py- handles loading and saving RGB and ARGB images.&lt;br /&gt;
* inifile.py- contains functions for formatting and parsing .ini files.&lt;br /&gt;
* language.py- handles language file loading and translation.&lt;br /&gt;
* log.py- extends the functionality of Python's logging module. The logging module can be used to create log files of events for debugging, or to display information or warnings within MakeHuman. It is used instead of print statements.&lt;br /&gt;
* matrix.py- uses the NumPy package to define standard matrix operations.&lt;br /&gt;
* mh.py- Python compatibility layer that replaces the old C functions of MakeHuman.&lt;br /&gt;
* object3d.py- defines the object3d class&lt;br /&gt;
* profiler.py- defines functions to handle profiling (how long various parts of the program executed).&lt;/div&gt;</summary>
		<author><name>Joepal</name></author>	</entry>

	</feed>