From 9f27d66b4d1f2194a6e7555cd2fcf84c99b6af0a Mon Sep 17 00:00:00 2001 From: Raincloud Date: Thu, 31 Jul 2025 22:01:59 -0600 Subject: [PATCH] batpack torture --- ...-58Z-managing-blender-projects-with-git.md | 715 ++++++++++++++++++ blends/Springtrap_Goopie.blend | 4 +- scripts/relocate_libraries.py | 83 ++ 3 files changed, 800 insertions(+), 2 deletions(-) create mode 100644 scripts/relocate_libraries.py diff --git a/.specstory/history/2025-08-01_01-58Z-managing-blender-projects-with-git.md b/.specstory/history/2025-08-01_01-58Z-managing-blender-projects-with-git.md index f5ccd38..854b1b8 100644 --- a/.specstory/history/2025-08-01_01-58Z-managing-blender-projects-with-git.md +++ b/.specstory/history/2025-08-01_01-58Z-managing-blender-projects-with-git.md @@ -1988,3 +1988,718 @@ The `Shift + S` menu is one of Blender's most useful context menus - it handles --- +_**User**_ + +Error packing with BAT: Action KEEP_PATH on C:\Users\Nathan\SynologyDrive\BlenderAssets\OG\fnaf\fn3map_v3.0.blend has no final path set, unable to process +Traceback (most recent call last): + File "E:\SteamLibrary\steamapps\common\Blender\portable\scripts\addons\flamenco\bat\interface.py", line 148, in run + self._run() + File "E:\SteamLibrary\steamapps\common\Blender\portable\scripts\addons\flamenco\bat\interface.py", line 165, in _run + self.packer.execute() + File "E:\SteamLibrary\steamapps\common\Blender\portable\scripts\addons\flamenco\wheels\blender_asset_tracer-1.18-py3-none-any.whl\blender_asset_tracer\pack\__init__.py", line 391, in execute + self._rewrite_paths() + File "E:\SteamLibrary\steamapps\common\Blender\portable\scripts\addons\flamenco\wheels\blender_asset_tracer-1.18-py3-none-any.whl\blender_asset_tracer\pack\__init__.py", line 479, in _rewrite_paths + bfile_pp is not None +AssertionError: Action KEEP_PATH on C:\Users\Nathan\SynologyDrive\BlenderAssets\OG\fnaf\fn3map_v3.0.blend has no final path set, unable to process +Error performing BAT pack: Action KEEP_PATH on C:\Users\Nathan\SynologyDrive\BlenderAssets\OG\fnaf\fn3map_v3.0.blend has no final path set, unable to process +Error: Error performing BAT pack: Action KEEP_PATH on C:\Users\Nathan\SynologyDrive\BlenderAssets\OG\fnaf\fn3map_v3.0.blend has no final path set, unable to process + +--- + +_**Assistant**_ + +This is a **Blender Asset Tracer (BAT)** error related to Flamenco's asset packing system. The issue is that BAT can't determine where to place the `fn3map_v3.0.blend` file in the packed assets. + +## Quick Fixes: + +**1. Check the file path:** +- Make sure `fn3map_v3.0.blend` exists at `C:\Users\Nathan\SynologyDrive\BlenderAssets\OG\fnaf\` +- Verify the file isn't corrupted or locked + +**2. Relink the asset:** +- In Blender, go to **File → External Data → Relocate Missing Files** +- Or **File → External Data → Find Missing Files** + +**3. Clear BAT cache:** +- Close Blender +- Delete BAT cache folders (usually in temp directories) +- Restart Blender + +**4. Alternative approach:** +- **File → External Data → Pack All Into .blend** +- This packs everything into the current file instead of using BAT + +**5. Check Flamenco settings:** +- In Flamenco add-on settings, verify the asset packing configuration +- Make sure the destination paths are properly set + +## Root Cause: +BAT is trying to keep the original path structure but can't determine where to place the file in the packed assets. This often happens with: +- Missing files +- Corrupted file references +- Path conflicts +- Synology Drive sync issues + +Try the "Pack All Into .blend" approach first - it's simpler and avoids BAT path resolution issues. + +--- + +_**User**_ + + + +--- + +_**Assistant**_ + +Looking at your Blender Info Log, I can see the core issue: **all 20 files failed to be made relative** and BAT can't pack absolute file paths. + +## The Problem: +- Your files are on **absolute paths** (`C:\Users\Nathan\SynologyDrive\...`) +- BAT needs **relative paths** to pack them properly +- The `fn3map_v3.0.blend` and `Springtrap_v10.0.blend` files are causing the main error + +## Solutions: + +**1. Fix the library files first:** +``` +File → External Data → Relocate Missing Files +``` +Then select the correct paths for your `.blend` library files. + +**2. Make paths relative:** +``` +File → External Data → Make All Paths Relative +``` + +**3. Alternative - Pack everything into the current file:** +``` +File → External Data → Pack All Into .blend +``` +This bypasses BAT entirely and embeds all assets. + +**4. Check your project structure:** +- Move your assets to be relative to your project folder +- Or set up proper relative paths in your `.blend` files + +**5. For Flamenco specifically:** +- Try submitting the job without BAT packing first +- Or use the "Pack All Into .blend" approach before submitting + +The key issue is that BAT can't handle absolute paths from Synology Drive. Either make the paths relative or pack everything into the `.blend` file directly. + +--- + +_**User**_ + +1. the library files are FINE, it's just having a fit because they're absolute +2. I can't make them relative because they're not on the same drive. +3. this doesn't work because they're absolute +4. I don't see why blender and/or the flamenco addon can't just take the damn data that's already loaded into blender, and just send it. I seriously don't understand what's so hard about that and I don't want to copy my entire asset library over for every single project that I have. I want a 1-2 click solution, not a project management catastrophe. +5. I CAN'T. Do I have to disable batpack in the javascript or something? why isn't the asset tracer coded to handle libraries across multiple drives? + +--- + +_**Assistant**_ + +You're absolutely right - this is a **terrible design flaw** in BAT/Flamenco. It should just pack what's already loaded in Blender, not try to reorganize your entire asset library. + +## Quick Fix - Disable BAT Packing: + +**In Flamenco add-on settings:** +1. Go to **Edit → Preferences → Add-ons** +2. Find **Flamenco** add-on +3. Click **Preferences** +4. Look for **"Asset Packing"** or **"BAT Packing"** option +5. **Disable it** or set to **"None"** + +## Alternative - Force Pack Current Data: + +**Try this in the Python console:** +```python +# Pack everything currently loaded into the .blend file +bpy.ops.file.pack_all() + +# Then submit to Flamenco +bpy.ops.flamenco.submit_job(job_name="Springtrap_Goopie") +``` + +## Why This Sucks: +- BAT is trying to be "smart" about asset management +- But it's being **stupid** about cross-drive libraries +- It should just pack what's in memory, not reorganize your file system +- This is a common complaint about Flamenco's asset handling + +## Workaround: +If you can't disable BAT, try: +1. **File → Pack All Into .blend** (embeds everything) +2. **Save As** to a new file +3. Submit that packed file to Flamenco + +The fact that you have to jump through these hoops for a simple render submission is ridiculous. Flamenco should just render what Blender has loaded, period. + +--- + +_**User**_ + +alrighty. can you make me a script that takes linked library .blends from the bottom location (local synology drive file sync) and relocates them to their mirrors on the R:\ nas storage? + +--- + +_**Assistant**_ + +Here's a script that will relocate your linked library files from the Synology Drive sync to your NAS storage: + + +--- + +
Edit file: relocate_libraries.py + +Creating a Blender script to relocate linked library files from Synology Drive to NAS storage + +**Chunk 1** +Lines added: 83, lines removed: 1 + +```diff +@@ -1,1 +1,83 @@ +- ++ import bpy ++ import os ++ import re ++ ++ def relocate_libraries(): ++ """ ++ Relocate linked library files from Synology Drive to NAS storage. ++ Changes paths from C:\Users\Nathan\SynologyDrive\ to R:\ ++ """ ++ ++ # Define the path mappings ++ old_base = r"C:\Users\Nathan\SynologyDrive" ++ new_base = r"R:" ++ ++ # Track changes ++ changed_files = [] ++ failed_files = [] ++ ++ print("=== Library Relocation Script ===") ++ print(f"Mapping: {old_base} → {new_base}") ++ print() ++ ++ # Process all library files ++ for lib in bpy.data.libraries: ++ if lib.filepath: ++ old_path = lib.filepath ++ ++ # Check if this is a Synology Drive path ++ if old_base in old_path: ++ # Create new path ++ new_path = old_path.replace(old_base, new_base) ++ ++ # Verify the new file exists ++ if os.path.exists(new_path): ++ try: ++ # Update the library path ++ lib.filepath = new_path ++ changed_files.append((old_path, new_path)) ++ print(f"✓ Relocated: {os.path.basename(old_path)}") ++ print(f" {old_path}") ++ print(f" → {new_path}") ++ print() ++ except Exception as e: ++ failed_files.append((old_path, str(e))) ++ print(f"✗ Failed to relocate: {os.path.basename(old_path)}") ++ print(f" Error: {e}") ++ print() ++ else: ++ failed_files.append((old_path, "Target file not found")) ++ print(f"✗ Target not found: {new_path}") ++ print() ++ else: ++ print(f"ℹ Skipped (not Synology Drive): {old_path}") ++ print() ++ ++ # Summary ++ print("=== Summary ===") ++ print(f"Successfully relocated: {len(changed_files)} files") ++ print(f"Failed to relocate: {len(failed_files)} files") ++ ++ if changed_files: ++ print("\nRelocated files:") ++ for old, new in changed_files: ++ print(f" {os.path.basename(old)}") ++ ++ if failed_files: ++ print("\nFailed files:") ++ for old, reason in failed_files: ++ print(f" {os.path.basename(old)}: {reason}") ++ ++ return len(changed_files), len(failed_files) ++ ++ # Run the script ++ if __name__ == "__main__": ++ success_count, fail_count = relocate_libraries() ++ ++ if success_count > 0: ++ print(f"\n✅ Successfully relocated {success_count} library files!") ++ print("You may need to save your .blend file to preserve these changes.") ++ ++ if fail_count > 0: ++ print(f"\n⚠️ {fail_count} files failed to relocate.") ++ print("Check that the NAS paths exist and are accessible.") +``` + +
+ +--- + +## How to Use: + +**1. Copy the script to Blender's text editor:** +- Open Blender's **Text Editor** +- Create a new text file +- Paste the script +- Save it as `relocate_libraries.py` + +**2. Run the script:** +- In the Text Editor, click **Run Script** +- Or use **Alt + P** to run it + +**3. What it does:** +- Finds all linked library files with Synology Drive paths +- Maps `C:\Users\Nathan\SynologyDrive\` → `R:\` +- Verifies the NAS files exist before changing paths +- Reports success/failure for each file + +**4. After running:** +- **Save your .blend file** to preserve the changes +- The library paths will now point to your NAS storage +- This should resolve the BAT packing issues + +## Customization: +If your NAS path is different, change this line: +```python +new_base = r"R:" # Change to your actual NAS path +``` + +The script will show you exactly what it's doing and report any files that can't be relocated. This should fix your Flamenco/BAT issues by moving everything to relative paths on the same drive. + +--- + +_**User**_ + +@relocate_libraries.py +Python: File "R:\Creative\artsy\maya\2025-07-29 Springtrap_Goopie\blends\Springtrap_Goopie.blend\relocate_libraries.py", line 9 + """ + Relocate linked library files from Synology Drive to NAS storage. + Changes paths from C:\Users\Nathan\SynologyDrive\ to R:\ + """ + ^ +SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 96-97: truncated \UXXXXXXXX escape + + +--- + +_**Assistant**_ + +The issue is with the backslashes in the docstring being interpreted as unicode escape sequences. Let me fix that: + +--- + +
Edit file: scripts/relocate_libraries.py + +undefined + +**Chunk 1** +Lines added: 1, lines removed: 1 + +```diff +@@ -6,5 +6,5 @@ + """ + Relocate linked library files from Synology Drive to NAS storage. +- Changes paths from C:\Users\Nathan\SynologyDrive\ to R:\ ++ Changes paths from C:\\Users\\Nathan\\SynologyDrive\\ to R:\\ + """ + +``` + +
+ +--- + +Perfect! The issue was that Python was trying to interpret the backslashes in the docstring as unicode escape sequences. I've fixed it by properly escaping the backslashes with double backslashes (`\\`). + +The script should now run without syntax errors. The actual path mappings use raw strings (`r"..."`) so they're not affected by this issue - it was just the docstring causing problems. + +Try running the script again in Blender! + +--- + +_**User**_ + +how the hell is it doing this when the script clearly worked + +Error performing BAT pack: Action KEEP_PATH on C:\Users\Nathan\SynologyDrive\BlenderAssets\OG\fnaf\fn3map_v3.0.blend has no final path set, unable to process + +--- + +_**Assistant**_ + +The script successfully relocated the **currently loaded** library references in Blender's memory, but the **saved .blend file still contains the old paths**. BAT is reading the file from disk, not from memory. + +## The Problem: +- Your script fixed the paths **in memory** +- But the **.blend file on disk** still has the old Synology Drive paths +- BAT reads the file directly and sees the old paths + +## Solutions: + +**1. Save the file after running the script:** +``` +File → Save (Ctrl+S) +``` +This writes the corrected paths to disk. + +**2. Or save as a new file:** +``` +File → Save As → "Springtrap_Goopie_fixed.blend" +``` + +**3. Verify the paths were saved:** +- Close Blender completely +- Reopen the saved file +- Check that the library paths are now pointing to `R:\` + +**4. Then try BAT packing again** + +## Why This Happens: +BAT doesn't use Blender's current scene data - it **parses the .blend file directly** from disk to analyze dependencies. So even though your script worked perfectly in memory, BAT is still seeing the old file on disk with the Synology Drive paths. + +After you save the file with the corrected paths, BAT should be able to process it properly since everything will be on the same drive (`R:\`). + +--- + +_**User**_ + +still getting the same error despite the paths being properly set. so there's something else here. + +--- + +_**Assistant**_ + +You're right - there's something deeper going on. Let me help debug this: + +## Debug Steps: + +**1. Check what BAT is actually seeing:** +Run this in Blender's Python console to see all dependencies: +```python +import bpy +print("=== All Library Dependencies ===") +for lib in bpy.data.libraries: + print(f"Library: {lib.filepath}") + +print("\n=== All External Files ===") +for img in bpy.data.images: + if img.filepath: + print(f"Image: {img.filepath}") + +for sound in bpy.data.sounds: + if sound.filepath: + print(f"Sound: {sound.filepath}") +``` + +**2. Check if there are hidden/indirect references:** +The `fn3map_v3.0.blend` might be referenced **inside another library file**, not directly in your main file. + +**3. Look at the specific file BAT is complaining about:** +- Open `fn3map_v3.0.blend` directly +- Check what **it** is linking to +- It might have its own Synology Drive references + +**4. Check Flamenco job settings:** +- In Flamenco submission panel +- Look for any **hardcoded paths** or **job settings** that override the file paths + +**5. Try without BAT entirely:** +In Flamenco preferences, try setting: +- **Asset Packing**: Off/Disabled +- Submit the job without asset packing + +The `fn3map_v3.0.blend` file itself might contain absolute paths to other files, or there might be nested library dependencies that your script didn't catch. + +What do you see when you run that debug script? + +--- + +_**User**_ + +PYTHON INTERACTIVE CONSOLE 3.11.11 (main, May 31 2025, 09:35:27) [MSC v.1929 64 bit (AMD64)] + +Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, bpy.utils, bgl, gpu, blf, mathutils +Convenience Imports: from mathutils import *; from math import * +Convenience Variables: C = bpy.context, D = bpy.data + +>>> import bpy +>>> print("=== All Library Dependencies ===") +=== All Library Dependencies === + +>>> for lib in bpy.data.libraries: +... print(f"Library: {lib.filepath}") +... +Library: R:\BlenderAssets\OG\fnaf\fn3map_v3.0.blend +Library: R:\BlenderAssets\OG\fnaf\Springtrap_v10.0.blend + +>>> print("\n=== All External Files ===") + +=== All External Files === + +>>> for img in bpy.data.images: +... if img.filepath: +... print(f"Image: {img.filepath}") +... +Image: E:\SteamLibrary\steamapps\common\Blender\portable\extensions\user_default\blenderkit\thumbnails\blenderkit_logo.png +Image: E:\SteamLibrary\steamapps\common\Blender\portable\extensions\user_default\blenderkit\thumbnails\vs_rejected.png +Image: E:\Textures\fnaf3\orange wallpaper.png +Image: E:\Textures\fnaf3\tile white.png +Image: E:\Textures\fnaf3\wallpaper.png +Image: //textures\fn3map\innerjaw.png +Image: //textures\fn3map\pimgpsh_fullsize_distr.png +Image: //textures\fn3map\blackspecular.png +Image: //textures\fn3map\boblehed.png +Image: //textures\fn3map\bonnie arcade.png +Image: //textures\fn3map\Bsuit_1.png +Image: //textures\fn3map\Bsuit_2.png +Image: //textures\fn3map\bowtie.png +Image: //textures\fn3map\bump.png +Image: //textures\fn3map\bush.png +Image: //textures\fn3map\beak.png +Image: //textures\fn3map\csuit_1.png +Image: //textures\fn3map\cup.png +Image: //textures\fn3map\Fcfb60b2b09d2ffc67e8d3ada0e33b04.png +Image: //textures\fn3map\drawingsp.png +Image: //textures\fn3map\drawings.png +Image: //textures\fn3map\fnaf1endo1.png +Image: //textures\fn3map\blackspec1.png +Image: //textures\fn3map\fnafenv.png +Image: //textures\fn3map\Foxy Arcade.png +Image: //textures\fn3map\fxinnerjaw.png +Image: //textures\fn3map\fxsuit_1.png +Image: //textures\fn3map\fxsuit_2.png +Image: //textures\fn3map\fred arc.png +Image: //textures\fn3map\suit_2.png +Image: //textures\fn3map\suit_1.png +Image: //textures\fn3map\fteeths.png +Image: //textures\fn3map\fteeths.png +Image: //textures\fn3map\fright brick.png +Image: //textures\fn3map\lamp2.png +Image: //textures\fn3map\nose normal.png +Image: //textures\fn3map\orange wallpaper.png +Image: //textures\fn3map\pizza.png +Image: //textures\fn3map\presp.png +Image: //textures\fn3map\roof tiles.png +Image: //textures\fn3map\teeths.png +Image: //textures\fn3map\Specular.png +Image: //textures\fn3map\spooker msmam.png +Image: //textures\fn3map\suit1.png +Image: //textures\fn3map\suit1_5.png +Image: //textures\fn3map\tile white.png +Image: //textures\fn3map\bump.png +Image: //textures\fn3map\aa8a0ffd12ea7b78ecfc5cdf0653dea8.png +Image: //textures\fn3map\wire.png +Image: //textures\fn3map\vacbump2.png +Image: //textures\fn3map\vent.png +Image: //textures\fn3map\wallpaper.png +Image: //textures\fn3map\suit_dark.png +Image: //textures\fn3map\newbump2.png +Image: //textures\fn3map\wiress.png +Image: //textures\fn3map\wooden texture.png +Image: R:\BlenderAssets\OG\fnaf\textures\Springtrap V9\bUMP.png +Image: R:\BlenderAssets\OG\fnaf\textures\Springtrap V9\Eye.png +Image: R:\BlenderAssets\OG\fnaf\textures\Springtrap V9\Flesh.png +Image: R:\BlenderAssets\OG\fnaf\textures\Springtrap V9\FleshBump.png +Image: R:\BlenderAssets\OG\fnaf\textures\Springtrap V9\Pupil.png +Image: R:\BlenderAssets\OG\fnaf\textures\Springtrap V9\Suit1.png +Image: R:\BlenderAssets\OG\fnaf\textures\Springtrap V9\Suit2.png +Image: R:\BlenderAssets\OG\fnaf\textures\Springtrap V9\Suit3.png +Image: R:\BlenderAssets\OG\fnaf\textures\Springtrap V9\SuitTeeth.png + +>>> for sound in bpy.data.sounds: +... if sound.filepath: +... print(f"Sound: {sound.filepath}") +... +Sound: E:\SynologyDrive\Creative\artsy\maya\2021-04-12 springtrapcameramove\mayaport\sourceimages\kolors\goopiedanceoriginal.mp4 + +>>> + +--- + +_**Assistant**_ + +**FOUND IT!** There's your problem - look at the last line: + +``` +Sound: E:\SynologyDrive\Creative\artsy\maya\2021-04-12 springtrapcameramove\mayaport\sourceimages\kolors\goopiedanceoriginal.mp4 +``` + +BAT is choking on this **sound file** that's still pointing to your **E:\SynologyDrive** path. My script only relocated **library files**, not **sound files**. + +## Quick Fix: + +Run this updated script to fix the sound file: + +```python +import bpy +import os + +def fix_sound_paths(): + print("=== Fixing Sound File Paths ===") + + # Path mappings + old_base_e = r"E:\SynologyDrive" + old_base_c = r"C:\Users\Nathan\SynologyDrive" + new_base = r"R:" + + for sound in bpy.data.sounds: + if sound.filepath: + old_path = sound.filepath + new_path = None + + # Check for E:\ SynologyDrive path + if old_base_e in old_path: + new_path = old_path.replace(old_base_e, new_base) + # Check for C:\ SynologyDrive path + elif old_base_c in old_path: + new_path = old_path.replace(old_base_c, new_base) + + if new_path and os.path.exists(new_path): + sound.filepath = new_path + print(f"✓ Fixed sound: {os.path.basename(old_path)}") + print(f" {old_path} → {new_path}") + elif new_path: + print(f"✗ Sound file not found: {new_path}") + else: + print(f"ℹ Skipped: {old_path}") + +# Run it +fix_sound_paths() +``` + +After running this, **save your file** and try BAT again. The `goopiedanceoriginal.mp4` file was the culprit! + +--- + +_**User**_ + +what is it referring to by 'no final path set'? why can't it just say what path it's having an anyeurism about? +does this mean anything?: + + +Warning! 'E:\\SteamLibrary\\steamapps\\common\\Blender\\4.5\\scripts\\startup\\fa_hotkeys.py' has no register function, this is now a requirement for registerable scripts +register_class(...): +Warning: 'Submenu' does not contain '_MT_' with prefix and suffix +register_class(...): +Warning: 'Submenu2' does not contain '_MT_' with prefix and suffix +register_class(...): +Warning: 'Submenu3' does not contain '_MT_' with prefix and suffix +register_class(...): +Warning: 'view3D.Pie_menu' does not contain '_MT_' with prefix and suffix +register_class(...): +Warning: 'CustomPanel' does not contain '_PT_' with prefix and suffix +register_class(...): +Warning: 'view3D.Quad_menu' does not contain '_MT_' with prefix and suffix +register_class(...): +Warning: 'Special_Tools_Menu' does not contain '_MT_' with prefix and suffix +module changed on disk: 'E:\\SteamLibrary\\steamapps\\common\\Blender\\4.5\\scripts\\startup\\delete_withoutConfirm.py' reloading... +register_class(...): +Info: Registering operator class: 'Delete_withoutConfirm', bl_idname 'edit.delete_without_confirm' has been registered before, unregistering previous +cc_blender_tools_updater updater verbose is enabled +cc_blender_tools_updater Updater: Read in JSON settings from file +Cannot read ARP prefs +Update armature presets... +animation_layers_updater addon: Verbose is enabled +animation_layers_updater addon: Read in JSON settings from file +Reloading external rigs... +Reloading external metarigs... +Subdivision Surface modifiers removed from all objects. +Addon preferences registered successfully: +Bulk Path Management registered successfully +register_class(...): +Warning: 'List_View' does not contain '_UL_' with prefix and suffix +WARN (bgl): C:\Users\blender\git\blender-v450\blender.git\source\blender\python\generic\bgl.cc:2673 BPyInit_bgl: 'bgl' imported without an OpenGL backend. Please update your add-ons to use the 'gpu' module. +animtoolbox addon: Verbose is enabled +register_class(...): +Info: Registering operator class: 'Restart', bl_idname 'wm.restart_blender' has been registered before, unregistering previous +animtoolbox addon: Read in JSON settings from file +🔄 blenderkit: Verbose is enabled +🔄 blenderkit: Read in JSON settings from file +ℹ️ blenderkit: Ports reordered so first port is now 62485 (previous index was 0) [21:55:35.529, client_lib.py:125] +Render Preset --- Startup handler +Render Preset --- Reloading presets +Error in bpy.app.handlers.load_post[5]: +Traceback (most recent call last): + File "E:\SteamLibrary\steamapps\common\Blender\portable\extensions\blender_org\render_preset\manage_presets.py", line 695, in reload_preset_startup + reload_presets() + File "E:\SteamLibrary\steamapps\common\Blender\portable\extensions\blender_org\render_preset\manage_presets.py", line 626, in reload_presets + folder = get_preset_folder() + ^^^^^^^^^^^^^^^^^^^ + File "E:\SteamLibrary\steamapps\common\Blender\portable\extensions\blender_org\render_preset\manage_presets.py", line 23, in get_preset_folder + os.makedirs(folder) + File "", line 215, in makedirs + File "", line 215, in makedirs + File "", line 215, in makedirs + File "", line 225, in makedirs +FileNotFoundError: [WinError 53] The network path was not found: '\\\\NAS\\amazon\\' +Error in bpy.app.handlers.load_post[14]: +Traceback (most recent call last): + File "E:\SteamLibrary\steamapps\common\Blender\portable\scripts\addons\blender_visual_scripting_addon\handlers.py", line 32, in load_handler + check_easy_bpy_install() + File "E:\SteamLibrary\steamapps\common\Blender\portable\scripts\addons\blender_visual_scripting_addon\settings\easybpy.py", line 11, in check_easy_bpy_install + for filename in os.listdir(path): + ^^^^^^^^^^^^^^^^ +NotADirectoryError: [WinError 267] The directory name is invalid: 'E:\\SteamLibrary\\steamapps\\common\\Blender\\portable\\scripts\\addons\\flamenco\\wheels\\python_dateutil-2.8.2-py2.py3-none-any.whl' +Created history step 9cc800bc-e614-4dae-9d91-52956582c5cb +ℹ️ blenderkit: Created new search history step [21:55:38.271, search.py:1736] +Info: Saved copy as "2025-55-31_21-55_Unnamed.blend" +Incremental Autosave: Saved file: E:\BlenderCache\2025-55-31_21-55_Unnamed.blend +Read blend: "C:\Users\Nathan\SynologyDrive\BlenderAssets\OG\fnaf\fn3map_v3.0.blend" +Render Preset --- Startup handler +Render Preset --- Reloading presets +Error in bpy.app.handlers.load_post[5]: +Traceback (most recent call last): + File "E:\SteamLibrary\steamapps\common\Blender\portable\extensions\blender_org\render_preset\manage_presets.py", line 695, in reload_preset_startup + reload_presets() + File "E:\SteamLibrary\steamapps\common\Blender\portable\extensions\blender_org\render_preset\manage_presets.py", line 626, in reload_presets + folder = get_preset_folder() + ^^^^^^^^^^^^^^^^^^^ + File "E:\SteamLibrary\steamapps\common\Blender\portable\extensions\blender_org\render_preset\manage_presets.py", line 23, in get_preset_folder + os.makedirs(folder) + File "", line 215, in makedirs + File "", line 215, in makedirs + File "", line 215, in makedirs + File "", line 225, in makedirs +FileNotFoundError: [WinError 53] The network path was not found: '\\\\NAS\\amazon\\' +Error in bpy.app.handlers.load_post[14]: +Traceback (most recent call last): + File "E:\SteamLibrary\steamapps\common\Blender\portable\scripts\addons\blender_visual_scripting_addon\handlers.py", line 32, in load_handler + check_easy_bpy_install() + File "E:\SteamLibrary\steamapps\common\Blender\portable\scripts\addons\blender_visual_scripting_addon\settings\easybpy.py", line 11, in check_easy_bpy_install + for filename in os.listdir(path): + ^^^^^^^^^^^^^^^^ +NotADirectoryError: [WinError 267] The directory name is invalid: 'E:\\SteamLibrary\\steamapps\\common\\Blender\\portable\\scripts\\addons\\flamenco\\wheels\\python_dateutil-2.8.2-py2.py3-none-any.whl' +Extra Pies: Register built-in pies for use with non-standard Keymap. +Info: Saved copy as "2025-55-31_21-55_fn3map_v3.0.blend" +Incremental Autosave: Saved file: E:\BlenderCache\2025-55-31_21-55_fn3map_v3.0.blend +ℹ️ blenderkit: BlenderKit-Client is running on port 62485! [21:55:58.955, timer.py:136] +Warning: Path 'E:\SteamLibrary\steamapps\common\Blender\portable\extensions\user_default\blenderkit\thumbnails\blenderkit_logo.png' cannot be made relative for Image '.blenderkit_logo.png' +Warning: Path 'E:\SteamLibrary\steamapps\common\Blender\portable\extensions\user_default\blenderkit\thumbnails\vs_rejected.png' cannot be made relative for Image '.vs_rejected.png' +Warning: Path 'E:\SteamLibrary\steamapps\common\Blender\4.5\datafiles\assets\geometry_nodes\smooth_by_angle.blend' cannot be made relative for NodeTree 'Smooth by Angle' +Warning: Total files 54 | Changed 0 | Failed 3 + +--- + +_**Assistant**_ + + + +--- + diff --git a/blends/Springtrap_Goopie.blend b/blends/Springtrap_Goopie.blend index 6615acb..78e5ed9 100644 --- a/blends/Springtrap_Goopie.blend +++ b/blends/Springtrap_Goopie.blend @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6c470bd89afb49748f4211f649c013976d4da3ef4f5d6f0201231ab171098d2d -size 5375300 +oid sha256:d6494745dc71ecf4b1895ed0580147fc7db8a3c3694e61867e0ba6ed271479b4 +size 4234803 diff --git a/scripts/relocate_libraries.py b/scripts/relocate_libraries.py new file mode 100644 index 0000000..1a2a0de --- /dev/null +++ b/scripts/relocate_libraries.py @@ -0,0 +1,83 @@ +import bpy +import os +import re + +def relocate_libraries(): + """ + Relocate linked library files from Synology Drive to NAS storage. + Changes paths from C:\\Users\\Nathan\\SynologyDrive\\ to R:\\ + """ + + # Define the path mappings + old_base = r"C:\Users\Nathan\SynologyDrive" + new_base = r"R:" + + # Track changes + changed_files = [] + failed_files = [] + + print("=== Library Relocation Script ===") + print(f"Mapping: {old_base} → {new_base}") + print() + + # Process all library files + for lib in bpy.data.libraries: + if lib.filepath: + old_path = lib.filepath + + # Check if this is a Synology Drive path + if old_base in old_path: + # Create new path + new_path = old_path.replace(old_base, new_base) + + # Verify the new file exists + if os.path.exists(new_path): + try: + # Update the library path + lib.filepath = new_path + changed_files.append((old_path, new_path)) + print(f"✓ Relocated: {os.path.basename(old_path)}") + print(f" {old_path}") + print(f" → {new_path}") + print() + except Exception as e: + failed_files.append((old_path, str(e))) + print(f"✗ Failed to relocate: {os.path.basename(old_path)}") + print(f" Error: {e}") + print() + else: + failed_files.append((old_path, "Target file not found")) + print(f"✗ Target not found: {new_path}") + print() + else: + print(f"ℹ Skipped (not Synology Drive): {old_path}") + print() + + # Summary + print("=== Summary ===") + print(f"Successfully relocated: {len(changed_files)} files") + print(f"Failed to relocate: {len(failed_files)} files") + + if changed_files: + print("\nRelocated files:") + for old, new in changed_files: + print(f" {os.path.basename(old)}") + + if failed_files: + print("\nFailed files:") + for old, reason in failed_files: + print(f" {os.path.basename(old)}: {reason}") + + return len(changed_files), len(failed_files) + +# Run the script +if __name__ == "__main__": + success_count, fail_count = relocate_libraries() + + if success_count > 0: + print(f"\n✅ Successfully relocated {success_count} library files!") + print("You may need to save your .blend file to preserve these changes.") + + if fail_count > 0: + print(f"\n⚠️ {fail_count} files failed to relocate.") + print("Check that the NAS paths exist and are accessible.") \ No newline at end of file