Compare commits
22 Commits
fe69b6354e
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 3618724ca2 | |||
| 7fe8ccec9d | |||
| d2239a670c | |||
| 53430f768f | |||
| a8205447e3 | |||
| 59f1c1c38e | |||
| 3c3652acb3 | |||
| 11ea28a187 | |||
| 2de53c9685 | |||
| 6aef69654a | |||
| 12afbdf343 | |||
| b8418641e1 | |||
| b140883b90 | |||
| bcb9808cca | |||
| 4687539a90 | |||
| 98a592bdef | |||
| 56685a38dd | |||
| 05c6a5a04d | |||
| 3628729716 | |||
| 7e9e4370a7 | |||
| 8ff95a53f2 | |||
| 45ba37e420 |
@@ -0,0 +1,3 @@
|
||||
|
||||
# Don't index SpecStory auto-save files, but allow explicit context inclusion via @ references
|
||||
.specstory/**
|
||||
+1
-22
@@ -1,22 +1 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
|
||||
# Custom for Visual Studio
|
||||
*.cs diff=csharp
|
||||
*.sln merge=union
|
||||
*.csproj merge=union
|
||||
*.vbproj merge=union
|
||||
*.fsproj merge=union
|
||||
*.dbproj merge=union
|
||||
|
||||
# Standard to msysgit
|
||||
*.doc diff=astextplain
|
||||
*.DOC diff=astextplain
|
||||
*.docx diff=astextplain
|
||||
*.DOCX diff=astextplain
|
||||
*.dot diff=astextplain
|
||||
*.DOT diff=astextplain
|
||||
*.pdf diff=astextplain
|
||||
*.PDF diff=astextplain
|
||||
*.rtf diff=astextplain
|
||||
*.RTF diff=astextplain
|
||||
*.sh text eol=lf
|
||||
|
||||
@@ -1,2 +1,4 @@
|
||||
venv/
|
||||
.idea/
|
||||
.specstory/
|
||||
.vscode/
|
||||
@@ -0,0 +1,160 @@
|
||||
# OneDrive Thumbnail Override Fix
|
||||
|
||||
## 🎯 Problem Description
|
||||
|
||||
OneDrive's on-demand sync overrides locally-generated thumbnails with generic file icons when cloud services don't support specific file types (like `.blend`, `.psd`, etc.). This prevents you from seeing your custom thumbnails for unsupported formats.
|
||||
|
||||
## 🔍 Root Cause
|
||||
|
||||
1. **OneDrive Files On-Demand** uses cloud thumbnail providers that take precedence over local thumbnails
|
||||
2. When OneDrive doesn't support a file type, it shows a generic file icon
|
||||
3. This **overrides** your custom locally-generated thumbnails, even for files you've created beautiful previews for
|
||||
|
||||
## ✅ Solution Overview
|
||||
|
||||
This fix disables OneDrive's cloud thumbnail providers and restores priority to your local thumbnails while keeping OneDrive sync functionality intact.
|
||||
|
||||
## 🛠️ How to Use
|
||||
|
||||
### Method 1: Automated PowerShell Script (Recommended)
|
||||
|
||||
1. **Run the batch file:**
|
||||
```cmd
|
||||
autoThumbs.bat
|
||||
```
|
||||
|
||||
2. **Select option 4:** "Fix OneDrive thumbnail override"
|
||||
|
||||
3. **Follow prompts** - the script will run as administrator and fix the issue
|
||||
|
||||
### Method 2: Manual Registry Fix
|
||||
|
||||
1. **Run as Administrator:**
|
||||
```cmd
|
||||
regedit
|
||||
```
|
||||
|
||||
2. **Import the registry file:**
|
||||
```cmd
|
||||
disable_onedrive_thumbnails.reg
|
||||
```
|
||||
|
||||
3. **Restart Windows Explorer**
|
||||
|
||||
### Method 3: PowerShell Direct
|
||||
|
||||
Run PowerShell as Administrator and execute:
|
||||
```powershell
|
||||
.\fix_thumbnail_override.ps1
|
||||
```
|
||||
|
||||
## 📋 What Gets Changed
|
||||
|
||||
### ✅ Registry Modifications
|
||||
|
||||
1. **OneDrive Policies:**
|
||||
- `HKCU\SOFTWARE\Policies\Microsoft\OneDrive` → `DisableCloudThumbnails = 1`
|
||||
- `HKLM\SOFTWARE\Policies\Microsoft\OneDrive` → `DisableCloudThumbnails = 1`
|
||||
|
||||
2. **Cloud Thumbnail Provider Removal:**
|
||||
- Removes: `HKLM\...\ThumbnailProviders\{E357FCCD-A995-4576-B01F-234630154E96}`
|
||||
|
||||
3. **Local Thumbnail Preferences:**
|
||||
- `HKCU\...\Explorer\Advanced` → `UseLocalThumbnailProvider = 1`
|
||||
- `HKCU\...\Explorer\Advanced` → `IconsOnly = 0`
|
||||
|
||||
4. **OneDrive Shell Overlays Disabled:**
|
||||
- Removes OneDrive1-7 shell icon overlays that can interfere
|
||||
|
||||
5. **Thumbnail Cache Protection:**
|
||||
- Prevents Windows from auto-deleting thumbnail cache
|
||||
- `HKLM\...\VolumeCaches\Thumbnail Cache` → `Autorun = 0`
|
||||
|
||||
### 🔄 Process Changes
|
||||
|
||||
1. **Explorer Process Restart** - Clears cached thumbnail providers
|
||||
2. **Thumbnail Cache Regeneration** - Forces fresh thumbnail creation
|
||||
3. **Local Provider Priority** - Your custom thumbnails now take precedence
|
||||
|
||||
## ⚠️ Important Notes
|
||||
|
||||
### ✅ What Still Works
|
||||
- ✅ OneDrive sync functionality (unchanged)
|
||||
- ✅ File access and collaboration
|
||||
- ✅ Cloud storage features
|
||||
- ✅ Local thumbnail generation
|
||||
|
||||
### ❌ What Changes
|
||||
- ❌ OneDrive won't override your custom thumbnails anymore
|
||||
- ❌ Cloud-based thumbnail generation is disabled
|
||||
- ❌ Some OneDrive visual overlays may be reduced
|
||||
|
||||
## 🔧 Troubleshooting
|
||||
|
||||
### If thumbnails still don't appear:
|
||||
|
||||
1. **Clear thumbnail cache manually:**
|
||||
```cmd
|
||||
del /f /s /q "%LocalAppData%\Microsoft\Windows\Explorer\thumbcache_*.db"
|
||||
```
|
||||
|
||||
2. **Restart Windows Explorer:**
|
||||
```cmd
|
||||
taskkill /f /im explorer.exe && start explorer.exe
|
||||
```
|
||||
|
||||
3. **Regenerate thumbnails:**
|
||||
```cmd
|
||||
python psthumbgen.py --directory "Your\Directory\Path"
|
||||
```
|
||||
|
||||
### If you want to revert changes:
|
||||
|
||||
Use the restore registry file:
|
||||
```cmd
|
||||
restore_onedrive_thumbnails.reg
|
||||
```
|
||||
|
||||
## 🎉 Expected Results
|
||||
|
||||
After applying this fix:
|
||||
|
||||
1. **Your custom thumbnails** (like for `.blend` files) will display properly
|
||||
2. **OneDrive sync continues** working normally
|
||||
3. **File access remains** unchanged
|
||||
4. **Local thumbnail generation** takes priority over cloud providers
|
||||
|
||||
## 📝 Technical Details
|
||||
|
||||
### Cloud Thumbnail Provider GUID
|
||||
The key provider that overrides local thumbnails:
|
||||
- `{E357FCCD-A995-4576-B01F-234630154E96}` - Windows Cloud Files Thumbnail Provider
|
||||
|
||||
### OneDrive Shell Overlays
|
||||
These overlays can interfere with thumbnail display:
|
||||
- `OneDrive1` through `OneDrive7` in `ShellIconOverlayIdentifiers`
|
||||
|
||||
### Registry Locations
|
||||
```
|
||||
# User-level policies
|
||||
HKCU\SOFTWARE\Policies\Microsoft\OneDrive
|
||||
|
||||
# Machine-level policies
|
||||
HKLM\SOFTWARE\Policies\Microsoft\OneDrive
|
||||
|
||||
# Thumbnail providers
|
||||
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ThumbnailProviders
|
||||
|
||||
# Explorer settings
|
||||
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced
|
||||
```
|
||||
|
||||
## 🔄 Maintenance
|
||||
|
||||
- **Reboot required** for full effect
|
||||
- **May need to reapply** after major Windows updates
|
||||
- **Compatible** with Windows 10/11 and current OneDrive versions
|
||||
|
||||
---
|
||||
|
||||
**🎨 Now you can enjoy your beautiful custom thumbnails without OneDrive interference!**
|
||||
@@ -0,0 +1,143 @@
|
||||
# Synology Thumbnail Generator
|
||||
|
||||
A Python script that generates thumbnails for Synology Photo Station, optimized for video formats and files that the NAS doesn't handle well.
|
||||
|
||||
## 🚀 **Major Features**
|
||||
|
||||
### **⚡ Ultra-Fast Icaros Cache Integration**
|
||||
- **Instant thumbnails** from Icaros cache (milliseconds vs seconds)
|
||||
- **Alphabetical algorithm** discovered and implemented
|
||||
- **1920x1080 source quality** from cache
|
||||
- **Automatic fallback** to Windows providers and FFmpeg
|
||||
|
||||
### **🎯 Supported Formats**
|
||||
- **Videos**: mp4, webm, avi, mkv, mov, wmv, flv, m4v, ts
|
||||
- **Images**: psd (Photoshop), blend (Blender)
|
||||
- **Optimized for formats** Synology doesn't handle well
|
||||
|
||||
### **🔄 Multi-Tier Processing**
|
||||
1. **Icaros Cache** (fastest - milliseconds)
|
||||
2. **Windows Thumbnail Providers** (fast - seconds)
|
||||
3. **FFmpeg/Direct Processing** (slower - reliable fallback)
|
||||
|
||||
## 🎉 **Performance Breakthrough**
|
||||
|
||||
**Before**: 5-10 seconds per video thumbnail (FFmpeg only)
|
||||
**After**: ~50 milliseconds per video thumbnail (Icaros cache)
|
||||
**Speedup**: **100-200x faster** for cached videos!
|
||||
|
||||
## 📋 **Requirements**
|
||||
|
||||
- Python 3.6+
|
||||
- PIL/Pillow: `pip install Pillow`
|
||||
- FFmpeg (for unsupported formats): https://ffmpeg.org/download.html
|
||||
- **Icaros** (optional, for ultra-fast thumbnails): http://carlosdelgado.com/
|
||||
|
||||
### **Optional Dependencies**
|
||||
- `psd-tools`: For direct PSD processing (`pip install psd-tools`)
|
||||
- `olefile`: For advanced cache integration (`pip install olefile`)
|
||||
|
||||
## 💻 **Usage**
|
||||
|
||||
```bash
|
||||
python psthumbgen.py --directory "R:\Your\Video\Directory"
|
||||
```
|
||||
|
||||
The script will:
|
||||
1. **Try Icaros cache first** (if available)
|
||||
2. **Fall back to Windows providers**
|
||||
3. **Use FFmpeg as final fallback**
|
||||
4. **Generate all Synology thumbnail sizes**
|
||||
|
||||
## 🔧 **Icaros Integration**
|
||||
|
||||
### **Automatic Detection**
|
||||
The script automatically detects and uses Icaros cache from:
|
||||
- `C:\Program Files\Icaros\IcarosCache\`
|
||||
- `C:\Program Files (x86)\Icaros\IcarosCache\`
|
||||
- `%LocalAppData%\Icaros\IcarosCache\`
|
||||
- `%AppData%\Icaros\IcarosCache\`
|
||||
|
||||
### **Algorithm Discovery**
|
||||
After extensive analysis, we discovered Icaros uses **alphabetical sorting** for cache mapping:
|
||||
1. Collect all video files from monitored directories
|
||||
2. Sort alphabetically (case-insensitive)
|
||||
3. Map position in sorted list to cache index
|
||||
4. Extract thumbnail directly from binary cache
|
||||
|
||||
## 📁 **Output Structure**
|
||||
|
||||
For each video file, creates:
|
||||
```
|
||||
video_directory/
|
||||
├── eaDir_tmp/
|
||||
│ └── video_file.mp4/
|
||||
│ ├── SYNOVIDEO_VIDEO_SCREENSHOT.jpg (1280px)
|
||||
│ ├── SYNOPHOTO_THUMB_XL.jpg (1280px)
|
||||
│ ├── SYNOPHOTO_THUMB_B.jpg (640px)
|
||||
│ ├── SYNOPHOTO_THUMB_M.jpg (320px)
|
||||
│ ├── SYNOPHOTO_THUMB_PREVIEW.jpg (160px)
|
||||
│ └── SYNOPHOTO_THUMB_S.jpg (120px)
|
||||
```
|
||||
|
||||
## 🎯 **Use Cases**
|
||||
|
||||
- **Video Libraries**: Fast thumbnails for large video collections
|
||||
- **Creative Files**: PSD and Blender file previews
|
||||
- **Network Shares**: Works with SMB/network drives
|
||||
- **Synology NAS**: Perfect for Photo Station integration
|
||||
|
||||
## 🛠️ **Technical Details**
|
||||
|
||||
### **Icaros Cache Format**
|
||||
- **Binary format**: `.icdb` files containing JPEG thumbnails
|
||||
- **Index structure**: `ICDB` signature with embedded JPEGs
|
||||
- **Multiple sizes**: Typically 96px, 1280px, 2560px variants
|
||||
- **Alphabetical mapping**: Direct position-based extraction
|
||||
|
||||
### **Windows Integration**
|
||||
- Uses Windows thumbnail providers via shell32
|
||||
- Supports formats with installed codec packs
|
||||
- Faster than FFmpeg for supported formats
|
||||
- Automatic format detection and fallback
|
||||
|
||||
## 🔍 **Troubleshooting**
|
||||
|
||||
### **No Icaros Cache Found**
|
||||
- Install Icaros: http://carlosdelgado.com/
|
||||
- Configure monitored directories in IcarosConfig
|
||||
- Rebuild cache for current files
|
||||
|
||||
### **FFmpeg Not Found**
|
||||
- Download from: https://ffmpeg.org/download.html
|
||||
- Add to system PATH
|
||||
- Restart command prompt/PowerShell
|
||||
|
||||
### **Slow Performance**
|
||||
- Install Icaros for 100-200x speedup
|
||||
- Enable hardware acceleration in graphics drivers
|
||||
- Use SSD storage for cache
|
||||
|
||||
## 📊 **Algorithm Research**
|
||||
|
||||
This project involved extensive reverse engineering of Icaros cache format:
|
||||
- ✅ **Alphabetical sorting** algorithm discovered
|
||||
- ❌ Hash-based approaches (MD5, CRC32, Windows hash) all failed
|
||||
- 🔬 **106 cache entries** analyzed and mapped
|
||||
- 🎯 **Verification** through manual thumbnail content checking
|
||||
|
||||
## 🤝 **Contributing**
|
||||
|
||||
Contributions welcome! Areas for improvement:
|
||||
- Additional video format support
|
||||
- Performance optimizations
|
||||
- Cache format documentation
|
||||
- Cross-platform compatibility
|
||||
|
||||
## 📄 **License**
|
||||
|
||||
This project is provided as-is for educational and personal use.
|
||||
|
||||
---
|
||||
|
||||
**🎉 Achievement Unlocked: Ultra-Fast Thumbnail Generation!**
|
||||
+226
@@ -0,0 +1,226 @@
|
||||
@echo off
|
||||
setlocal EnableExtensions
|
||||
REM ANSI colors (needs Windows 10+ console VT or Windows Terminal)
|
||||
for /f %%a in ('powershell -nop -c "[char]0x1b"') do set "ESC=%%a"
|
||||
set "RST=%ESC%[0m"
|
||||
set "BLD=%ESC%[1m"
|
||||
set "DIM=%ESC%[2m"
|
||||
set "RED=%ESC%[91m"
|
||||
set "GRN=%ESC%[92m"
|
||||
set "YLW=%ESC%[93m"
|
||||
set "BLU=%ESC%[94m"
|
||||
set "MAG=%ESC%[95m"
|
||||
set "CYN=%ESC%[96m"
|
||||
set "GRY=%ESC%[90m"
|
||||
set "WHT=%ESC%[97m"
|
||||
|
||||
REM Always use 'nathan' as NAS username
|
||||
set NASUSER=nathan
|
||||
|
||||
REM Menu for operation selection
|
||||
echo.
|
||||
echo %BLD%%YLW%Select operation:%RST%
|
||||
echo %CYN%1.%RST% Generate thumbnails only
|
||||
echo %CYN%2.%RST% SSH cleanup only
|
||||
echo %CYN%3.%RST% Both (generate thumbnails + SSH cleanup)
|
||||
echo %CYN%4.%RST% Fix OneDrive thumbnail override %DIM%(NEW^)%RST%
|
||||
echo.
|
||||
set /p CHOICE=%CYN%Enter your choice ^(1-4^): %RST%
|
||||
|
||||
if "%CHOICE%"=="1" goto THUMBS_ONLY
|
||||
if "%CHOICE%"=="2" goto SSH_ONLY
|
||||
if "%CHOICE%"=="3" goto BOTH
|
||||
if "%CHOICE%"=="4" goto FIX_ONEDRIVE
|
||||
echo %RED%Invalid choice. Exiting.%RST%
|
||||
exit /b
|
||||
|
||||
:THUMBS_ONLY
|
||||
REM Prompt for Windows path
|
||||
set /p WINPATH=%CYN%Enter the full Windows path to your NAS directory ^(e.g., R:\YouTube\Streams\MixerTwitch^): %RST%
|
||||
if "%WINPATH%"=="" (
|
||||
echo %RED%No path provided. Exiting.%RST%
|
||||
exit /b
|
||||
)
|
||||
|
||||
REM Convert Windows path to NAS path and pre-seed eaDir_tmp from @eaDir on NAS
|
||||
set "RELPATH=%WINPATH:~3%"
|
||||
set "RELPATH=%RELPATH:\=/%"
|
||||
set "NASPATH=/volume1/Hydra/%RELPATH%"
|
||||
|
||||
echo %GRN%Uploading extract_eadir_to_tmp.sh to NAS and seeding...%RST%
|
||||
if not exist "%~dp0extract_eadir_to_tmp.sh" (
|
||||
echo %RED%ERROR: extract_eadir_to_tmp.sh not found next to this batch file.%RST%
|
||||
goto END
|
||||
)
|
||||
ssh Hydra "cat > ~/extract_eadir_to_tmp.sh" < "%~dp0extract_eadir_to_tmp.sh"
|
||||
ssh Hydra "bash -lc 'if command -v dos2unix >/dev/null 2>&1; then dos2unix -f ~/extract_eadir_to_tmp.sh; else tr -d \"\r\" < ~/extract_eadir_to_tmp.sh > ~/extract_eadir_to_tmp.sh.tmp && mv ~/extract_eadir_to_tmp.sh.tmp ~/extract_eadir_to_tmp.sh; fi; chmod +x ~/extract_eadir_to_tmp.sh; ~/extract_eadir_to_tmp.sh \"%NASPATH%\" || true'"
|
||||
|
||||
REM Run psthumbgen.py
|
||||
python psthumbgen.py --directory "%WINPATH%"
|
||||
goto END
|
||||
|
||||
:SSH_ONLY
|
||||
REM Prompt for Windows path
|
||||
set /p WINPATH=%CYN%Enter the full Windows path to your NAS directory ^(e.g., R:\YouTube\Streams\MixerTwitch^): %RST%
|
||||
if "%WINPATH%"=="" (
|
||||
echo %RED%No path provided. Exiting.%RST%
|
||||
exit /b
|
||||
)
|
||||
|
||||
REM Convert Windows path to NAS path
|
||||
set "RELPATH=%WINPATH:~3%"
|
||||
set "RELPATH=%RELPATH:\=/%"
|
||||
set "NASPATH=/volume1/Hydra/%RELPATH%"
|
||||
|
||||
echo %GRY%DEBUG: WINPATH = %WINPATH%%RST%
|
||||
echo %GRY%DEBUG: RELPATH = %RELPATH%%RST%
|
||||
echo %GRY%DEBUG: NASPATH = %NASPATH%%RST%
|
||||
echo.
|
||||
call :WIN_REMOVE_LOCAL_EADIR
|
||||
REM Ensure nascleanup.sh exists on NAS (upload + fix line endings), then run it
|
||||
echo %GRN%Uploading nascleanup.sh to NAS and running cleanup...%RST%
|
||||
if not exist "%~dp0nascleanup.sh" (
|
||||
echo %RED%ERROR: nascleanup.sh not found next to this batch file.%RST%
|
||||
goto END
|
||||
)
|
||||
ssh Hydra "cat > ~/nascleanup.sh" < "%~dp0nascleanup.sh"
|
||||
ssh Hydra "bash -lc 'if command -v dos2unix >/dev/null 2>&1; then dos2unix -f ~/nascleanup.sh; else tr -d \"\r\" < ~/nascleanup.sh > ~/nascleanup.sh.tmp && mv ~/nascleanup.sh.tmp ~/nascleanup.sh; fi; chmod +x ~/nascleanup.sh; ~/nascleanup.sh \"%NASPATH%\"'"
|
||||
if errorlevel 1 (
|
||||
echo %RED%ERROR: nascleanup failed on NAS - check promote ^(eaDir_tmp -^> @eaDir^) messages above.%RST%
|
||||
echo %YLW%Keeping eaDir_tmp on the share so you can retry without re-running FFmpeg.%RST%
|
||||
call :PRINT_HYDRA_CLEAR_EADIR
|
||||
) else (
|
||||
call :WIN_REMOVE_LOCAL_EADIR_TMP
|
||||
)
|
||||
goto END
|
||||
|
||||
:BOTH
|
||||
REM Prompt for Windows path
|
||||
set /p WINPATH=%CYN%Enter the full Windows path to your NAS directory ^(e.g., R:\YouTube\Streams\MixerTwitch^): %RST%
|
||||
if "%WINPATH%"=="" (
|
||||
echo %RED%No path provided. Exiting.%RST%
|
||||
exit /b
|
||||
)
|
||||
|
||||
REM Convert Windows path to NAS path
|
||||
set "RELPATH=%WINPATH:~3%"
|
||||
set "RELPATH=%RELPATH:\=/%"
|
||||
set "NASPATH=/volume1/Hydra/%RELPATH%"
|
||||
|
||||
echo %GRY%DEBUG: WINPATH = %WINPATH%%RST%
|
||||
echo %GRY%DEBUG: RELPATH = %RELPATH%%RST%
|
||||
echo %GRY%DEBUG: NASPATH = %NASPATH%%RST%
|
||||
echo.
|
||||
|
||||
REM Pre-seed eaDir_tmp from @eaDir on NAS before generation
|
||||
echo %GRN%Uploading extract_eadir_to_tmp.sh to NAS and seeding...%RST%
|
||||
if not exist "%~dp0extract_eadir_to_tmp.sh" (
|
||||
echo %RED%ERROR: extract_eadir_to_tmp.sh not found next to this batch file.%RST%
|
||||
goto END
|
||||
)
|
||||
ssh Hydra "cat > ~/extract_eadir_to_tmp.sh" < "%~dp0extract_eadir_to_tmp.sh"
|
||||
ssh Hydra "bash -lc 'if command -v dos2unix >/dev/null 2>&1; then dos2unix -f ~/extract_eadir_to_tmp.sh; else tr -d \"\r\" < ~/extract_eadir_to_tmp.sh > ~/extract_eadir_to_tmp.sh.tmp && mv ~/extract_eadir_to_tmp.sh.tmp ~/extract_eadir_to_tmp.sh; fi; chmod +x ~/extract_eadir_to_tmp.sh; ~/extract_eadir_to_tmp.sh \"%NASPATH%\" || true'"
|
||||
|
||||
REM Run psthumbgen.py
|
||||
python psthumbgen.py --directory "%WINPATH%"
|
||||
|
||||
REM Clear old @eaDir on the share via SMB (helps when NAS cp hits Permission denied on root-owned dirs)
|
||||
call :WIN_REMOVE_LOCAL_EADIR
|
||||
|
||||
REM SSH cleanup commands (run separately)
|
||||
REM Ensure nascleanup.sh exists on NAS (upload + fix line endings), then run it
|
||||
echo %GRN%Uploading nascleanup.sh to NAS and running cleanup...%RST%
|
||||
if not exist "%~dp0nascleanup.sh" (
|
||||
echo %RED%ERROR: nascleanup.sh not found next to this batch file.%RST%
|
||||
goto END
|
||||
)
|
||||
ssh Hydra "cat > ~/nascleanup.sh" < "%~dp0nascleanup.sh"
|
||||
ssh Hydra "bash -lc 'if command -v dos2unix >/dev/null 2>&1; then dos2unix -f ~/nascleanup.sh; else tr -d \"\r\" < ~/nascleanup.sh > ~/nascleanup.sh.tmp && mv ~/nascleanup.sh.tmp ~/nascleanup.sh; fi; chmod +x ~/nascleanup.sh; ~/nascleanup.sh \"%NASPATH%\"'"
|
||||
if errorlevel 1 (
|
||||
echo %RED%ERROR: nascleanup failed on NAS - check promote ^(eaDir_tmp -^> @eaDir^) messages above.%RST%
|
||||
echo %YLW%Keeping eaDir_tmp on the share so you can retry without re-running FFmpeg.%RST%
|
||||
call :PRINT_HYDRA_CLEAR_EADIR
|
||||
) else (
|
||||
call :WIN_REMOVE_LOCAL_EADIR_TMP
|
||||
)
|
||||
goto END
|
||||
|
||||
:FIX_ONEDRIVE
|
||||
echo.
|
||||
echo %BLD%%MAG%=================================================================%RST%
|
||||
echo %BLD%%MAG% FIX ONEDRIVE THUMBNAIL OVERRIDE %RST%
|
||||
echo %BLD%%MAG%=================================================================%RST%
|
||||
echo.
|
||||
echo %WHT%This will fix OneDrive overriding your custom thumbnails with%RST%
|
||||
echo %WHT%generic file icons for unsupported formats like .blend files.%RST%
|
||||
echo.
|
||||
echo %CYN%What this does:%RST%
|
||||
echo %GRY% - Disables OneDrive cloud thumbnail providers%RST%
|
||||
echo %GRY% - Restores local thumbnail priority%RST%
|
||||
echo %GRY% - Prevents future thumbnail cache deletion%RST%
|
||||
echo.
|
||||
set /p CONFIRM=%YLW%Continue? ^(y/n^): %RST%
|
||||
if /i not "%CONFIRM%"=="y" goto END
|
||||
|
||||
echo.
|
||||
echo %GRN%Running PowerShell script to fix OneDrive thumbnail override...%RST%
|
||||
echo.
|
||||
|
||||
REM Check if PowerShell script exists
|
||||
if not exist "fix_thumbnail_override.ps1" (
|
||||
echo %RED%ERROR: fix_thumbnail_override.ps1 not found in current directory.%RST%
|
||||
echo %YLW%Please ensure the PowerShell script is in the same folder as this batch file.%RST%
|
||||
pause
|
||||
goto END
|
||||
)
|
||||
|
||||
REM Run PowerShell script as administrator
|
||||
powershell -ExecutionPolicy Bypass -Command "Start-Process PowerShell -ArgumentList '-ExecutionPolicy Bypass -File \"%~dp0fix_thumbnail_override.ps1\"' -Verb RunAs"
|
||||
|
||||
echo.
|
||||
echo %GRN%OneDrive thumbnail override fix initiated.%RST%
|
||||
echo %GRY%Please check the PowerShell window for progress and results.%RST%
|
||||
echo.
|
||||
echo %CYN%After the fix completes:%RST%
|
||||
echo %GRY% 1. Restart your computer%RST%
|
||||
echo %GRY% 2. Re-run your thumbnail generation process%RST%
|
||||
echo %GRY% 3. Your custom thumbnails should now have priority!%RST%
|
||||
echo.
|
||||
goto END
|
||||
|
||||
REM Print ssh Hydra command to wipe @eaDir when NAS cleanup failed (matches NASPATH from pasted R:\ path).
|
||||
:PRINT_HYDRA_CLEAR_EADIR
|
||||
if "%NASPATH%"=="" goto :eof
|
||||
echo %MAG%To clear locked @eaDir on Hydra: ssh in first.%RST%
|
||||
echo %GRY%Permission denied lines above name nested paths ^(e.g. editDesc, gameplay^).%RST%
|
||||
echo %GRY%Clear every @eaDir under the SAME folder you passed to nascleanup ^(NASPATH below^),%RST%
|
||||
echo %GRY%not only the subpath from the first error line.%RST%
|
||||
echo %BLD%%YLW% sudo find "%NASPATH%" -depth -type d -name '@eaDir' -exec sudo rm -rf {} +%RST%
|
||||
goto :eof
|
||||
|
||||
REM Remove folder-level @eaDir on the pasted Windows path (same files as NAS over SMB).
|
||||
:WIN_REMOVE_LOCAL_EADIR
|
||||
if "%WINPATH%"=="" goto :eof
|
||||
if exist "%WINPATH%\@eaDir" (
|
||||
echo %CYN%Removing "%WINPATH%\@eaDir" via Windows ^(SMB share^)...%RST%
|
||||
rd /s /q "%WINPATH%\@eaDir" 2>nul
|
||||
if exist "%WINPATH%\@eaDir" (
|
||||
echo %YLW%WARNING: Could not remove @eaDir; try PowerShell as admin or delete in Explorer.%RST%
|
||||
)
|
||||
)
|
||||
goto :eof
|
||||
|
||||
REM Remove every eaDir_tmp under pasted path (including subfolders e.g. gameplay\eaDir_tmp).
|
||||
:WIN_REMOVE_LOCAL_EADIR_TMP
|
||||
if "%WINPATH%"=="" goto :eof
|
||||
echo %CYN%Removing all eaDir_tmp folders under "%WINPATH%" ^(recursive, SMB^)...%RST%
|
||||
if not exist "%~dp0remove_eadir_tmp_recursive.ps1" (
|
||||
echo %RED%ERROR: remove_eadir_tmp_recursive.ps1 not found next to this batch file.%RST%
|
||||
goto :eof
|
||||
)
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0remove_eadir_tmp_recursive.ps1" "%WINPATH%"
|
||||
goto :eof
|
||||
|
||||
:END
|
||||
echo %DIM%Press any key to continue . . .%RST%
|
||||
pause >nul
|
||||
@@ -0,0 +1,315 @@
|
||||
=== Enhanced Synology Thumbnail Cleanup ===
|
||||
Target directory: /volume1/Hydra/Desktop
|
||||
Stopping indexing services (best effort)...
|
||||
Clearing indexing queue (if accessible)...
|
||||
=== Existing @eaDir directories ===
|
||||
/volume1/Hydra/Desktop/twenty twenty five/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty five/eaDir_tmp/2025-04-04 intellectual cowardice.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty five/eaDir_tmp/Alex_Repo_-_Duck.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty five/eaDir_tmp/Black_Ops_6_-_Go_Payback_or_Youre_Gay.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty five/eaDir_tmp/ZZZ_-_Mason_and_the_Moss.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/how to archive/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty/SCP-2432/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty/steamreviewreading/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty/who can it be now alex/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty/@eaDir
|
||||
/volume1/Hydra/Desktop/death/@eaDir
|
||||
/volume1/Hydra/Desktop/death/deathRefs/@eaDir
|
||||
/volume1/Hydra/Desktop/death/eaDir_tmp/20200130 - Apex Legends Season 4 ΓÇô Assimilation Launch Trailer.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/death/eaDir_tmp/apexhandbroke.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/death/eaDir_tmp/deathclip.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/RainyProj/fnaf2_1/shorts/@eaDir
|
||||
/volume1/Hydra/Desktop/RainyProj/fnaf2_1/shorts/eaDir_tmp/fin_1_dicksButtplugFslur.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/RainyProj/fnaf2_1/shorts/eaDir_tmp/fin_1_dicksButtplugFslur_TIKTOKCENSOR.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/RainyProj/fnaf2_1/shorts/eaDir_tmp/win11 loading.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/RebirthProj/dailies/@eaDir
|
||||
/volume1/Hydra/Desktop/RebirthProj/refs/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty one/2021-09-25 trunk shenans/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty one/2021-09-25 trunk shenans/eaDir_tmp/20210925_143559.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty one/2021-09-25 trunk shenans/eaDir_tmp/20210925_144129.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty one/2021-09-25 trunk shenans/eaDir_tmp/IMG_0101.MP4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty one/2021-09-25 trunk shenans/eaDir_tmp/IMG_6741.MP4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty one/2021-09-25 trunk shenans/eaDir_tmp/IMG_6739.MP4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty one/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty one/cuckhead/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty one/eaDir_tmp/20210517 - Okay then....mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/retards0626/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/retards0626/eaDir_tmp/retards0626clip.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/The Experience/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/The Experience/eaDir_tmp/average moment.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/The Experience/eaDir_tmp/gamer time.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/The Experience/eaDir_tmp/hehe.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/The Experience/eaDir_tmp/gaming.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/The Experience/eaDir_tmp/Hoohoo.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/The Experience/eaDir_tmp/long long man.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/The Experience/eaDir_tmp/poooo.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/The Experience/eaDir_tmp/Pogger Moment.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/The Experience/eaDir_tmp/recipe.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/eaDir_tmp/trump_on_borrowing.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/eaDir_tmp/20230524_230558.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty two/eaDir_tmp/Messenger call - Google Chrome 2022-04-24 22-08-16_Trim.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Adobe_Premiere_Pro_2_1183982333133324288.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Adobe_Premiere_Pro_2_1183989188341530624.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Adobe_Premiere_Pro_2_1183983050569023488.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Adobe_Premiere_Pro_2_1183984555023925248.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/anywhere_but_here_bender.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Call_of_Duty_Black_1189730327858249728.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Call_of_Duty_Black_1189730168244011008.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/careb_emotional.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Careb_Frerf.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Discord_Clip_1168098495983255552.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Discord_Clip_1183982333133324288.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Discord_Clip_1183983050569023488.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Everyone_is_Like_Crypto.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/invincible.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Mass bordum leads to mass autism.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/nafan_quick_transistion.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/odst_metal_pipe.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/PXL_20231005_021024329.TS.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Teen_Reaches_$19M_S_1168098726372179968.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/Teen_Reaches_$19M_S_1168098495983255552.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/SPOILER_inbound7343850792645916413.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp/upon_nat_request.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty four/@eaDir
|
||||
/volume1/Hydra/Desktop/twenty twenty four/eaDir_tmp/SPOILER_inbound7343850792645916413.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/tiktokPotential/manbear/@eaDir
|
||||
/volume1/Hydra/Desktop/tiktokPotential/marxistIdiocy/@eaDir
|
||||
/volume1/Hydra/Desktop/tiktokPotential/marxistIdiocy/eaDir_tmp/20240313 - #stitch with @AnuJoose ItΓÇÖs really no mystery as to why weΓÇÖre not having children in America. #politics #congress #senate #fertility #americandream #america #american #government #unitedstatesofamerica #usa .mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/@eaDir
|
||||
/volume1/Hydra/Desktop/rainysrambles_scramble/RnR/@eaDir
|
||||
/volume1/Hydra/Desktop/rainysrambles_scramble/RnR/eaDir_tmp/03.1 conclude argument_Rendered.mov/@eaDir
|
||||
/volume1/Hydra/Desktop/rainysrambles_scramble/RnR/eaDir_tmp/01 apple controller_Rendered_001.mov/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20140420 - Locked in the bathroom.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20191201 - why are you locked in the bathroom.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20200410 - Video by confused.soup.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20201209 - Stooop. It's turning me on - meme.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20210214 - maybe you should try getting a job.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20211001 - EAT YOUR VEGETABLES remix.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20220412 - Nick's Beats - Pogo Reupload.mkv/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20220427 - Pogo Livestream Pogo in Ableton.mkv/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20230411 - The Jonas Brothers Detail 'Amazing' Collab with Jon Bellion.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20230619 - Colossal is Crazy- Monsterpiece Theater.mkv/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20230619 - Colossal is Crazy- Monsterpiece Theater.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20230511 - Replying to @kelseyvigilante .mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20230708 - Video by teenwry.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20231021 - #fyp #negitivity #addiction #funny .mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20231114 - Daily Femboy Memes - we're going to russia #femboy #memes #uwu.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20231115 - ace ~ lego cartoon connoisseur - 559Q-RXGN4-JZPP.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20231124 - Video by nikkoortizzz.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20231207 - Video by octane_workholding.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20231213 - Blender Renaissance 🔶 - https:⧸⧸t.co⧸xcHq2BnL2b.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20231218 - Dot's Uke.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20231222 - No Context Shitposting - average fnaf fan.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20231228 - Rock solid - https:⧸⧸t.co⧸lMeCXKipAS.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240110 - Shadow Cringelord - This feels like a personal attack.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240114 - Your Typical Local Man - https:⧸⧸t.co⧸Vh4sKQNkYY.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240115 - James Rehwald - @FBI Every year yall do this.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240115 - Sueh - @SugarandStories exactly!.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240119 - smol silly cat - https:⧸⧸t.co⧸9SzXPc8ZNt.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240201 - illuminatibot - https:⧸⧸t.co⧸8yB9Lit47v.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240317 - Coffee_Coyote - @_Hazardous_Wolf.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240326 - Explorer - @weirddalle.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240326 - no context memes - https:⧸⧸t.co⧸aPEaf6YBrJ.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240404 - NewsRoomNation 🇺🇸 - Clarence Thomas trolling the media. "I will leave the court, when I do my job as poorly as you do yours".mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240415 - Jon Bellion Nation🥤 - I don't want to set expectations without Jon Bellion saying anything, but the last time he went on a trip like this, it was for Glory Sound Prep 👁️👄👁️.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240419 - Jon Bellion Nation🥤 - And also a little bit Latino.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240604 - For YEARS She Recorded Everything on TV.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240430 - Literally Ryan Gosling (parody) - https:⧸⧸t.co⧸PWtBzXlLMT.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240622 - Caleb - @NBC10.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240711 - Your Typical Local Man - https:⧸⧸t.co⧸fwflNwxmyb.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240720 - she wants me to die - vrchat.mkv/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240723 - Jimmy Got a Sneak Peek of BTS' Jimin's New Song "Who" in Studio | The Tonight Show.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240724 - Wile E. Coyote - @USDebtClock_org Here is a great 4 min vid on the hidden secrets of money the government doesn't want you to know. 🇺🇸🔥.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20240814 - Smadar🪬 - @SwipeWright @benshapiro 😆.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20241020 - gremic ⚜️ - @seiyaposting still shit just dropped.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20241028 - katie - @jbellionnation Full version for the angry grifters in the replies!!!!!.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20241121 - Elon Musk - https:⧸⧸t.co⧸i3Vj8JsCwO.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20241214 - Declaration of Memes - @Rothmus Every single time.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20250126 - jonbellion - https:⧸⧸t.co⧸Y3eHbDKop9.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20250218 - Elon Musk - Yes.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/guh/eaDir_tmp/20250220 - Joe Hawley - Turn the Lights Off - 2006 Demo.mkv/@eaDir
|
||||
/volume1/Hydra/Desktop/snake metal gear colonel airpods/@eaDir
|
||||
/volume1/Hydra/Desktop/snake metal gear colonel airpods/eaDir_tmp/Metal Gear Solid (PlayStation, 1998) - Almost All Codec Conversations - 6 6.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/headline titles/@eaDir
|
||||
/volume1/Hydra/Desktop/things/@eaDir
|
||||
/volume1/Hydra/Desktop/wood/@eaDir
|
||||
/volume1/Hydra/Desktop/mems/@eaDir
|
||||
/volume1/Hydra/Desktop/mems/eaDir_tmp/0tJtWTIsIUec2X3s.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/mems/eaDir_tmp/5f60ba47065db6ed687e39d78b88f230.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/mems/eaDir_tmp/4exZmG-zIv2vNstY.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/mems/eaDir_tmp/rapidsave.com_-g2m3l7u44y3f1.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/mems/eaDir_tmp/20251013 - Viktor Ze Husky - https:⧸⧸t.co⧸Wz9dqXFcnl.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/2022-05-21 17.29.46.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/2022-10-05 09.20.55.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/2022-10-07 13.28.59.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/20220416 - yahiamice. - cats dubbed by half life 1 scientists - a thread.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/20220416 - yahiamice. - https -_t.co_47YnLVLbPR.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/20220416 - yahiamice. - https -_t.co_9Ru7Oqx5BY.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/20220416 - yahiamice. - https -_t.co_cOusquHOVz.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/20220416 - yahiamice. - https -_t.co_djPJhuPkfy.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/20220416 - yahiamice. - https -_t.co_hZcB18qfMP.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/20220416 - yahiamice. - https -_t.co_lcqoDVW42j.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/20220416 - yahiamice. - https -_t.co_VNqXhlJrtc.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/20220416 - yahiamice. - this one's my favorite.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/2023-05-08 23.33.09.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/2023-05-08 23.34.25.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/2023-05-30 15.55.03.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/2023-06-12 13.50.57.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/2023-06-25 10.05.56.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/20230513 - #halflife #scientist #npc #cat .mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/20230619 - a guy who sends memes - @Snekkuu @Hi_am_bored_guy.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/half life cats/eaDir_tmp/245468366_198662945680481_6749721867320171618_n.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/fin_shorts/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/fin_shorts/eaDir_tmp/beachold_tt.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/fin_shorts/eaDir_tmp/beachold_yt1.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/fin_shorts/eaDir_tmp/beachold_yt1_cropffs.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/fin_shorts/eaDir_tmp/beachold_yt2.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/fin_shorts/eaDir_tmp/beachold_yt3.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/fin_shorts/eaDir_tmp/groundedBugFull.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/fin_shorts/eaDir_tmp/groundedBugP1.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/fin_shorts/eaDir_tmp/groundedBugP2_trim.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/fin_shorts/eaDir_tmp/groundedBugP2.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/RnR/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/RnR/eaDir_tmp/subnautica1 Linked Comp 06sn1_shorts.aep_Rendered.mov/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/RnR/eaDir_tmp/subnautica1 Linked Comp 06sn1_shorts.aep_Rendered_003.mov/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/RnR/eaDir_tmp/subnautica1 Linked Comp 06sn1_shorts.aep_Rendered_004.mov/@eaDir
|
||||
/volume1/Hydra/Desktop/subnautica1/eaDir_tmp/20230129 - Subnautica Donald Trump Easter Egg.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/randomarts/mangoyena/mango female hyena behavior/@eaDir
|
||||
/volume1/Hydra/Desktop/randomarts/mangoyena/@eaDir
|
||||
/volume1/Hydra/Desktop/randomarts/twokindsdump/@eaDir
|
||||
/volume1/Hydra/Desktop/randomarts/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/20201013 - Sitcom.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/20171223_-_polar_express_looking_for_a_girl.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/Atlantis - You don't wanna know.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/dwaynegetout.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/eggman shutup.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/how bout you join the vc.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/i forgive you.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/i love black girls man.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/joe biden show us stop playin around.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/keemstar you are gay.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/kermithump.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/my source is that i made it tf up.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/spellColossal.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/that's called mf bars nigga.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/theatrevibe.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/thomas george carlin.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/two pack of ass - mf bars nigga part 2.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/twomad incomprehensibly retarded.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/yespleasedothat.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/you don't wanna know.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/organizedchaos/eaDir_tmp/lundstrom HHS hilarity.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/writinRepo/destruction/@eaDir
|
||||
/volume1/Hydra/Desktop/writinRepo/yt/DraconianDiscourse/DragonsDesk/2025-05-13 why were the natives technologically primitive/@eaDir
|
||||
/volume1/Hydra/Desktop/writinRepo/yt/DraconianDiscourse/DragonsDesk/@eaDir
|
||||
/volume1/Hydra/Desktop/writinRepo/yt/The Giant's Father/@eaDir
|
||||
/volume1/Hydra/Desktop/writinRepo/yt/political compass/@eaDir
|
||||
/volume1/Hydra/Desktop/writinRepo/yt/potentialvids/coco vs book of life/@eaDir
|
||||
/volume1/Hydra/Desktop/writinRepo/yt/potentialvids/coco vs book of life/eaDir_tmp/20141017 - Carmelo (2000).mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/coq/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/deepgit/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/dilay/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/icofx/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/inno-script-studio/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/innosetup/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/io-ninja/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/spywareblaster/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/stretchly/screenshots/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/superposition-benchmark/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/tinymediamanager/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/tinymediamanager/screenshots/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/codetrack/screenshots/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/codetrack/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/herdprotect/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/authy-desktop/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/boxcli/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/cacher/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/claws-mail/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/cmder/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/cmdermini/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/codecontracts/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/codemaid/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/disposablefixer/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/dumo/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/electrum-ltc/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/encfsmp/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/enki/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/folder_size/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/friture/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/fstar/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/gbm/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/ghostdoc-enterprise/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/ghostdoc-pro/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/golly/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/gtkwave/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/hardentools/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/heaven-benchmark/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/linux-reader/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/lunacy/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/master-pdf-editor/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/mediathekview/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/meld/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/monogame/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/nagstamon/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/nordpass/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/nordlocker/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/nordvpn-teams/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/onionshare/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/openmpt/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/origin/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/persepolis/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/plane9/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/powder-toy/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/privazer/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/qilin-editor/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/qilin-editor/screenshots/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/qemu/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/qmmp/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/qnapi/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/ubisoft-connect/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/unit-test-boilerplate-generator/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/unit-test-boilerplate-generator/screenshots/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/automatic/valley-benchmark/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/manual/asp-net-mvc-boilerplate/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/manual/metapad-light/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/chocolatey-packages/manual/metapad/icons/@eaDir
|
||||
/volume1/Hydra/Desktop/eaDir_tmp/dog snuggle boat.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/eaDir_tmp/20230615 - 3 Disturbing TRUE Sleepover Horror Stories (V5).mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/eaDir_tmp/20220927 - Jordan PetersonΓÇÖs FULL Interview With Piers Morgan.mp4/@eaDir
|
||||
/volume1/Hydra/Desktop/eaDir_tmp/default.mp4/@eaDir
|
||||
=== Removing existing @eaDir directories ===
|
||||
=== Installing custom thumbnails ===
|
||||
-> Replacing /volume1/Hydra/Desktop/twenty twenty five/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/death/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/RainyProj/fnaf2_1/shorts/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/twenty twenty one/2021-09-25 trunk shenans/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/twenty twenty one/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/twenty twenty two/retards0626/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/twenty twenty two/The Experience/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/twenty twenty two/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/twenty twenty three/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/twenty twenty four/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/tiktokPotential/marxistIdiocy/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/rainysrambles_scramble/RnR/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/guh/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/snake metal gear colonel airpods/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/mems/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/half life cats/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/subnautica1/fin_shorts/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/subnautica1/RnR/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/subnautica1/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/organizedchaos/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/writinRepo/yt/potentialvids/coco vs book of life/eaDir_tmp
|
||||
-> Replacing /volume1/Hydra/Desktop/eaDir_tmp
|
||||
=== Removing leftover eaDir_tmp directories ===
|
||||
=== Adding indexing exclusion hints ===
|
||||
=== Protecting custom thumbnails ===
|
||||
=== Cleanup complete! ===
|
||||
Note: If indexing was stopped and needs restarting, use DSM UI or your NAS service tools.
|
||||
@@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Extract existing Synology thumbnails from @eaDir into eaDir_tmp so thumbgen skips regeneration
|
||||
# Usage: ./extract_eadir_to_tmp.sh /volume1/YourShare/path
|
||||
|
||||
set -uo pipefail
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "Usage: $0 <directory_path>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TARGET_DIR="$1"
|
||||
|
||||
if [ ! -d "$TARGET_DIR" ]; then
|
||||
echo "Error: '$TARGET_DIR' is not a directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "=== Extracting @eaDir thumbnails to eaDir_tmp ==="
|
||||
echo "Target: $TARGET_DIR"
|
||||
|
||||
# Every .../@eaDir under TARGET (e.g. TARGET/@eaDir and TARGET/gameplay/@eaDir). Skip paths inside eaDir_tmp.
|
||||
find "$TARGET_DIR" -type d -name '@eaDir' ! -path '*/eaDir_tmp/*' -print0 | while IFS= read -r -d '' EADIR; do
|
||||
PARENT_DIR="$(dirname "$EADIR")"
|
||||
|
||||
# Each immediate subdir under @eaDir corresponds to a source filename
|
||||
find "$EADIR" -mindepth 1 -maxdepth 1 -type d -print0 | while IFS= read -r -d '' ENTRY; do
|
||||
BASENAME="$(basename "$ENTRY")"
|
||||
DEST_DIR="$PARENT_DIR/eaDir_tmp/$BASENAME"
|
||||
|
||||
mkdir -p "$DEST_DIR" || continue
|
||||
|
||||
# Copy without overwriting existing files in eaDir_tmp
|
||||
for F in \
|
||||
SYNOVIDEO_VIDEO_SCREENSHOT.jpg \
|
||||
SYNOPHOTO_THUMB_XL.jpg \
|
||||
SYNOPHOTO_THUMB_B.jpg \
|
||||
SYNOPHOTO_THUMB_M.jpg \
|
||||
SYNOPHOTO_THUMB_PREVIEW.jpg \
|
||||
SYNOPHOTO_THUMB_S.jpg; do
|
||||
if [ -f "$ENTRY/$F" ] && [ ! -f "$DEST_DIR/$F" ]; then
|
||||
cp "$ENTRY/$F" "$DEST_DIR/$F"
|
||||
fi
|
||||
done
|
||||
done
|
||||
done
|
||||
|
||||
echo "=== Done. Existing thumbnails copied into eaDir_tmp where available. ==="
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
# Fix OneDrive Thumbnail Override - Restore Local Thumbnails
|
||||
# This script disables OneDrive's cloud thumbnail providers that override custom thumbnails
|
||||
|
||||
Write-Host "🎯 Fixing OneDrive Thumbnail Override Issue..." -ForegroundColor Cyan
|
||||
Write-Host "This will restore priority to your locally-generated thumbnails." -ForegroundColor Yellow
|
||||
|
||||
# Check if running as administrator
|
||||
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {
|
||||
Write-Host "❌ This script requires administrator privileges. Please run as administrator." -ForegroundColor Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 1. Disable OneDrive Files On-Demand thumbnail override
|
||||
Write-Host "🔧 Disabling OneDrive Files On-Demand thumbnail override..." -ForegroundColor Green
|
||||
|
||||
try {
|
||||
# User-level OneDrive policies
|
||||
if (!(Test-Path "HKCU:\SOFTWARE\Policies\Microsoft\OneDrive")) {
|
||||
New-Item -Path "HKCU:\SOFTWARE\Policies\Microsoft\OneDrive" -Force | Out-Null
|
||||
}
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Policies\Microsoft\OneDrive" -Name "DisableCloudThumbnails" -Value 1 -Type DWord
|
||||
|
||||
# Machine-level OneDrive policies
|
||||
if (!(Test-Path "HKLM:\SOFTWARE\Policies\Microsoft\OneDrive")) {
|
||||
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\OneDrive" -Force | Out-Null
|
||||
}
|
||||
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\OneDrive" -Name "DisableCloudThumbnails" -Value 1 -Type DWord
|
||||
|
||||
Write-Host "✅ OneDrive thumbnail override disabled" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "⚠️ Warning: Could not set OneDrive policies: $($_.Exception.Message)" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
# 2. Disable cloud files thumbnail provider
|
||||
Write-Host "🔧 Disabling cloud files thumbnail provider..." -ForegroundColor Green
|
||||
|
||||
try {
|
||||
# This is the key provider that overrides local thumbnails
|
||||
$cloudProviderPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ThumbnailProviders\{E357FCCD-A995-4576-B01F-234630154E96}"
|
||||
if (Test-Path $cloudProviderPath) {
|
||||
Remove-Item -Path $cloudProviderPath -Force -Recurse
|
||||
Write-Host "✅ Cloud thumbnail provider removed" -ForegroundColor Green
|
||||
} else {
|
||||
Write-Host "ℹ️ Cloud thumbnail provider not found (may already be disabled)" -ForegroundColor Blue
|
||||
}
|
||||
} catch {
|
||||
Write-Host "⚠️ Warning: Could not remove cloud thumbnail provider: $($_.Exception.Message)" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
# 3. Set local thumbnail preferences
|
||||
Write-Host "🔧 Configuring local thumbnail preferences..." -ForegroundColor Green
|
||||
|
||||
try {
|
||||
# Ensure local thumbnails are enabled
|
||||
if (!(Test-Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced")) {
|
||||
New-Item -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Force | Out-Null
|
||||
}
|
||||
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "IconsOnly" -Value 0 -Type DWord
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "DisableThumbnailsOnNetworkFolders" -Value 0 -Type DWord
|
||||
|
||||
# Add custom registry value to prefer local thumbnails
|
||||
Set-ItemProperty -Path "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced" -Name "UseLocalThumbnailProvider" -Value 1 -Type DWord
|
||||
|
||||
Write-Host "✅ Local thumbnail preferences configured" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "⚠️ Warning: Could not set local thumbnail preferences: $($_.Exception.Message)" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
# 4. Disable OneDrive shell icon overlays (these can interfere with thumbnails)
|
||||
Write-Host "🔧 Disabling OneDrive shell overlays..." -ForegroundColor Green
|
||||
|
||||
$overlayPaths = @(
|
||||
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\OneDrive1",
|
||||
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\OneDrive2",
|
||||
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\OneDrive3",
|
||||
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\OneDrive4",
|
||||
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\OneDrive5",
|
||||
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\OneDrive6",
|
||||
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\OneDrive7"
|
||||
)
|
||||
|
||||
$overlaysRemoved = 0
|
||||
foreach ($overlayPath in $overlayPaths) {
|
||||
try {
|
||||
if (Test-Path $overlayPath) {
|
||||
Remove-Item -Path $overlayPath -Force -Recurse
|
||||
$overlaysRemoved++
|
||||
}
|
||||
} catch {
|
||||
Write-Host "⚠️ Warning: Could not remove overlay $overlayPath" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "✅ Removed $overlaysRemoved OneDrive shell overlays" -ForegroundColor Green
|
||||
|
||||
# 5. Clear thumbnail cache to force regeneration
|
||||
Write-Host "🔧 Clearing thumbnail cache to force regeneration..." -ForegroundColor Green
|
||||
|
||||
try {
|
||||
# Stop Explorer process
|
||||
Stop-Process -Name "explorer" -Force -ErrorAction SilentlyContinue
|
||||
Start-Sleep -Seconds 2
|
||||
|
||||
# Clear thumbnail cache
|
||||
$thumbCachePath = "$env:LOCALAPPDATA\Microsoft\Windows\Explorer"
|
||||
$thumbCacheFiles = Get-ChildItem -Path $thumbCachePath -Filter "thumbcache_*.db" -ErrorAction SilentlyContinue
|
||||
|
||||
foreach ($file in $thumbCacheFiles) {
|
||||
try {
|
||||
Remove-Item -Path $file.FullName -Force
|
||||
} catch {
|
||||
Write-Host "⚠️ Could not remove $($file.Name)" -ForegroundColor Yellow
|
||||
}
|
||||
}
|
||||
|
||||
# Restart Explorer
|
||||
Start-Process -FilePath "explorer.exe"
|
||||
Start-Sleep -Seconds 3
|
||||
|
||||
Write-Host "✅ Thumbnail cache cleared and Explorer restarted" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "⚠️ Warning: Issues clearing thumbnail cache: $($_.Exception.Message)" -ForegroundColor Yellow
|
||||
Write-Host "🔄 Please restart Windows Explorer manually" -ForegroundColor Blue
|
||||
}
|
||||
|
||||
# 6. Prevent automatic thumbnail cache deletion
|
||||
Write-Host "🔧 Preventing Windows from auto-deleting thumbnail cache..." -ForegroundColor Green
|
||||
|
||||
try {
|
||||
# Disable thumbnail cache auto-cleanup in Disk Cleanup
|
||||
$autorunKey = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Thumbnail Cache"
|
||||
if (Test-Path $autorunKey) {
|
||||
Set-ItemProperty -Path $autorunKey -Name "Autorun" -Value 0 -Type DWord
|
||||
}
|
||||
|
||||
# Also disable for WOW64 on 64-bit systems
|
||||
$autorunKeyWow64 = "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Explorer\VolumeCaches\Thumbnail Cache"
|
||||
if (Test-Path $autorunKeyWow64) {
|
||||
Set-ItemProperty -Path $autorunKeyWow64 -Name "Autorun" -Value 0 -Type DWord
|
||||
}
|
||||
|
||||
Write-Host "✅ Thumbnail cache auto-deletion disabled" -ForegroundColor Green
|
||||
} catch {
|
||||
Write-Host "⚠️ Warning: Could not disable thumbnail cache auto-deletion: $($_.Exception.Message)" -ForegroundColor Yellow
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
Write-Host "🎉 OneDrive thumbnail override fix complete!" -ForegroundColor Green
|
||||
Write-Host ""
|
||||
Write-Host "📋 What was changed:" -ForegroundColor Cyan
|
||||
Write-Host " ✓ Disabled OneDrive cloud thumbnail providers" -ForegroundColor White
|
||||
Write-Host " ✓ Removed cloud files thumbnail provider" -ForegroundColor White
|
||||
Write-Host " ✓ Set local thumbnail preferences" -ForegroundColor White
|
||||
Write-Host " ✓ Disabled OneDrive shell overlays" -ForegroundColor White
|
||||
Write-Host " ✓ Cleared and regenerated thumbnail cache" -ForegroundColor White
|
||||
Write-Host " ✓ Prevented automatic thumbnail cache deletion" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "🔄 Please restart your computer for all changes to take effect." -ForegroundColor Yellow
|
||||
Write-Host "📁 Your custom thumbnails should now have priority over OneDrive's generic icons!" -ForegroundColor Green
|
||||
+144
@@ -0,0 +1,144 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Enhanced NAS cleanup script with thumbnail protection
|
||||
# Usage: ./nascleanup.sh /volume1/Hydra/path/to/directory
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
echo "Usage: $0 <directory_path>"
|
||||
echo "Example: $0 /volume1/Hydra/Creative/artsy"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TARGET_DIR="$1"
|
||||
|
||||
# Merge synoindexd layout .../<file>/@eaDir/*.jpg into .../<file>/ (Synology Drive expects no inner @eaDir).
|
||||
flatten_indexer_layout() {
|
||||
local root="$1"
|
||||
[ -d "$root" ] || return 0
|
||||
find "$root" -mindepth 2 -type d -name '@eaDir' -print0 2>/dev/null | while IFS= read -r -d '' NEST; do
|
||||
PARENT="$(dirname "$NEST")"
|
||||
[ -d "$NEST" ] || continue
|
||||
for f in "$NEST"/*; do
|
||||
[ -e "$f" ] || continue
|
||||
base="$(basename "$f")"
|
||||
[ "$base" = "SYNOINDEX_MEDIA_INFO" ] && continue
|
||||
mv -f "$f" "$PARENT/" 2>/dev/null || true
|
||||
done
|
||||
rm -rf "$NEST" 2>/dev/null || true
|
||||
done
|
||||
}
|
||||
|
||||
# Copy one thumbgen tree: PARENT/eaDir_tmp -> PARENT/@eaDir (psthumbgen uses per-folder eaDir_tmp).
|
||||
promote_one_eadir_tmp() {
|
||||
local EADIR_TMP="$1"
|
||||
local PARENT TARGET_AT SRC_JPG DST_JPG
|
||||
PARENT="$(dirname "$EADIR_TMP")"
|
||||
TARGET_AT="$PARENT/@eaDir"
|
||||
[ -d "$EADIR_TMP" ] || return 0
|
||||
chmod -R 755 "$EADIR_TMP" 2>/dev/null || true
|
||||
find "$EADIR_TMP" -type f -exec chmod 644 '{}' \; 2>/dev/null || true
|
||||
echo " -> Flattening eaDir_tmp (indexer may have added .../<file>/@eaDir/) before copy: $EADIR_TMP"
|
||||
flatten_indexer_layout "$EADIR_TMP"
|
||||
echo " -> Replacing $EADIR_TMP -> $TARGET_AT"
|
||||
SRC_JPG=$(find "$EADIR_TMP" -type f -name 'SYNO*.jpg' 2>/dev/null | wc -l | tr -d '[:space:]')
|
||||
rm -rf "$TARGET_AT"
|
||||
mkdir -p "$TARGET_AT"
|
||||
if ! cp -R "$EADIR_TMP/." "$TARGET_AT/"; then
|
||||
echo "ERROR: eaDir_tmp -> @eaDir copy failed (see cp messages above)."
|
||||
exit 1
|
||||
fi
|
||||
echo " -> Flattening @eaDir after copy (same layout fix)"
|
||||
flatten_indexer_layout "$TARGET_AT"
|
||||
DST_JPG=$(find "$TARGET_AT" -type f -name 'SYNO*.jpg' 2>/dev/null | wc -l | tr -d '[:space:]')
|
||||
if [ "$SRC_JPG" -gt 0 ] && [ "$DST_JPG" -ne "$SRC_JPG" ]; then
|
||||
echo "ERROR: Promote incomplete: $DST_JPG SYNO*.jpg in @eaDir vs $SRC_JPG in eaDir_tmp (expected equal)."
|
||||
exit 1
|
||||
fi
|
||||
chmod -R 755 "$EADIR_TMP" 2>/dev/null || true
|
||||
find "$EADIR_TMP" -type f -exec chmod u+w '{}' \; 2>/dev/null || true
|
||||
find "$EADIR_TMP" -type d -exec chmod u+w '{}' \; 2>/dev/null || true
|
||||
rm -rf "$EADIR_TMP" 2>/dev/null || sudo -n rm -rf "$EADIR_TMP" 2>/dev/null || true
|
||||
}
|
||||
|
||||
echo "=== Enhanced Synology Thumbnail Cleanup ==="
|
||||
echo "Target directory: $TARGET_DIR"
|
||||
|
||||
# 1. Stop indexing services temporarily
|
||||
echo "Stopping indexing services (best effort)..."
|
||||
# Non-login SSH often has a minimal PATH; binary lives in /usr/syno/sbin
|
||||
if [ -x /usr/syno/sbin/synoservicectl ]; then
|
||||
SYNOCTL=/usr/syno/sbin/synoservicectl
|
||||
elif command -v synoservicectl >/dev/null 2>&1; then
|
||||
SYNOCTL=synoservicectl
|
||||
else
|
||||
SYNOCTL=""
|
||||
fi
|
||||
if [ -n "$SYNOCTL" ]; then
|
||||
"$SYNOCTL" --stop synoindexd 2>/dev/null || true
|
||||
"$SYNOCTL" --stop pkgctl-SynoFinder 2>/dev/null || true
|
||||
elif command -v systemctl >/dev/null 2>&1; then
|
||||
# Plain `systemctl` as non-root usually fails silently; try sudo -n first (NOPASSWD).
|
||||
for u in synoindexd pkgctl-SynoFinder; do
|
||||
sudo -n systemctl stop "$u" 2>/dev/null || systemctl stop "$u" 2>/dev/null || true
|
||||
done
|
||||
else
|
||||
echo " -> Service control unavailable; skipping"
|
||||
fi
|
||||
|
||||
# 2. Clear indexing queue to prevent regeneration
|
||||
echo "Clearing indexing queue (if accessible)..."
|
||||
if [ -w /var/spool ]; then
|
||||
rm -f /var/spool/syno_indexing_queue* 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 3. Dry-run check (see what @eaDir directories exist)
|
||||
echo "=== Existing @eaDir directories ==="
|
||||
find "$TARGET_DIR" -type d -name '@eaDir' -exec echo '{}' \;
|
||||
|
||||
# 4. Remove any existing @eaDir directories
|
||||
echo "=== Removing existing @eaDir directories ==="
|
||||
# Drop indexer sidecars first (often root-owned — passwordless sudo helps)
|
||||
if command -v sudo >/dev/null 2>&1; then
|
||||
sudo -n find "$TARGET_DIR" -name 'SYNOINDEX_MEDIA_INFO' \( -type f -o -type d \) -exec rm -rf '{}' \; 2>/dev/null || true
|
||||
fi
|
||||
find "$TARGET_DIR" -name 'SYNOINDEX_MEDIA_INFO' \( -type f -o -type d \) -exec chmod -R u+w '{}' \; 2>/dev/null || true
|
||||
find "$TARGET_DIR" -name 'SYNOINDEX_MEDIA_INFO' \( -type f -o -type d \) -exec rm -rf '{}' \; 2>/dev/null || true
|
||||
# First make them writable so we can remove them
|
||||
find "$TARGET_DIR" -type d -name '@eaDir' -exec chmod -R 755 '{}' \; 2>/dev/null || true
|
||||
find "$TARGET_DIR" -path '*/@eaDir/*' -type f -exec chmod 644 '{}' \; 2>/dev/null || true
|
||||
# Now remove them (2>/dev/null: races when parents disappear mid-find)
|
||||
find "$TARGET_DIR" -type d -name '@eaDir' -exec rm -rf '{}' \; 2>/dev/null || true
|
||||
|
||||
# 5. Promote every .../eaDir_tmp -> .../@eaDir (thumbgen writes eaDir_tmp next to each video folder, not only TARGET_DIR/eaDir_tmp)
|
||||
echo "=== Installing custom thumbnails ==="
|
||||
INSTALL_ANY=0
|
||||
while IFS= read -r -d '' EADIR_TMP; do
|
||||
INSTALL_ANY=1
|
||||
promote_one_eadir_tmp "$EADIR_TMP"
|
||||
done < <(find "$TARGET_DIR" -type d -name 'eaDir_tmp' -print0)
|
||||
if [ "$INSTALL_ANY" -eq 0 ]; then
|
||||
echo " -> No eaDir_tmp under $TARGET_DIR; skipping install step"
|
||||
fi
|
||||
echo "=== Removing any leftover eaDir_tmp directories ==="
|
||||
find "$TARGET_DIR" -type d -name 'eaDir_tmp' -exec rm -rf '{}' \; 2>/dev/null || true
|
||||
|
||||
# 6. Protect custom thumbnails with read-only permissions
|
||||
echo "=== Adding indexing exclusion hints ==="
|
||||
find "$TARGET_DIR" -type d -name '@eaDir' -exec sh -c 'touch "$1/.noindex" 2>/dev/null || true' _ {} \; 2>/dev/null || true
|
||||
|
||||
# 7. Protect custom thumbnails with read-only permissions (after .noindex)
|
||||
echo "=== Protecting custom thumbnails ==="
|
||||
find "$TARGET_DIR" -type d -name '@eaDir' -exec chmod 555 '{}' \; 2>/dev/null || true
|
||||
find "$TARGET_DIR" -path '*/@eaDir/*' -type f -exec chmod 444 '{}' \; 2>/dev/null || true
|
||||
|
||||
echo "=== Cleanup complete! ==="
|
||||
echo "Restarting indexing services (best effort)..."
|
||||
if [ -n "$SYNOCTL" ]; then
|
||||
"$SYNOCTL" --start synoindexd 2>/dev/null || true
|
||||
"$SYNOCTL" --start pkgctl-SynoFinder 2>/dev/null || true
|
||||
elif command -v systemctl >/dev/null 2>&1; then
|
||||
for u in synoindexd pkgctl-SynoFinder; do
|
||||
sudo -n systemctl start "$u" 2>/dev/null || systemctl start "$u" 2>/dev/null || true
|
||||
done
|
||||
fi
|
||||
echo "Note: If indexing was stopped and needs restarting, use DSM UI or: sudo systemctl restart synoindexd"
|
||||
+1228
-13
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,15 @@
|
||||
param(
|
||||
[Parameter(Mandatory = $true)]
|
||||
[string] $Root
|
||||
)
|
||||
if (-not (Test-Path -LiteralPath $Root)) { exit 0 }
|
||||
$dirs = @(Get-ChildItem -LiteralPath $Root -Recurse -Directory -Filter 'eaDir_tmp' -ErrorAction SilentlyContinue |
|
||||
Sort-Object { $_.FullName.Length } -Descending)
|
||||
foreach ($d in $dirs) {
|
||||
try {
|
||||
Remove-Item -LiteralPath $d.FullName -Recurse -Force
|
||||
Write-Host "Removed: $($d.FullName)"
|
||||
} catch {
|
||||
Write-Host "Failed: $($d.FullName)"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user