Technical

The following documents some technical details about smartCache. Most probably interesting for TDs.

Creating cache files

All rendered images and their hash values get written into a cache directory. Click the reveal cache button on a cache node to reveal its cache directory. smartCache creates a manifest file for every frame in the cache directory. It detects all upstream dependent nodes of the node to cache and writes a separate .json file that contains all dependent nodes for every cached frame.

For each node it keeps record of all knob values. Any node or knob listed in the ‘ignore’ fields as defined in the settings gets ignored. By default smartCache ignores some nodes like ‘Dot’ and ‘NoOp’ nodes that don’t contribute to the output image but server more for structural reasons. The same applies to several knobs that don’t change the image output, e.g. xpos and ypos. The actual node position does not change the rendered image output so any node position change does not affect the cache validity. There are several other knobs like label, dope_sheet, bookmark, help, postage_stamp, gl_color, tile_color, etc. that get ignored as well. The user can update nodes and knobs to ignore as needed in the ignore section in the settings.

Once a manifest has been written, we create a hash sum of this .json file and store a node-knob-setup hash for each frame in a hash.json file. By default, smartCache keeps all manifest files on disk. But if you want to save some storage space, the manifest can also be deleted automatically by setting the environment variable CRAGL_SMARTCACHE_DELETE_SETUP_SOURCE_FILE to True.

When creating a cache, we store the hashes in a master folder. Clicking the check cache validity creates the same procedure in a folder with the current timestamp. smartCache compares the hashes of the master hash.json to the hash.json of the current timestamp to perform a frame by frame validity check. Any frame’s hash that does not correlate to the master hash will be marked as outdated.

_images/cash_folder_content.png