# Pli — Blender handoff pack, version 1.0.0

An original RenderParcel study: purple ceramic bottle, satin orange collar, chevron label on paper, and a clay base. The framing is set up for a product image with an open area on the left. This is neither a client's object nor a model reproduced from a photograph.

## What the download actually contains

This pack provides a **scene generator**, an original texture, a recipe, and checks. No `.blend` file or Blender render was produced in the preparation environment: Blender was not found there. The validation performed covers the files, paths, PNG, Python syntax, and dependency errors. Read `VALIDATION.md`.

The reconstruction target is **Blender 4.5.x LTS**, with its bundled Python and Cycles. The script refuses any other branch to avoid passing off an assumed compatibility as a test. No external Python module, Blender add-on, font, HDRI, or model is required. A standalone Python 3.10+ is enough to check the pack; the included tests were run with Python 3.14.6 on Windows.

## File tree and entry point

```text
blender-v1/
  README.md, LICENSE.txt, VALIDATION.md
  scene.json                    recipe, versions, dependencies and outputs
  manifest.sha256.json          size and SHA-256 of the distributed files
  generate_scene.py             entry point to run INSIDE Blender
  inspect_scene.py              inspection open in a second Blender
  validate_pack.py              file check WITHOUT Blender
  01_sources/make_texture.py     original recipe for the PNG
  02_projet/                    receives the reconstructed .blend
  03_ressources/pli-chevron.png  sRGB texture to be kept
  04_caches/                    no cache for this fixed scene
  05_rendus/                    receives the CPU preview if requested
  06_livraison/                 acceptance sheet and reports after execution
```

The manifest covers the distributed files, except itself, to avoid a circular fingerprint. Outputs created afterward are not part of this manifest. A fingerprint detects a file difference; it certifies neither its origin nor its appearance. For your own delivery, create a new dated inventory including the approved outputs.

## 1. Extract and verify before opening Blender

Extract the ZIP into a new folder, then open a terminal at the root `blender-v1`. Do not run any command from inside an archive that is still compressed.

```sh
python validate_pack.py --root . --json
```

The result must contain `"ok": true` and the exit code must be 0. A missing or altered file, a file outside the folder, or an invalid PNG causes a failure (code 1). Stop here if the check fails. Do not rewrite the manifest just to hide an error.

On Windows, `py -3` can replace `python`. `blender` below must refer to your Blender 4.5.x executable; if its folder is not in the PATH, use its full path in quotes (with `&` before that path in PowerShell).

## 2. Reconstruct in a dedicated Blender process

The script recreates an empty scene in memory; do not run it in an unsaved project. From the extracted folder:

```sh
blender --background --factory-startup --python-exit-code 1 --python generate_scene.py -- --render-preview
```

This command must create:

- `02_projet/renderparcel_pli_v1.blend`: fixed scene, image 1, camera `Pli_Camera`, Cycles CPU, 1,200 × 750 pixels and 64 samples;
- `05_rendus/pli_controle_cpu.png`: **if the render succeeds**, CPU preview at 480 × 300 pixels, 16 samples, no denoising;
- `06_livraison/reconstruction.json`: Blender version actually used, objects, chosen device, and actual render state.

Remove `-- --render-preview` to build only the `.blend`. The report will then state `renderExecuted: false`. The script saves the scene at its working definition before the reduced render; the `.blend` is therefore not overwritten with the preview settings. The commands never launch a GPU.

Existing outputs are refused. For a new attempt, extract the pack again into another folder, rather than overwriting a result you want to keep. An exception is reported to the system via `--python-exit-code 1`; keep the terminal messages if a failure occurs.

## 3. Reopen the scene in a second process

```sh
blender --background --factory-startup --python-exit-code 1 --python inspect_scene.py
```

The check opens the `.blend` without running its internal scripts, and verifies the ten objects, the camera, Cycles CPU, the settings, the one-frame range, AgX, the packed texture and its relative path. The result goes to `06_livraison/inspection-blender.json`. This check does not assess the beauty of the image and does not replace viewing it.

