[{"data":1,"prerenderedAt":413},["ShallowReactive",2],{"docs-nav:docs_en":3,"docs-page:\u002Fen\u002Fdocs\u002Fconcepts\u002Fassets":158,"docs-surround:\u002Fen\u002Fdocs\u002Fconcepts\u002Fassets":408},[4],{"title":5,"path":6,"stem":7,"children":8,"page":74},"En","\u002Fen","en",[9],{"title":10,"path":11,"stem":12,"children":13,"page":74},"Docs","\u002Fen\u002Fdocs","en\u002Fdocs",[14,75,134],{"title":15,"icon":16,"path":17,"stem":18,"children":19,"page":74},"Guides","i-lucide-book-open","\u002Fen\u002Fdocs\u002Fguides","en\u002Fdocs\u002F1.guides",[20,25,30,35,40,44,49,54,59,64,69],{"title":21,"path":22,"stem":23,"icon":24},"Introduction","\u002Fen\u002Fdocs\u002Fguides\u002Fintroduction","en\u002Fdocs\u002F1.guides\u002F01.introduction","i-lucide-info",{"title":26,"path":27,"stem":28,"icon":29},"Quick start","\u002Fen\u002Fdocs\u002Fguides\u002Fquick-start","en\u002Fdocs\u002F1.guides\u002F02.quick-start","i-lucide-play",{"title":31,"path":32,"stem":33,"icon":34},"Add the office computers","\u002Fen\u002Fdocs\u002Fguides\u002Foffice","en\u002Fdocs\u002F1.guides\u002F03.office","i-lucide-building-2",{"title":36,"path":37,"stem":38,"icon":39},"Rendering on GPU Rental Platforms","\u002Fen\u002Fdocs\u002Fguides\u002Fcloud","en\u002Fdocs\u002F1.guides\u002F04.cloud","i-lucide-cloud",{"title":41,"path":42,"stem":43},"Configuring Cloudflare R2 Storage","\u002Fen\u002Fdocs\u002Fguides\u002Fr2","en\u002Fdocs\u002F1.guides\u002F05.r2",{"title":45,"path":46,"stem":47,"icon":48},"Run the host on a NAS","\u002Fen\u002Fdocs\u002Fguides\u002Fnas","en\u002Fdocs\u002F1.guides\u002F06.nas","i-lucide-hard-drive",{"title":50,"path":51,"stem":52,"icon":53},"Devices in different places","\u002Fen\u002Fdocs\u002Fguides\u002Fremote","en\u002Fdocs\u002F1.guides\u002F07.remote","i-lucide-globe",{"title":55,"path":56,"stem":57,"icon":58},"Get the film","\u002Fen\u002Fdocs\u002Fguides\u002Ffilm","en\u002Fdocs\u002F1.guides\u002F08.film","i-lucide-film",{"title":60,"path":61,"stem":62,"icon":63},"When files change","\u002Fen\u002Fdocs\u002Fguides\u002Fupdate","en\u002Fdocs\u002F1.guides\u002F09.update","i-lucide-refresh-cw",{"title":65,"path":66,"stem":67,"icon":68},"When the host fails or moves","\u002Fen\u002Fdocs\u002Fguides\u002Fhost","en\u002Fdocs\u002F1.guides\u002F10.host","i-lucide-server-cog",{"title":70,"path":71,"stem":72,"icon":73},"FAQ","\u002Fen\u002Fdocs\u002Fguides\u002Ffaq","en\u002Fdocs\u002F1.guides\u002F11.faq","i-lucide-circle-help",false,{"title":76,"icon":77,"path":78,"stem":79,"children":80,"page":74},"Concepts","i-lucide-box","\u002Fen\u002Fdocs\u002Fconcepts","en\u002Fdocs\u002F2.concepts",[81,86,90,95,100,105,109,114,119,124,129],{"title":82,"path":83,"stem":84,"icon":85},"Workspace and host","\u002Fen\u002Fdocs\u002Fconcepts\u002Fworkspace","en\u002Fdocs\u002F2.concepts\u002F01.workspace","i-lucide-network",{"title":87,"path":88,"stem":89,"icon":48},"Store","\u002Fen\u002Fdocs\u002Fconcepts\u002Fstorage","en\u002Fdocs\u002F2.concepts\u002F02.storage",{"title":91,"path":92,"stem":93,"icon":94},"Assets, Unpacking & On-Demand Pull","\u002Fen\u002Fdocs\u002Fconcepts\u002Fassets","en\u002Fdocs\u002F2.concepts\u002F03.assets","i-lucide-images",{"title":96,"path":97,"stem":98,"icon":99},"Projects, tasks and versions","\u002Fen\u002Fdocs\u002Fconcepts\u002Ftasks","en\u002Fdocs\u002F2.concepts\u002F04.tasks","i-lucide-list-checks",{"title":101,"path":102,"stem":103,"icon":104},"Shots and chunks","\u002Fen\u002Fdocs\u002Fconcepts\u002Fshots","en\u002Fdocs\u002F2.concepts\u002F05.shots","i-lucide-clapperboard",{"title":106,"path":107,"stem":108,"icon":58},"Films","\u002Fen\u002Fdocs\u002Fconcepts\u002Ffilm","en\u002Fdocs\u002F2.concepts\u002F06.film",{"title":110,"path":111,"stem":112,"icon":113},"Blender and FFmpeg","\u002Fen\u002Fdocs\u002Fconcepts\u002Fruntimes","en\u002Fdocs\u002F2.concepts\u002F07.runtimes","i-lucide-package",{"title":115,"path":116,"stem":117,"icon":118},"Joining and access","\u002Fen\u002Fdocs\u002Fconcepts\u002Fjoining","en\u002Fdocs\u002F2.concepts\u002F08.joining","i-lucide-key-round",{"title":120,"path":121,"stem":122,"icon":123},"Render seats","\u002Fen\u002Fdocs\u002Fconcepts\u002Fseats","en\u002Fdocs\u002F2.concepts\u002F09.seats","i-lucide-gauge",{"title":125,"path":126,"stem":127,"icon":128},"Backup and takeover","\u002Fen\u002Fdocs\u002Fconcepts\u002Fbackup","en\u002Fdocs\u002F2.concepts\u002F10.backup","i-lucide-life-buoy",{"title":130,"path":131,"stem":132,"icon":133},"Plugins","\u002Fen\u002Fdocs\u002Fconcepts\u002Fplugins","en\u002Fdocs\u002F2.concepts\u002F11.plugins","i-lucide-puzzle",{"title":135,"icon":136,"path":137,"stem":138,"children":139,"page":74},"Reference","i-lucide-library","\u002Fen\u002Fdocs\u002Freference","en\u002Fdocs\u002F3.reference",[140,145,150,154],{"title":141,"path":142,"stem":143,"icon":144},"Command line","\u002Fen\u002Fdocs\u002Freference\u002Fcli","en\u002Fdocs\u002F3.reference\u002F1.cli","i-lucide-terminal",{"title":146,"path":147,"stem":148,"icon":149},"Configuration","\u002Fen\u002Fdocs\u002Freference\u002Fconfig","en\u002Fdocs\u002F3.reference\u002F2.config","i-lucide-sliders",{"title":151,"path":152,"stem":153},"HTTP API","\u002Fen\u002Fdocs\u002Freference\u002Fapi","en\u002Fdocs\u002F3.reference\u002F3.api",{"title":155,"path":156,"stem":157},"Plugin development","\u002Fen\u002Fdocs\u002Freference\u002Fplugins","en\u002Fdocs\u002F3.reference\u002F4.plugins",{"id":159,"title":91,"body":160,"description":402,"extension":403,"meta":404,"navigation":405,"path":92,"seo":406,"stem":93,"__hash__":407},"docs_en\u002Fen\u002Fdocs\u002F2.concepts\u002F03.assets.md",{"type":161,"value":162,"toc":392},"minimark",[163,168,172,180,211,226,230,233,267,271,278,308,312,315,358,362,365],[164,165,167],"h2",{"id":166},"assets-and-traditional-farm-bottlenecks","Assets and Traditional Farm Bottlenecks",[169,170,171],"p",{},"In 3D animation and VFX pipelines, asset files (textures, HDRIs, cache caches, audio, and linked libraries) usually account for over 90% of the project's total size.",[169,173,174,175,179],{},"Artists often enable \"Pack Resources\" in Blender, embedding hundreds of textures into a ",[176,177,178],"code",{},".blend"," file, or repeatedly link shared character and environment libraries across multiple shots. In traditional render farms, this causes severe bottlenecks:",[181,182,183,191,197],"ul",{},[184,185,186,190],"li",{},[187,188,189],"strong",{},"Bloated files & explosive versioning",": Tweak a single keyframe or light intensity, and the newly saved file still carries gigabytes of embedded textures. Every submission requires uploading gigabytes over again, wasting disk space and bandwidth.",[184,192,193,196],{},[187,194,195],{},"Redundant transfers",": When 5 render nodes collaborate on a shot, traditional workflows force each machine to sync all project assets in full, even if a node only renders a distant background element.",[184,198,199,202,203,206,207,210],{},[187,200,201],{},"Cross-platform path breakage",": Textures referenced on Windows (such as ",[176,204,205],{},"Tex\\Wood.PNG",") fail on Linux cloud instances due to case mismatches (where the disk file is ",[176,208,209],{},"tex\\wood.png",") or backslash separators, resulting in pink missing textures.",[169,212,213,214,217,218,221,222,225],{},"danio solves these challenges through ",[187,215,216],{},"automatic asset unpacking",", ",[187,219,220],{},"content-addressable deduplication",", and ",[187,223,224],{},"on-demand Range pulling",".",[164,227,229],{"id":228},"automatic-unpacking-streamlined-projects","Automatic Unpacking & Streamlined Projects",[169,231,232],{},"When you submit via the Blender extension or drag a file into danio, the background analyzer traces all external and internal dependencies:",[234,235,236,249,258],"ol",{},[184,237,238,241,242,244,245,248],{},[187,239,240],{},"Automatic unpacking",": Textures, fonts, and sounds packed into the main ",[176,243,178],{}," or linked libraries are extracted into danio's local cache, named after their ",[187,246,247],{},"content hash"," without altering your original files.",[184,250,251,254,255,257],{},[187,252,253],{},"Lightweight snapshots & reference rewriting",": Extracted assets are mapped as standardized relative references in the snapshot. The submitted entry ",[176,256,178],{}," copy strips embedded textures, slimming down to a lightweight project structure (often just a few megabytes).",[184,259,260,263,264,266],{},[187,261,262],{},"Cache acceleration",": Resubmitting the same library or ",[176,265,178],{}," reuses prior extraction and rewriting results if contents have not changed, reducing scanning time for large scenes to seconds.",[164,268,270],{"id":269},"upload-once-per-texture-global-deduplication","Upload Once per Texture (Global Deduplication)",[169,272,273,274,277],{},"danio manages assets by ",[187,275,276],{},"content-addressable storage (CAS)"," using SHA-256 hashes instead of file names or folder paths:",[181,279,280,292,302],{},[184,281,282,285,286,289,290,225],{},[187,283,284],{},"Cross-version deduplication",": When updating a task to Version 2 or 3, unchanged textures keep identical hashes. Danio queries the host's index before upload, and already-uploaded textures are ",[187,287,288],{},"completely skipped",", transmitting only the modified ",[176,291,178],{},[184,293,294,297,298,301],{},[187,295,296],{},"Cross-project & cross-shot deduplication",": Deduplication spans across the entire workspace. If Shot 01, Shot 02, or a completely different project shares the same 4K HDRI or character model, that asset is ",[187,299,300],{},"stored only once and uploaded only once"," in the workspace.",[184,303,304,307],{},[187,305,306],{},"In-place ingestion on shared NAS",": When projects reference shared assets on a studio NAS, if the host runs directly on the NAS (such as in Docker), it reads and packs assets directly on the NAS disk. Artist workstations never need to round-trip heavy assets over the local network.",[164,309,311],{"id":310},"pack-volumes-on-demand-range-pulling","Pack Volumes & On-Demand Range Pulling",[169,313,314],{},"To balance network efficiency and object storage costs, danio avoids scattering millions of loose files across storage (which incurs heavy API fees) while avoiding monolithic single-archive downloads:",[181,316,317,326,344],{},[184,318,319,322,323,325],{},[187,320,321],{},"~256 MB Pack volumes",": Files smaller than 64 MB (textures, shader scripts) are bundled into ~256 MB immutable tar packs grouped by directory proximity. Entries use fast zstd compression (pre-compressed formats like PNG\u002FJPEG\u002FMP4 are stored as-is). Files 64 MB and larger, as well as the main ",[176,324,178],{},", get their own dedicated packs.",[184,327,328,331,332,335,336,339,340,343],{},[187,329,330],{},"On-demand Range pulling",": When a worker takes a chunk, it compares its local cache and identifies only the files needed for that chunk. In object storage (such as Cloudflare R2), the worker uses HTTP ",[176,333,334],{},"Range"," headers (",[176,337,338],{},"bytes=offset-length",") to ",[187,341,342],{},"read only the exact byte range"," of the target file, without downloading the entire 256 MB pack.",[184,345,346,349,350,353,354,357],{},[187,347,348],{},"Zero-copy hardlink mounting",": Pulled files are verified against their SHA-256 hashes and cached locally. When preparing a job environment, danio links files into ",[176,351,352],{},"jobs\u002F"," via filesystem ",[187,355,356],{},"hard links"," or block cloning, creating the workspace instantly without duplicating disk consumption.",[164,359,361],{"id":360},"linked-libraries-cross-platform-reliability","Linked Libraries & Cross-Platform Reliability",[169,363,364],{},"Large productions rely extensively on Blender's Linked Libraries. danio safeguards these assets automatically:",[181,366,367,376,382],{},[184,368,369,372,373,375],{},[187,370,371],{},"Missing library alerts & one-click relinking",": If a referenced ",[176,374,178],{}," library path is missing during submission, danio flags it with a yellow warning and lets you select the new location directly in the submission dialog, rewriting the snapshot without modifying your source files.",[184,377,378,381],{},[187,379,380],{},"Case sensitivity correction",": Windows and macOS filesystems are case-insensitive, so referenced texture paths frequently mismatch the exact casing on disk. Linux render nodes reject mismatched casing. danio checks actual disk names and rewrites paths to match disk casing, ensuring textures load cleanly on Linux cloud nodes.",[184,383,384,387,388,391],{},[187,385,386],{},"Long path protection",": Windows imposes a 260-character path limit. For deeply nested project directories, danio automatically applies ",[176,389,390],{},"\\\\?\\UNC"," path prefixes to rendering copies, preventing Blender from failing to load long asset paths.",{"title":393,"searchDepth":394,"depth":395,"links":396},"",2,3,[397,398,399,400,401],{"id":166,"depth":394,"text":167},{"id":228,"depth":394,"text":229},{"id":269,"depth":394,"text":270},{"id":310,"depth":394,"text":311},{"id":360,"depth":394,"text":361},"How packed assets are unpacked, how textures upload once, on-demand range pulls and library rewriting.","md",{},{"icon":94},{"title":91,"description":402},"2EOJ4RhAcFYBh20KdZ-MXEsBgdGZpgN9vnhUAx_rPKw",[409,411],{"title":87,"path":88,"stem":89,"description":410,"icon":48,"children":-1},"Where a workspace's files live, how to choose a store, and caches, storage usage and cleanup.",{"title":96,"path":97,"stem":98,"description":412,"icon":99,"children":-1},"What projects, tasks and versions are, which states a task goes through, and how the queue and local render work.",1794619223480]