Commit graph

28 commits

Author SHA1 Message Date
Claude
033e4bb020 Fix: remove duplicate hiresPath variable declaration 2026-03-31 19:51:48 -04:00
Claude
51be07f076 Improve high-res file matching: use substring search instead of exact title match
When searching for high-res files by Title metadata, now looks for files that CONTAIN the Title rather than requiring exact match. This handles cases like:
- Title: 'File 1' → matches 'ZacIsCool--File 1.mp4'
- Title: 'File 2' → matches 'ZacIsCool--File 2.mp4'

Makes the fallback lookup more flexible and practical for real-world filename patterns.
2026-03-31 19:48:28 -04:00
Claude
205ef3f50a Add high-res media folder fallback lookup for unmapped proxy files
- Added hiresMediaFolder setting to configuration UI
- Implement findHighResFileForGves() to search for missing high-res media files
- When .prproj has unlinked proxy media (FramelightX didn't populate paths), search configured folder for matches
- Modified remapPrproj() to accept options with hiresMediaFolder path
- Uses file Title metadata and video/audio extension matching as fallback
- Server passes hiresMediaFolder setting when calling remapper
2026-03-31 19:39:42 -04:00
Claude
c323872a0f debug: Add detailed logging to prproj analyzer
Added debug output to analyzePrproj() to show:
- All media blocks found in the project (uid, filePath, isGves, isProxy, title)
- Complete proxy linkage map (which .gves UIDs link to which high-res UIDs)
- Raw media blocks in analysis response (_debug_mediaBlocks)
- Proxy links in analysis response (_debug_proxyLinks)

Also added console.log output for all media blocks and proxy links
to help diagnose why high-res blocks aren't being found/linked.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-31 19:28:45 -04:00
Claude
a90177fd93 feat: Support macOS Adobe Media Encoder log filenames
Windows AME uses AMEEncodingLog.txt in the version directory.
macOS AME uses Adobe Media Encoder Log.txt in the logs subdirectory.

Updated readAMELogs() to check for both naming conventions:
1. First tries Windows filenames (AMEEncodingLog.txt)
2. Falls back to macOS filenames (Adobe Media Encoder Log.txt)

This allows the job manager to work with either platform.
Also updated docstring to document platform differences in both
log file locations and encoding (Windows uses UTF-16 LE, macOS uses UTF-8).

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-31 17:22:18 -04:00
Claude
f7f42351b9 fix: Handle UTF-16 LE encoded AME logs from Windows
Windows Adobe Media Encoder writes AMEEncodingLog.txt as UTF-16 LE with
BOM. The parser was reading files as UTF-8, producing garbled output where
every character had a null byte between it — causing all regex matching
to fail silently and return zero parsed entries.

Added readFileAutoEncoding() that detects UTF-16 LE/BE BOM and converts
to UTF-8 before parsing. Also handles BOM-less UTF-16 by checking for
null byte patterns.

Additionally improved parser to handle Windows AME log format:
- "File Encoded with warning" status lines (not just "Status: Done")
- "Queue Started/Stopped" lines are now skipped
- "Log File Created" header lines are skipped
- Separator lines (dashes) are skipped
- Offline media warnings and missing asset lines are captured
- "warning" status counts as success in stats

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 17:12:41 -04:00
Claude
d1d4fd0e9d Update: Replace logo and customize header
- Replace /logo.png with /logo.jpg (user's custom logo)
- Update header subtitle to 'Made By an Exhausted Zac Gaetano'
- Copy images.jpg from project folder to public/logo.jpg

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-31 17:02:07 -04:00
Claude
63b303fd01 docs: Add detailed architecture and troubleshooting guide
Explain the host-level SMB mounting approach:
- Why we mount SMB on the host, not in the container (security, reliability)
- Why we bind specific subdirectories instead of the root share (avoid ephemeral volumes)
- How the separation of concerns improves operations and portability

Add troubleshooting section covering:
- Files not appearing on SMB share after upload
- SMB mount failures on host
- Container startup issues
- Step-by-step verification commands

Document the .prproj path remapping rationale and AMPP proxy workflow context.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-31 17:00:21 -04:00
Claude
4f54305abf Fix: Bind SMB subdirectories correctly in docker-compose.yml
Previously, /mnt/smb-ame was mounted as /smb-share in the container, but
/watch, /output, and /ame-logs were separate Docker volumes, causing
uploaded files to be stored in ephemeral volumes instead of the SMB share.

Now bind each SMB subdirectory directly to its corresponding container path:
- /mnt/smb-ame/Watch → /watch
- /mnt/smb-ame/Output → /output
- /mnt/smb-ame/Logs → /ame-logs

This ensures uploaded .prproj files appear on the SMB share where AME can
access them from the watch folder.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-31 16:55:55 -04:00
Claude
6711abb339 fix: Save pendingFile ref before closeModal() nulls it
closeModal() was setting pendingFile = null, then confirmSubmit()
was trying to append the now-null pendingFile to FormData, causing
'No file uploaded' error on every submission.

Fix: capture pendingFile into fileToSubmit before calling closeModal().

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-31 16:42:25 -04:00
Claude
67533c1b24 simplify: Remove unnecessary bind-mounts in entrypoint
- Docker-compose already handles the bind-mounts via volumes config
- Entrypoint now just creates subdirectories and verifies access
- Removes 'Could not bind' warnings that were noise
- Cleaner startup logs

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-31 16:28:44 -04:00
Claude
ba39da5098 fix: Mount SMB root and create subdirectories automatically
- Mount /mnt/smb-ame as /smb-share in container
- Entrypoint creates watch/output/logs subdirectories if missing
- Creates bind-mounts from /smb-share/watch to /watch, etc.
- Graceful fallback if SMB share not mounted on host
- Works without pre-existing subdirectories on SMB server

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-31 16:18:49 -04:00
Claude
1c61d953fd refactor: Switch to host-level SMB mounting (bind-mount approach)
- Remove container-level CIFS mounting (requires SYS_ADMIN capability)
- Use docker-compose.yml bind-mounts from host (/mnt/smb-ame/*)
- Simplify entrypoint.sh to just verify mount points exist
- Include mount command in comments for host setup
- More reliable and doesn't require Docker capability grants

To use:
1. Mount SMB on host: sudo mount -t cifs //172.18.210.5/ame /mnt/smb-ame \
   -o username=smb,password=Production2020!,uid=1000,gid=1000,file_mode=0755,dir_mode=0755,vers=3.0
2. Update /etc/fstab to persist mount across reboots
3. Start container: docker compose up -d

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-31 16:12:59 -04:00
Claude
c40a2ddb89 fix: Use embedded SMB credentials (smb/Production2020!) as fallback
- credentials read from settings first
- env vars override settings
- embedded defaults (smb/Production2020!) used if nothing configured
- allows immediate SMB mount on container startup without config

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-31 16:09:48 -04:00
Claude
aef2b64d4e feat: Add SMB network share auto-mounting support
- Create entrypoint.sh to handle SMB mount on container startup
- Read credentials from settings.json and mount //172.18.210.5/ame
- Bind-mount subdirectories (watch, output, logs) to container paths
- Update Dockerfile with cifs-utils and entrypoint script
- Update docker-compose.yml with SYS_ADMIN capability for mounting
- Add comprehensive SMB configuration section to README
- Include troubleshooting guide and alternative approaches
- Maintain backward compatibility with local volumes
- Never expose passwords to browser (server-side storage only)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-31 16:03:40 -04:00
b1abafd1de Update README.md with documentation 2026-03-31 15:35:26 -04:00
837df373ce Add public/index.html 2026-03-31 15:29:50 -04:00
86086cfc93 Add test-remap.js 2026-03-31 15:29:50 -04:00
8caaeaf13c Add server.js 2026-03-31 15:29:49 -04:00
47ad07366d Add prproj-remapper.js 2026-03-31 15:29:49 -04:00
e90ef6951f Add package.json 2026-03-31 15:29:49 -04:00
a1f839438e Add package-lock.json 2026-03-31 15:29:49 -04:00
9f961ba286 Add Dockerfile 2026-03-31 15:29:48 -04:00
79e2b959e2 Add docker-compose.yml 2026-03-31 15:29:48 -04:00
44c82fdffa Add ame-log-parser.js 2026-03-31 15:29:48 -04:00
e3efa14cd7 Add .env.example 2026-03-31 15:29:48 -04:00
27506fc6ff Add .dockerignore 2026-03-31 15:29:48 -04:00
1bf1ed093c Initial commit 2026-03-31 15:26:09 -04:00