Then open the PNG with an image viewer. **Copy** `06_livraison/modele-reception.csv` to a new file `06_livraison/reception-executee.csv`, then fill in that copy: whole bottle within the frame, cream/purple/orange pattern on the front face, contact with the base, no magenta texture, legible reflections. The template stays unchanged to preserve its fingerprint; the completed copy is an output to be inventoried in your own delivery. These criteria are intentions to verify after reconstruction; no reference Blender render is included in the distributed version.

## 4. Verify the transfer without the old resources

Copy **the entire reconstructed folder** to the destination machine or to an environment where the creation workstation's paths are not accessible. Run the file check, then open the copy of the `.blend`. Simply moving it on the same workstation is not enough if the old absolute paths remain usable.

The external texture is kept in `03_ressources`. In the `.blend`, the intended path is `//../03_ressources/pli-chevron.png`, since `//` is relative to the Blender file located in `02_projet`. The generator loads the texture and then packs it via `Image.pack()` before saving. These two forms let you edit the source while controlling the packing; after editing, reload/pack and save the version you keep.

For an existing project: save in the target folder; use File → External Data → Make Paths Relative; run Report Missing Files. Find Missing Files can repair links but make them absolute: check them again. Pack Resources does not contain all external data, particularly videos. Linked libraries require their own procedure; this pack uses none.

## 5. Adapt the recipe to your project

Start with a separate copy, since any change to the sources invalidates the original manifest. Keep the software/version, camera, scene, engine, resolution, samples, view transform, textures, add-ons and output destination in a clean inventory. The pack's PNG is an sRGB base color, not a normal or displacement map.

This scene uses **no animation, no simulation cache, no sound, no fonts and no linked libraries**. If you add smoke, cloth or animated geometry, inventory the cache type, its location, the full range and the precomputation procedure. Freeze the caches before copying them. Check the intermediate frames and every file in the sequence: one correct frame 1 does not validate an animation.

The ZIP's size does not measure the render's VRAM. A reduced CPU preview cannot be used to estimate a GPU time. To size your production, measure your complete scene at the final resolution and check the memory peak with a margin for its demanding steps. Keep an independent backup until acceptance.

## Texture reconstruction, optional

```sh
python 01_sources/make_texture.py --output 05_rendus/motif-reconstruit.png
```

The pattern computation is deterministic and uses only integer operations. In the published tests, the reconstructed PNG bytes match the delivered file with the same zlib library. Between compression versions, also compare the pixels rather than assuming identical compressed bytes.

## Procedure sources

- [Blender 4.5 Manual, Packed Data](https://docs.blender.org/manual/sr/4.5/files/blend/packed_data.html): scope of Pack Resources, saving, and linked libraries.
- [Blender 4.5 Manual, External Data](https://docs.blender.org/manual/ja/4.5/interface/window_system/topbar.html): relative paths and finding missing files.
- [Blender 4.5 API, Wm Operators](https://docs.blender.org/api/4.5/bpy.ops.wm.html): saving and opening with internal scripts disabled.
- [Blender 4.0 API, Image](https://docs.blender.org/api/4.0/bpy.types.Image.html): external/packed image and the `pack` operation; accessible reference consulted, the 4.5 page was not accessible during this preparation.
- [Blender 4.5 Manual, command line](https://docs.blender.org/manual/es/4.5/advanced/command_line/arguments.html): script execution and Python exit code.
- [Blender 4.5 Manual, color management](https://docs.blender.org/manual/sr/4.5/render/color_management.html): texture interpretation and display transform.
- [Blender 4.5 Manual, baking](https://docs.blender.org/manual/fr/4.5/physics/baking.html): separate processing of caches and simulation ranges.

Official translations are used when the English page did not respond. They document the operations, without replacing the Blender test run that remains to be done. Commercial links and GPU selection appear in the RenderParcel guide, not in the technical recipe.

## Compatibility with earlier folders

New rebuilds save `02_projet/renderparcel_pli_v1.blend`. No file already created is moved or renamed. If this new output is absent, `inspect_scene.py` can still open `02_projet/prismora_pli_v1.blend`, the historical output name. If both files exist, the inspection chooses the new output.

The schema identifiers `prismora.blender-transfer.v1` and `prismora.integrity.v1`, the technical properties `prismora_pack_version` and `prismora_purpose`, as well as the internal module name `prismora_validator`, remain stable for reading v1 folders. These are compatibility keys, not the folder's displayed brand.
