A Blender scene that travels with its resources.
To transfer a Blender scene, gather its dependencies around the project, make the paths portable and check the copy in a location that cannot reach the old sources. A .blend file alone is not proof of a complete folder. Our original Pli pack puts this method into practice with a ceramic bottle, a distributable texture and an independent check outside Blender.
Pli — portable Blender folder
Original generator for Blender 4.5.x LTS, procedural texture, recipe, license, manifest and acceptance sheet. No .blend or render is provided: they remain to be rebuilt and verified with Blender.
What was verified
- Validation of files from an extracted ZIP, with access to the original sources denied.
- Missing texture, altered texture and external path detected; sheet filled in on an accepted copy.
- Blender, CPU render, GPU render and scene appearance: not run or not checked.
The Pli project: a scene recipe with a precise scope
Pli is a fictional bottle designed for this exercise: a purple body with soft edges, a satin orange collar, a chevron label and a clay base. The generator sets up studio lighting and a composition that leaves room on the left. It builds the objects and materials; the only external image is an original 512 × 512 pixel PNG pattern, along with the program that recreates it. No model, HDRI, font or client file is required.
The target is Blender 4.5.x LTS with Cycles. The folder covers a still image, with no simulation or add-on. The generator refuses any other Blender branch so that this choice stays explicit. Python 3.10 or newer is enough to check the files; building the scene requires the Python bundled with Blender.
Pli provides a generator to run with Blender 4.5.x LTS. The files and error cases were checked under Python 3.14.6; creating the scene, opening it and rendering it still need testing in Blender. No .blend file or render is provided.
Before copying, decide what the project must reproduce
Start by identifying the deliverable: a still image, an animation or a series of variants. Note the software and its version, the engine, the active camera, the scene, the dimensions and the quality settings. For an animation, add the frame rate and the inclusive bounds. A scene that opens does not necessarily reproduce the same textures, the same caches or the right framing.
Work on a frozen version and keep the originals. Separate the resources you use from abandoned experiments; two textures with almost the same name can explain a difference in material. Also check the transfer rights for models, images and libraries. The Pli pack provides an MIT license for its own scripts, documents, pattern and described geometry; your additions may have other terms.
In Pli, scene.json acts as the starting spec sheet: target version, inventory of the ten objects, graphical dependency, engine, image 1 and output destinations. It also states what does not exist in this project: linked libraries, fonts, caches and animation. A declared absence keeps an empty folder from being mistaken for a forgotten resource.
A tree where every file has a role
Keep a versioned root, here blender-v1, and extract the archive before working. The separation below lets you trace an image back to its source, find the editable project and identify the result to deliver. It does not impose a universal convention: above all, choose names that someone picking up the folder understands without your message history.
The distributed sources appear in manifest.sha256.json with their size and hash. The manifest excludes itself to avoid a circular reference. Future .blend files, PNGs and reports are outputs: they will need to go into your own delivery inventory after validation.
| Location | Contents | Check to remember |
|---|---|---|
| 01_sources | Original pattern program | Lets you rebuild the texture without Blender |
| 02_projet | Destination of the .blend | No .blend provided before rebuilding |
| 03_ressources | pli-chevron.png, sRGB base color | External file kept and intended for embedding |
| 04_caches | Scope note | No simulation for this still image |
| 05_rendus | Destination of the images | No CPU or GPU render delivered |
| 06_livraison | Intake template and future reports | Copy the template before filling it in |
Check the extracted ZIP before launching Blender
From the root of the extracted folder, run the validator with an independent Python. It compares thirteen files against the manifest, checks the recipe, the paths and the PNG, then analyzes the syntax of four scripts. The expected result for an intact pack is ok: true and an exit code of 0. This check does not import bpy and does not produce any 3D image.
Our tests start from the ZIP extracted to another location. The verification process only allows reads within that copy and within the directory of the Python used; an attempt to access the original recipe is explicitly denied. Success therefore does not depend on a texture being silently found in the creation folder.
A code of 1 means you must read the list of errors. Do not rewrite the hashes to make a warning disappear. Go back to the intact archive, or create a separate working version if you want to modify the scene. An identical hash proves the file's integrity relative to the manifest, not its visual quality or the identity of its author.
python validate_pack.py --root . --jsonRebuild the flask and request a small CPU render
The following command is the procedure to run on a workstation with Blender 4.5.x LTS; it was not executed during this preparation. Run it in a dedicated process: the script starts from an empty scene. On Windows, if blender is not in the PATH, use the full path to the executable; in PowerShell, precede that quoted path with &.
The generator first checks the pack, creates the objects, loads the texture from the copy, embeds it, and saves 02_projet/renderparcel_pli_v1.blend. The saved file sets up Cycles CPU, 1200 × 750 pixels, 64 samples and frame 1. The --render-preview option then requests a 480 × 300 pixel PNG at 16 samples, without denoising. These numbers are settings, not performance measurements.
The reconstruction.json report is written after the operations succeed and states whether the render was actually executed. To build only the .blend, remove -- --render-preview. The script refuses to overwrite existing outputs: a second attempt is made in a new extraction. The --python-exit-code 1 option lets you detect a script exception via the process exit code.
blender --background --factory-startup --python-exit-code 1 --python generate_scene.py -- --render-previewRelative paths: describing position without forgetting the copy
In Blender, a path starting with // refers to the location of the .blend file. Since the Pli project will be in 02_projet, its texture can be referenced as //../03_ressources/pli-chevron.png. The resources folder travels with it. The generator nonetheless starts with an absolute path resolved in the copy, embeds the image, then writes the relative path before saving.
For an existing project, first save the .blend in the transfer folder. In File → External Data, Make Paths Relative converts the references; this operation does not copy the resources. Report Missing Files helps identify broken links. Find Missing Files searches for files in the selected folder and can repair references as absolute paths: check them again before transferring.
Do not confuse “found on this machine” with “present in the folder.” A texture still accessible in Downloads can hide the oversight. After copying, open the project in an environment where that old location can no longer satisfy the link, while keeping an independent backup.
Pack the eligible assets, inventory the rest
Pack Resources lets you include eligible resources in the .blend; saving makes that operation effective in the transmitted file. It does not gather every dependency: videos are a documented counterexample. Linked libraries have a separate embedding command. So list what is embedded and what must stay alongside the project.
For Pli, keeping the external PNG makes it easier to edit, while embedding it should let the pattern be found in the saved file. After modifying the texture, you must update the resource actually in use and then save the right version. Simply replacing a neighboring PNG does not prove that the .blend uses its new pixels.
| Resource | Pack choice | If you extend the scene |
|---|---|---|
| PNG pattern | Separate source and intended embedding | Reload the modified texture, verify, then save |
| Geometry and procedural materials | Built by the script | Keep the script version or the edited project |
| Linked .blend library | None | Inventory the library and its own dependencies |
| Video, audio or cache | None | Keep and check the necessary external files |
Reopen in a second process and fill in a real acceptance sheet
After a successful rebuild, inspect_scene.py opens the .blend in a second Blender process, with execution of its internal scripts disabled. It checks the inventory, the camera, the output settings, the AgX transform, the embedded texture and its relative path. Its report describes the opening and the data; it does not attest to render quality.
Open the resulting PNG in an image viewer. Check that the bottle stays entirely within the frame, that the label shows the cream, purple and orange pattern, that the contact with the base is readable and that no magenta texture appears. These criteria are acceptance intentions; we do not publish a rendered Blender reference image for this pack.
Copy 06_livraison/modele-reception.csv to 06_livraison/reception-executee.csv, then fill in this new sheet. Keep the template intact: it belongs to the manifest. The validator accepts the filled copy without modifying the source fingerprints, which our acceptance test verified. Then inventory this sheet and the approved outputs in your delivery archive.
blender --background --factory-startup --python-exit-code 1 --python inspect_scene.pyA missing dependency must stop the check
The pack's negative exercise removes pli-chevron.png from a test copy, without touching the sources. The validator then returns code 1 and identifies both the file missing from the inventory and the recipe's missing dependency. The generator starts with this same check: it must refuse to continue with this incomplete copy.
Another trial alters the PNG's first byte; the check detects a different fingerprint and an invalid image signature. A third replaces its path with a reference pointing outside the folder, also rejected. These trials verify concrete transfer defects. They simulate neither the Blender opening nor the disappearance of a cache in an animation.
To redo the exercise, work only on an extra extraction and keep an intact copy. The fix is to find the right resource and its expected location. A different texture with the same name does not satisfy the integrity check.
Adding an animation changes the scope of the check
The Pli scene has only one image and needs no cache. If you add smoke, cloth, or a simulation to it, document the cache type, its computation version, its location, and the entire useful range. Precomputation mechanisms depend on the physical system; do not generalize the behavior of one cache to all the others.
Freeze the result before copying it. For a sequence, check the start, the end, scene or simulation changes, but also the presence of every intermediate file. Three visually correct images do not prove that all 96 files of an animation from 1 to 96 are available. State clearly whether a cache is delivered or must be recomputed, with which parameters and which inputs.
Apply the same logic to texture, volume, sound, and editing media sequences. Do not delete the only sources after creating the ZIP: keep them until the copy is opened, the outputs are checked, and they are retrieved.
Color, memory, and duration: measuring the real project
The Pli pattern is used for the base color and is declared sRGB. A map that describes normals or displacement does not have the same role; its interpretation must match its data. Also keep the display transform and exposure when comparing outputs. A color difference can come from the display chain, unrelated to computing power.
The ZIP size does not indicate the GPU memory requirement. Evaluated geometry, textures actually loaded, and render steps matter more than the number of files in an archive. A small CPU preview predicts neither the memory peak nor the duration of the final GPU render. Measure a complete representative output at the final resolution before choosing a configuration.
The 3D workshop helps frame this check. Then compare GPU configurations according to compatibility and the observed peak, with a margin suited to the project. Choose 3, 7, or 30 days in the configurator to cover opening, tests, returns, computations, and retrieval; none of these windows on its own guarantees a render deadline. The export guide extends the work through to the deliverable files.
What has been verified, and what remains to be run
The seven checks below were run on Windows with Python 3.14.6. The pack contains fourteen files, including the manifest; thirteen files are covered by its hashes. The texture was rebuilt and compared byte for byte in this environment. This PNG equality does not demonstrate identical 3D rendering across versions or hardware.
The checks cover the files, their dependencies, and transfer errors. The generation of the .blend, the inspection of the scene, and the CPU or GPU renders were not tested. The README gives the procedure to verify them in Blender 4.5.x LTS.
| Trial | Result | Scope |
|---|---|---|
| ZIP extracted, originals inaccessible | Code 0 | Integrity, acceptance testing, PNG and Python syntax |
| Copy of the sheet then data entry | Code 0 | Sources remain audited after receipt |
| Texture removed from a copy | Code 1 expected | Missing dependency identified |
| Altered texture | Code 1 expected | PNG fingerprint and signature rejected |
| Path outside the folder | Code 1 expected | External reference rejected |
| Pattern reconstruction | Identical bytes | Procedural texture, not a Blender render |
| Generator launched by Python alone | Expected refusal | Blender required, no bpy execution |
To move your project forward.
Your questions.
Why doesn't the pack already include a .blend file?+
The pack provides the original generator and its assets. Creating and opening the scene is still left to be tested: no .blend or render is included. On a machine with Blender 4.5.x LTS, the README explains how to create the .blend and then inspect it in a second process.
Can a .blend with embedded assets replace the whole folder?+
It depends on the data being used. Some resources can be embedded; others, particularly videos, remain external. Keep an explicit inventory and track your own scene's dependencies. The Pli pack keeps its source texture so changes remain possible.
Why does the manifest flag my changes as an error?+
It describes the files distributed in version 1.0.0. Modifying a script, a recipe or a texture normally changes its fingerprint. Work in a new version and build its inventory. For acceptance, copy the CSV template to reception-executee.csv: this output remains separate from the controlled template.
Does this pack let you choose a GPU card directly?+
No. It is used to prepare and check a transfer. No VRAM requirement or GPU time has been measured for this scene. Test your full production, its compatibility and its memory peak before sizing the rental.