This proposal unifies the ideas in several proposed changes to Blender's method of storing and retrieving external data. Much of this follows directly from the 'environment variables' proposal, which I agree with, with some minor adjustments.
• We split
- System Files: Default blender data such as ui scripts
- User Files: Saved configurations, user-owned data such as edited or added scripts
- These are stored in separate locations.
• We store both System and User files split by Blender version number within their parent folders.
• System and User files are kept in OS-specific locations using OS APIs, able to be overridden by environment variables.
• Individual config/data files are renamed to be less cryptic
• For now, we will just worry about fixing up the issue of finding paths, using similar to existing APIs in Blender. We won't wrap FILE etc for now.
System data files
Default data files such as translations, icons, etc. required by Blender are saved in system-wide storage at installation time. These are read-only by Blender.
unix: /usr/share/blender/2.56/datafiles osx: blender.app/Contents/MacOS/2.56/datafiles win: C:\Program Files\Blender\2.56\datafiles
User data files
User-specific data files are installed as needed in user-specific locations
unix: ~/.blender/2.56/datafiles osx: ~/Library/Application Support/Blender/2.56/datafiles win: C:\Users\Username\AppData\Blender\2.56\datafiles
Other variants include, BLENDER_SYSTEM_SCRIPTS, BLENDER_SYSTEM_PLUGINS, and BLENDER_USER_* counterparts.
User Configuration Files
Blender should run fully by default without any configuration files needed. User-specific config files are created as needed in user-specific locations.
unix: ~/.blender/2.56/config osx: ~/Library/Application Support/Blender/2.56/config win: C:\Users\Username\AppData\Blender\2.56\config
System Configuration Files
As an option that is not defined by default, system configuration files can be used, to provide customised defaults to all users, taking precedence over the built-in blender defaults, but under user configurations. This can be useful for large site installations such as schools to have customised default preferences.
System configuration files are read-only by Blender, all newly saved preferences go to USER_CONFIG. example: BLENDER_SYSTEM_CONFIG
Not defined by default, can be any path, but generally alongside BLENDER_SYSTEM_DATA.
Temporary caches/backups such as 'last session' .blend file, or temporary EXRs are stored in user-specific locations. This should not use system-wide temp locations such as /tmp, to prevent them getting deleted and to prevent other users from affecting them.
unix: ~/.blender/2.56/temp osx: ~/Library/Application Support/Blender/2.56/temp win: C:\Users\Username\AppData\Blender\2.56\temp
We can rename the configuration files used by Blender to be less cryptic:
- startup.blend ( .B.blend )
- bookmarks.txt ( .Bfs )
- recent-files.txt ( .Blog )
We can also change the quit.blend to:
- to avoid conflicts from multiple blender sessions. Saving the filename as part of the title will also allow users to more quickly identify older sessions to restore.
Temp files can also be changed similarly, to:
- to more easily identify stored temp files, and perhaps can be used to automatically restore temp versions when they are older than the saved 'real' version.
A feature that some people find useful is to run blender 'locally', out of a self-contained folder, without needing to install in the system. To support this, when retrieving the BLENDER_SYSTEM_DATAFILES path, blender can first check for a 'datafiles' path in the same folder as the blender executable, and use that first. Same for other associated paths such as BLENDER_SYSTEM_SCRIPTS and BLENDER_SYSTEM_PLUGINS.
These only override the BLENDER_SYSTEM_* entries, BLENDER_USER_* still takes precedence in general situations.
1) As a 'stage 1' quickly achievable target, we can possibly ignore the environment variables part, and concentrate on the Blender internal API. This can use the same names, but just retrieving path info from OS-specific functions. eg.
2) Add ability to read/overwrite these paths with environment variables
http://wiki.blender.org/index.php/Dev:2.5/Source/Installation/ResourceFilePaths http://wiki.blender.org/index.php/Dev:2.5/Source/Installation/EnvironmentVariables http://wiki.blender.org/index.php/Dev:2.5/Source/Installation/Unix_FHS
--Matt Ebb 08:16, 11 May 2010 (UTC)