Go to file
Anna Sirota 8f3a03d311 Log exception on each ResourceInvalid to make debugging easier 2021-04-26 17:40:03 +02:00
devdeps Development dependencies updates to their latest versions 2019-05-28 16:13:14 +02:00
pillar Log exception on each ResourceInvalid to make debugging easier 2021-04-26 17:40:03 +02:00
src Pillar: Wider scrollbars 2020-07-29 22:53:01 +02:00
tests Replaced Gravatar with self-hosted avatars 2019-05-31 16:49:24 +02:00
.arcconfig Added .arcconfig for phabricator integration 2016-09-14 09:39:19 +02:00
.babelrc Lazy Home: Lazy load latest blog posts and assets and group by week and 2018-11-12 12:57:25 +01:00
.gitignore Removed and gitignored poetry.lock 2019-05-28 16:13:14 +02:00
LICENSE.txt Added GPL 2 license 2015-10-28 15:33:39 +01:00
README.md Fix T73490 Hyperlink bug 2020-03-27 09:52:51 +01:00
backup-db.sh Exclude Flamenco task logs when dumping the database. 2017-09-07 15:52:57 +02:00
gulp Slightly smarter ./gulp script (taken from Attract) 2016-10-04 11:58:46 +02:00
gulpfile.js Only use minified vue if built as production 2019-04-04 10:18:42 +02:00
jest.config.js Lazy Home: Lazy load latest blog posts and assets and group by week and 2018-11-12 12:57:25 +01:00
package-lock.json Update gulp-sass 2020-07-23 18:49:12 +02:00
package.json Update gulp-sass 2020-07-23 18:49:12 +02:00
pyproject.toml Pin poetry deps to work around cryptography requiring Rust issue 2021-03-18 18:49:10 +01:00
restore-db.sh Restore DB from 'cloud' subdir 2016-11-01 16:47:55 +01:00
setup.cfg Big refactoring of file storage handling 2017-03-22 15:49:56 +01:00
translations.cfg Internationalization: Backend support to localization based on user browser 2017-09-09 00:26:18 +02:00



This is the latest iteration on the Attract project. We are building a unified framework called Pillar. Pillar will combine Blender Cloud and Attract. You can see Pillar in action on the Blender Cloud.

Custom fonts

The icons on the website are drawn using a custom font, stored in pillar/web/static/font. This font is generated via Fontello by uploading pillar/web/static/font/config.json.

Note that we only use the WOFF and WOFF2 formats, and discard the others supplied by Fontello.

After replacing the font files & config.json, edit the Fontello-supplied font.css to remove all font formats except woff and woff2. Then upload it to css2sass to convert it to SASS, and place it in src/styles/font-pillar.sass.

Don't forget to Gulp!


Dependencies are managed via Poetry.

Make sure your /data directory exists and is writable by the current user. Alternatively, provide a pillar/config_local.py that changes the relevant settings.

git clone git@git.blender.org:pillar-python-sdk.git ../pillar-python-sdk
pip install -U --user poetry
poetry install

HDRi viewer

The HDRi viewer uses Google VRView. To upgrade, get those files:

and place them in pillar/web/static/assets/vrview. Replace images/loading.gif in embed.min.js with static/pillar/assets/vrview/loading.gif.

You may also want to compare their index.html to our src/templates/vrview.pug.

When on a HDRi page with the viewer embedded, use this JavaScript code to find the current yaw: vrview_window.contentWindow.yaw(). This can be passed as default_yaw parameter to the iframe.


Pillar requires Celery for background task processing. This in turn requires a backend and a broker, for which the default Pillar configuration uses Redis and RabbitMQ.

You can run the Celery Worker using manage.py celery worker.

Find other Celery operations with the manage.py celery command.


Pillar uses Elasticsearch to power the search engine. You will need to run the manage.py elastic reset_index command to initialize the indexing. If you need to reindex your documents in elastic you run the manage.py elastic reindex command.


If the language you want to support doesn't exist, you need to run: translations init es_AR.

Every time a new string is marked for translation you need to update the entire catalog: translations update

And once more strings are translated, you need to compile the translations: translations compile

To mark strings strings for translations in Python scripts you need to wrap them with the flask_babel.gettext function. For .pug templates wrap them with _().