Feature/exponential backoff implementation#3
Conversation
📝 WalkthroughWalkthroughThis pull request introduces a complete HLS (HTTP Live Streaming) workflow alongside existing video transcoding. New service modules handle HLS download, segmentation, and S3 upload operations. A BullMQ queue and worker process HLS jobs asynchronously. The transcode worker now enqueues HLS jobs after completing transcodes. Frontend logout functionality added with token cleanup. Changes
Sequence Diagram(s)sequenceDiagram
actor User
participant Client as Web Client
participant TranscodeWorker as Transcode<br/>Worker
participant S3 as S3 Storage
participant FFmpeg as FFmpeg
participant HLSWorker as HLS Worker
participant Redis as Redis Queue
User->>Client: Upload video
Client->>TranscodeWorker: Enqueue transcode job
TranscodeWorker->>S3: Get presigned URL
S3-->>TranscodeWorker: URL
TranscodeWorker->>S3: Download source video
S3-->>TranscodeWorker: Video data
TranscodeWorker->>FFmpeg: Transcode to 4 resolutions<br/>(1080p/720p/480p/360p)
FFmpeg-->>TranscodeWorker: Transcoded files
TranscodeWorker->>S3: Upload 4 resolutions
S3-->>TranscodeWorker: Uploaded ✓
TranscodeWorker->>Redis: Enqueue HLS job
Redis-->>HLSWorker: HLS job available
HLSWorker->>S3: Get presigned URLs<br/>(per bitrate)
S3-->>HLSWorker: URLs
HLSWorker->>S3: Download bitrate MP4s
S3-->>HLSWorker: MP4 data
HLSWorker->>FFmpeg: Segment to HLS<br/>(copy, no re-encode)
FFmpeg-->>HLSWorker: Playlist + TS segments
HLSWorker->>S3: Upload playlist<br/>+ TS segments
S3-->>HLSWorker: Uploaded ✓
HLSWorker-->>User: HLS content ready
User->>Client: Click Logout
Client->>Client: Clear token<br/>from storage
Client->>Client: Show auth view
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 16
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@server/logs/log.txt`:
- Around line 1-684: Remove the checked-in runtime log (log.txt) that contains
absolute paths, raw buffers (e.g. "<Buffer ff d8 ff e0 ...>"), internal IDs and
stack traces; delete it from the repo and history (git rm --cached log.txt then
add log.txt to .gitignore, and purge past commits with git filter-repo or BFG),
replace with a small sanitized excerpt if you need an example (no absolute
paths, buffers, or real IDs), and add a pre-commit rule/CI check to prevent
committing generated logs.
In `@server/package.json`:
- Around line 30-40: The devDependencies in package.json include deprecated
external type packages that conflict with the libraries' built-in TypeScript
definitions; remove the entries "@types/axios", "@types/dotenv", and
"@types/ioredis" from the "devDependencies" section so package.json only
references the actual packages (leave other `@types` entries intact) and then run
install to update lockfile.
In `@server/src/services/hls.service.ts`:
- Around line 120-137: The fs.createReadStream used when building the
PutObjectCommand can emit async errors (e.g., ENOENT) that are currently
unhandled; modify the upload loop (the Promise.all over files in the function
that constructs PutObjectCommand and calls s3Client.send) to attach an 'error'
listener to the stream before passing it to Body and wrap the s3Client.send call
in try/catch so stream/open errors and S3 errors are caught; specifically,
create the stream variable from fs.createReadStream(filePath), add
stream.on('error', err => { /* log and reject/handle per-file failure */ }),
then use that stream for Body in the PutObjectCommand and handle failures by
logging and not letting uncaught exceptions propagate (and ensure uploadedKeys
is only pushed on success).
- Around line 47-65: downloadObjectFromPreSignedUrlWithBitrate currently
downloads the whole MP4 into memory using axios with responseType 'arraybuffer';
change it to stream the response to disk and add a request timeout to avoid
holding multiple full files in RAM and prevent stalls. Use axios with
responseType: 'stream' (or AbortController) and a timeout value, create a write
stream to localFilePath, pipe response.data into fs.createWriteStream, await the
stream 'finish' event and handle 'error' to cleanup the partial file; also check
response.status (or reject non-2xx) before piping and log/throw using job.id on
failures so Promise.all callers won’t hang indefinitely.
In `@server/src/services/transcode.service.ts`:
- Around line 27-45: The download currently buffers the entire video in memory
in downloadObjectFromPreSignedUrl (axios responseType 'arraybuffer') and later
the transcoded outputs are read via fs.readFileSync and uploaded concurrently,
risking OOM; change the download to use axios responseType: 'stream' and pipe
the response.data to fs.createWriteStream(localFilePath) to write directly to
disk, then for uploading replace fs.readFileSync usage with
fs.createReadStream(filePath) and pass that stream as the S3 upload Body, and
avoid unbounded Promise.all by uploading sequentially or with a bounded
concurrency loop (e.g., for..of or a small worker pool) when handling the
transcoded outputs.
In `@server/src/workers/hls.queue.ts`:
- Around line 4-15: The hlsQueue uses an unsafe cast "redis as any" and a
different initial backoff delay (5000ms) than transcodeQueue (3000ms); replace
the any-cast with the proper BullMQ connection type or explicitly wrap/convert
the ioredis client to BullMQ's ConnectionOptions (referencing the Queue
constructor and the hlsQueue variable and its defaultJobOptions.backoff), or at
minimum add a clear inline comment documenting why the cast is necessary; also
either align the backoff.delay with transcodeQueue or add a comment on hlsQueue
explaining the intentional 5000ms choice to make the difference explicit.
In `@server/src/workers/hls.worker.ts`:
- Around line 29-45: The current cleanup runs in the worker-level
hlsWorker.on("completed") hook and removes the shared hlsDownloads root
asynchronously, causing race conditions and leaving failed jobs uncleaned;
instead, move the deletion into the per-job processor (the function that
receives job and fileId) and wrap the job logic in a try...finally so cleanup
always runs. Specifically, inside the job handler where you use Promise.all to
download/encode into hlsDownloads/<fileId>/<bitrate>/, add a finally block that
synchronously (or via awaited exec) deletes only the hlsDownloads/<fileId>
directory (use the fileId variable from the job payload), remove the global
hlsWorker.on("completed") rm -rf hlsDownloads call, and ensure the same finally
runs for both success and error paths so failed/retried jobs do not leave
orphaned files.
In `@server/src/workers/transcode.queue.ts`:
- Around line 6-14: The queue-level backoff in defaultJobOptions is being
overridden by the worker's custom backoffStrategy, causing confusion; pick one
approach and update the code accordingly: either remove the backoff block from
defaultJobOptions (keeping attempts/removeOnComplete/removeOnFail) so
transcode.worker.ts's backoffStrategy is the single source of retry logic, or
remove the backoffStrategy implementation in transcode.worker.ts and keep the
queue-level backoff in defaultJobOptions; reference defaultJobOptions and the
backoffStrategy in transcode.worker.ts to locate and modify the appropriate
config.
In `@server/src/workers/transcode.worker.ts`:
- Around line 12-54: Remove the large commented-out debug/test scaffold inside
the transcodeWorker function (references: transcodeWorker, SIMULATE_FAILURE,
FAIL_UNTIL_ATTEMPT, BASE_DELAY, jobTimestamps) — delete the entire 40+ line
block of commented code and any unused commented constants; if you need to
preserve these tests, move them to a dedicated test utility or documentation
(e.g., a README or a separate test file) rather than leaving them commented in
transcode.worker.ts.
- Around line 76-86: The custom backoffStrategy in the settings object
duplicates the queue-level exponential backoff configured in transcode.queue.ts;
remove the entire settings.backoffStrategy block (the function referencing
BASE_DELAY and console.log) so the worker relies on the queue's
defaultJobOptions.backoff, or if you must keep it for logging, replace the heavy
logic with a thin wrapper that delegates to the queue-level backoff
configuration and only emits logs (i.e., do not duplicate the exponential
formula in transcode.worker.ts; reference BASE_DELAY and
defaultJobOptions.backoff in transcode.queue.ts instead).
- Line 1: The import list in transcode.worker.ts includes an unused symbol
tryCatch; remove tryCatch from the import statement (leave Worker and type Job)
so the line imports only the symbols actually used and eliminates the unused
import warning.
- Around line 56-61: The code currently returns early when
getPreSignedUrlForDownload(fileId, userId) yields no URL, which silently marks
the job successful and prevents retries; update the transcode.worker.ts flow to
throw an Error (including job.id and fileId in the message) instead of returning
so the job framework can detect failure and retry, i.e., replace the early
return after checking videoDownloadSignedUrl with a thrown error (or rethrow a
descriptive error) in the same block where getPreSignedUrlForDownload is called.
- Around line 89-101: The current transcodeWorker.on("completed", (job) => { ...
}) handler unsafely runs exec("rm -rf downloads") — replace this with a safe,
job-scoped cleanup: compute the absolute path for the job's output (e.g., derive
from job.id or job.data.outputDir), verify the path is inside your expected base
workspace, and delete only that directory atomically (use fs.rm or a library
with recursive option and proper error/lock handling) instead of a global rm
-rf; ensure the removal is awaited and errors are handled so one job's cleanup
cannot affect other concurrent jobs and the job completion flow accounts for
cleanup failures.
- Around line 9-10: The two ESM compatibility variables __filename and __dirname
are declared but never used; delete the const __filename =
fileURLToPath(import.meta.url); and const __dirname = path.dirname(__filename);
declarations and also remove the now-unused imports (e.g., fileURLToPath and/or
path) from the module top if they are only present to support those variables so
no unused imports remain.
In `@web/index.html`:
- Around line 338-340: The inline styles on the logout button should be moved
into a CSS class for consistency and maintainability: create a class (e.g.,
.btn-secondary) with the styles background: var(--surface-color); color:
var(--text-muted); border: 1px solid var(--border-color); margin-top: 1rem; then
remove the inline style attribute from the element with id "logout-btn" and add
the new class alongside the existing "btn" class so the button becomes
class="btn btn-secondary" while preserving its id.
- Around line 596-610: Modify the logoutBtn click handler to call the server
logout endpoint before clearing UI/storage: in the event listener attached to
logoutBtn (the anonymous function where you currently clear document.cookie,
localStorage, and toggle uploadView/authView), send a fetch to '/auth/logout'
(POST or the server's expected method) with credentials: 'include' so the
HttpOnly cookie is cleared server-side; await the response (or handle non-OK
responses) and only then remove client-side token
(localStorage.removeItem('token')), clear inputs
(emailInput.value/passwordInput.value), hide statuses
(hideStatus(authStatus)/hideStatus(uploadStatus)), and toggle views. Ensure
errors from the fetch are caught and logged so logout still falls back to
clearing UI if the call fails.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: d919d3da-1c54-4c1a-a40b-0ef25bc3f6a9
⛔ Files ignored due to path filters (1)
server/package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (13)
.gitignoreserver/logs/log.txtserver/package.jsonserver/src/app.tsserver/src/index.tsserver/src/services/hls.service.tsserver/src/services/transcode.service.tsserver/src/workers/hls.queue.tsserver/src/workers/hls.worker.tsserver/src/workers/transcode.queue.tsserver/src/workers/transcode.worker.tsserver/tsconfig.tsbuildinfoweb/index.html
| [2026-03-24T09:07:03.974Z] [LOG] Server is running on port 8080 | ||
| [2026-03-24T09:08:20.935Z] [LOG] Server is running on port 8080 | ||
| [2026-03-24T09:36:10.164Z] [LOG] 📽️ Processing job 2 for fileId bjc8kfmnke612us8g3gmn | ||
| [2026-03-24T09:36:10.164Z] [LOG] ✅ Transcoding completed for job 2 | ||
| [2026-03-24T09:36:10.203Z] [LOG] Job 2 has completed successfully! | ||
| [2026-03-24T10:00:37.944Z] [LOG] Server is running on port 8080 | ||
| [2026-03-24T10:01:07.829Z] [LOG] 📽️ Processing job 3 for fileId 0330of3lhf4nw4ykrn0ytr | ||
| [2026-03-24T10:01:07.829Z] [LOG] ✅ Transcoding completed for job 3 | ||
| [2026-03-24T10:01:07.957Z] [LOG] Job 3 has completed successfully! | ||
| [2026-03-24T10:01:46.508Z] [LOG] Server is running on port 8080 | ||
| [2026-03-24T10:02:04.022Z] [LOG] 📽️ Processing job 4 for fileId prxrlkm0nkh61wlyva9hpl | ||
| [2026-03-24T10:02:04.313Z] [LOG] Job 4 has failed with error: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint. | ||
| [2026-03-24T10:15:04.614Z] [LOG] Server is running on port 8080 | ||
| [2026-03-24T10:15:47.344Z] [LOG] 📽️ Processing job 5 for fileId vehuheacw3aj3rsixbmber | ||
| [2026-03-24T10:15:47.655Z] [LOG] <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 48 00 48 00 00 ff e1 14 47 45 78 69 66 00 00 4d 4d 00 2a 00 00 00 08 00 06 01 12 00 03 00 00 00 01 00 01 ... 70920 more bytes> | ||
| [2026-03-24T10:15:47.658Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/vehuheacw3aj3rsixbmber for job 5 | ||
| [2026-03-24T10:15:47.713Z] [LOG] Job 5 has completed successfully! | ||
| [2026-03-24T11:23:38.742Z] [LOG] Server is running on port 8080 | ||
| [2026-03-24T11:24:47.717Z] [LOG] 📽️ Processing job 6 for fileId 3ox4xjswfj3r4s6286mie | ||
| [2026-03-24T11:24:50.891Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/3ox4xjswfj3r4s6286mie for job 6 | ||
| [2026-03-24T11:24:50.891Z] [LOG] ⏳ Initiating bulk FFmpeg transcodes for 3ox4xjswfj3r4s6286mie... | ||
| [2026-03-24T11:24:50.891Z] [LOG] ⏳ Starting transcode for 1080p (1920x1080)... | ||
| [2026-03-24T11:24:50.893Z] [LOG] ⏳ Starting transcode for 720p (1280x720)... | ||
| [2026-03-24T11:24:50.893Z] [LOG] ⏳ Starting transcode for 480p (854x480)... | ||
| [2026-03-24T11:24:50.893Z] [LOG] ⏳ Starting transcode for 360p (640x360)... | ||
| [2026-03-24T11:25:06.700Z] [LOG] ✅ Finished transcode for 360p | ||
| [2026-03-24T11:25:07.166Z] [LOG] ✅ Finished transcode for 480p | ||
| [2026-03-24T11:25:08.177Z] [LOG] ✅ Finished transcode for 720p | ||
| [2026-03-24T11:25:09.023Z] [LOG] ✅ Finished transcode for 1080p | ||
| [2026-03-24T11:25:09.023Z] [LOG] ✅ All transcoding finished for job 6. Outputs: /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/3ox4xjswfj3r4s6286mie_360p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/3ox4xjswfj3r4s6286mie_480p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/3ox4xjswfj3r4s6286mie_720p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/3ox4xjswfj3r4s6286mie_1080p.mp4 | ||
| [2026-03-24T11:25:09.062Z] [LOG] Job 6 has completed successfully! | ||
| [2026-03-24T11:39:05.030Z] [LOG] Server is running on port 8080 | ||
| [2026-03-24T11:40:20.483Z] [LOG] Server is running on port 8080 | ||
| [2026-03-24T11:40:36.711Z] [LOG] 📽️ Processing job 7 for fileId 3pb9gh1ido4pu1hsysrep | ||
| [2026-03-24T11:40:37.932Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/3pb9gh1ido4pu1hsysrep for job 7 | ||
| [2026-03-24T11:40:37.932Z] [LOG] ⏳ Initiating bulk FFmpeg transcodes for 3pb9gh1ido4pu1hsysrep... | ||
| [2026-03-24T11:40:37.932Z] [LOG] ⏳ Starting transcode for 1080p (1920x1080)... | ||
| [2026-03-24T11:40:37.934Z] [LOG] ⏳ Starting transcode for 720p (1280x720)... | ||
| [2026-03-24T11:40:37.934Z] [LOG] ⏳ Starting transcode for 480p (854x480)... | ||
| [2026-03-24T11:40:37.934Z] [LOG] ⏳ Starting transcode for 360p (640x360)... | ||
| [2026-03-24T11:40:46.811Z] [LOG] ✅ Finished transcode for 360p | ||
| [2026-03-24T11:40:46.994Z] [LOG] ✅ Finished transcode for 480p | ||
| [2026-03-24T11:40:47.546Z] [LOG] ✅ Finished transcode for 720p | ||
| [2026-03-24T11:40:48.532Z] [LOG] ✅ Finished transcode for 1080p | ||
| [2026-03-24T11:40:48.532Z] [LOG] ✅ All transcoding finished for job 7. Outputs: /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/3pb9gh1ido4pu1hsysrep_360p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/3pb9gh1ido4pu1hsysrep_480p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/3pb9gh1ido4pu1hsysrep_720p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/3pb9gh1ido4pu1hsysrep_1080p.mp4 | ||
| [2026-03-24T11:40:48.532Z] [LOG] ☁️ Uploading transcoded files to S3 for 3pb9gh1ido4pu1hsysrep... | ||
| [2026-03-24T11:40:48.790Z] [LOG] ☁️ Uploaded 360p to S3: dev/users/w56kuucscxi1w740lalw7k/original/3pb9gh1ido4pu1hsysrep/360p.mp4 | ||
| [2026-03-24T11:40:48.818Z] [LOG] ☁️ Uploaded 480p to S3: dev/users/w56kuucscxi1w740lalw7k/original/3pb9gh1ido4pu1hsysrep/480p.mp4 | ||
| [2026-03-24T11:40:48.837Z] [LOG] ☁️ Uploaded 720p to S3: dev/users/w56kuucscxi1w740lalw7k/original/3pb9gh1ido4pu1hsysrep/720p.mp4 | ||
| [2026-03-24T11:40:48.983Z] [LOG] ☁️ Uploaded 1080p to S3: dev/users/w56kuucscxi1w740lalw7k/original/3pb9gh1ido4pu1hsysrep/1080p.mp4 | ||
| [2026-03-24T11:40:48.984Z] [LOG] ✅ All transcoded files uploaded to S3 for fileId: 3pb9gh1ido4pu1hsysrep | ||
| [2026-03-24T11:40:48.984Z] [LOG] ✅ All uploads complete for job 7. Keys: dev/users/w56kuucscxi1w740lalw7k/original/3pb9gh1ido4pu1hsysrep/360p.mp4, dev/users/w56kuucscxi1w740lalw7k/original/3pb9gh1ido4pu1hsysrep/480p.mp4, dev/users/w56kuucscxi1w740lalw7k/original/3pb9gh1ido4pu1hsysrep/720p.mp4, dev/users/w56kuucscxi1w740lalw7k/original/3pb9gh1ido4pu1hsysrep/1080p.mp4 | ||
| [2026-03-24T11:40:49.024Z] [LOG] Job 7 has completed successfully! | ||
| [2026-03-24T11:48:24.802Z] [LOG] Server is running on port 8080 | ||
| [2026-03-24T11:49:20.079Z] [LOG] 📽️ Processing job 8 for fileId nn57mm3xjs369lq4aeuzi | ||
| [2026-03-24T11:49:21.115Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/nn57mm3xjs369lq4aeuzi for job 8 | ||
| [2026-03-24T11:49:21.115Z] [LOG] ⏳ Initiating bulk FFmpeg transcodes for nn57mm3xjs369lq4aeuzi... | ||
| [2026-03-24T11:49:21.115Z] [LOG] ⏳ Starting transcode for 1080p (1920x1080)... | ||
| [2026-03-24T11:49:21.116Z] [LOG] ⏳ Starting transcode for 720p (1280x720)... | ||
| [2026-03-24T11:49:21.117Z] [LOG] ⏳ Starting transcode for 480p (854x480)... | ||
| [2026-03-24T11:49:21.117Z] [LOG] ⏳ Starting transcode for 360p (640x360)... | ||
| [2026-03-24T11:49:31.021Z] [LOG] ✅ Finished transcode for 360p | ||
| [2026-03-24T11:49:31.276Z] [LOG] ✅ Finished transcode for 480p | ||
| [2026-03-24T11:49:31.874Z] [LOG] ✅ Finished transcode for 720p | ||
| [2026-03-24T11:49:32.889Z] [LOG] ✅ Finished transcode for 1080p | ||
| [2026-03-24T11:49:32.889Z] [LOG] ✅ All transcoding finished for job 8. Outputs: /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/nn57mm3xjs369lq4aeuzi_360p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/nn57mm3xjs369lq4aeuzi_480p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/nn57mm3xjs369lq4aeuzi_720p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/nn57mm3xjs369lq4aeuzi_1080p.mp4 | ||
| [2026-03-24T11:49:32.889Z] [LOG] ☁️ Uploading transcoded files to S3 for nn57mm3xjs369lq4aeuzi... | ||
| [2026-03-24T11:49:33.177Z] [LOG] ☁️ Uploaded 360p to S3: dev/users/0psyy0j5hh1r2ybnxoyheb/original/nn57mm3xjs369lq4aeuzi/360p.mp4 | ||
| [2026-03-24T11:49:33.236Z] [LOG] ☁️ Uploaded 480p to S3: dev/users/0psyy0j5hh1r2ybnxoyheb/original/nn57mm3xjs369lq4aeuzi/480p.mp4 | ||
| [2026-03-24T11:49:33.253Z] [LOG] ☁️ Uploaded 720p to S3: dev/users/0psyy0j5hh1r2ybnxoyheb/original/nn57mm3xjs369lq4aeuzi/720p.mp4 | ||
| [2026-03-24T11:49:33.475Z] [LOG] ☁️ Uploaded 1080p to S3: dev/users/0psyy0j5hh1r2ybnxoyheb/original/nn57mm3xjs369lq4aeuzi/1080p.mp4 | ||
| [2026-03-24T11:49:33.475Z] [LOG] ✅ All transcoded files uploaded to S3 for fileId: nn57mm3xjs369lq4aeuzi | ||
| [2026-03-24T11:49:33.475Z] [LOG] ✅ All uploads complete for job 8. Keys: dev/users/0psyy0j5hh1r2ybnxoyheb/original/nn57mm3xjs369lq4aeuzi/360p.mp4, dev/users/0psyy0j5hh1r2ybnxoyheb/original/nn57mm3xjs369lq4aeuzi/480p.mp4, dev/users/0psyy0j5hh1r2ybnxoyheb/original/nn57mm3xjs369lq4aeuzi/720p.mp4, dev/users/0psyy0j5hh1r2ybnxoyheb/original/nn57mm3xjs369lq4aeuzi/1080p.mp4 | ||
| [2026-03-24T11:49:33.517Z] [LOG] Job 8 has completed successfully! | ||
| [2026-03-24T11:49:33.518Z] [LOG] 📽️ Processing job 9 for fileId s4jwrqaneokp1g6k4lntt9 | ||
| [2026-03-24T11:49:33.530Z] [LOG] Successfully cleaned up downloads directory | ||
| [2026-03-24T11:49:35.299Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/s4jwrqaneokp1g6k4lntt9 for job 9 | ||
| [2026-03-24T11:49:35.299Z] [LOG] ⏳ Initiating bulk FFmpeg transcodes for s4jwrqaneokp1g6k4lntt9... | ||
| [2026-03-24T11:49:35.299Z] [LOG] ⏳ Starting transcode for 1080p (1920x1080)... | ||
| [2026-03-24T11:49:35.299Z] [LOG] ⏳ Starting transcode for 720p (1280x720)... | ||
| [2026-03-24T11:49:35.300Z] [LOG] ⏳ Starting transcode for 480p (854x480)... | ||
| [2026-03-24T11:49:35.300Z] [LOG] ⏳ Starting transcode for 360p (640x360)... | ||
| [2026-03-24T11:49:42.649Z] [LOG] ✅ Finished transcode for 360p | ||
| [2026-03-24T11:49:43.121Z] [LOG] ✅ Finished transcode for 480p | ||
| [2026-03-24T11:49:43.781Z] [LOG] ✅ Finished transcode for 720p | ||
| [2026-03-24T11:49:44.782Z] [LOG] ✅ Finished transcode for 1080p | ||
| [2026-03-24T11:49:44.782Z] [LOG] ✅ All transcoding finished for job 9. Outputs: /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/s4jwrqaneokp1g6k4lntt9_360p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/s4jwrqaneokp1g6k4lntt9_480p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/s4jwrqaneokp1g6k4lntt9_720p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/s4jwrqaneokp1g6k4lntt9_1080p.mp4 | ||
| [2026-03-24T11:49:44.782Z] [LOG] ☁️ Uploading transcoded files to S3 for s4jwrqaneokp1g6k4lntt9... | ||
| [2026-03-24T11:49:45.068Z] [LOG] ☁️ Uploaded 360p to S3: dev/users/d7dghelm9zwgyeljm9o0o9/original/s4jwrqaneokp1g6k4lntt9/360p.mp4 | ||
| [2026-03-24T11:49:45.073Z] [LOG] ☁️ Uploaded 480p to S3: dev/users/d7dghelm9zwgyeljm9o0o9/original/s4jwrqaneokp1g6k4lntt9/480p.mp4 | ||
| [2026-03-24T11:49:45.153Z] [LOG] ☁️ Uploaded 720p to S3: dev/users/d7dghelm9zwgyeljm9o0o9/original/s4jwrqaneokp1g6k4lntt9/720p.mp4 | ||
| [2026-03-24T11:49:45.191Z] [LOG] ☁️ Uploaded 1080p to S3: dev/users/d7dghelm9zwgyeljm9o0o9/original/s4jwrqaneokp1g6k4lntt9/1080p.mp4 | ||
| [2026-03-24T11:49:45.191Z] [LOG] ✅ All transcoded files uploaded to S3 for fileId: s4jwrqaneokp1g6k4lntt9 | ||
| [2026-03-24T11:49:45.191Z] [LOG] ✅ All uploads complete for job 9. Keys: dev/users/d7dghelm9zwgyeljm9o0o9/original/s4jwrqaneokp1g6k4lntt9/360p.mp4, dev/users/d7dghelm9zwgyeljm9o0o9/original/s4jwrqaneokp1g6k4lntt9/480p.mp4, dev/users/d7dghelm9zwgyeljm9o0o9/original/s4jwrqaneokp1g6k4lntt9/720p.mp4, dev/users/d7dghelm9zwgyeljm9o0o9/original/s4jwrqaneokp1g6k4lntt9/1080p.mp4 | ||
| [2026-03-24T11:49:45.221Z] [LOG] Job 9 has completed successfully! | ||
| [2026-03-24T11:49:45.229Z] [LOG] Successfully cleaned up downloads directory | ||
| [2026-03-26T16:47:27.972Z] [LOG] Server is running on port 8080 | ||
| [2026-03-26T16:47:56.392Z] [LOG] 📽️ Processing job 10 for fileId gjlpffjg44s925cfbjzkva | ||
| [2026-03-26T16:48:44.260Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/gjlpffjg44s925cfbjzkva for job 10 | ||
| [2026-03-26T16:48:44.261Z] [LOG] ⏳ Initiating bulk FFmpeg transcodes for gjlpffjg44s925cfbjzkva... | ||
| [2026-03-26T16:48:44.262Z] [LOG] ⏳ Starting transcode for 1080p (1920x1080)... | ||
| [2026-03-26T16:48:44.264Z] [LOG] ⏳ Starting transcode for 720p (1280x720)... | ||
| [2026-03-26T16:48:44.264Z] [LOG] ⏳ Starting transcode for 480p (854x480)... | ||
| [2026-03-26T16:48:44.264Z] [LOG] ⏳ Starting transcode for 360p (640x360)... | ||
| [2026-03-26T16:48:53.754Z] [LOG] ✅ Finished transcode for 360p | ||
| [2026-03-26T16:48:53.757Z] [LOG] ✅ Finished transcode for 480p | ||
| [2026-03-26T16:48:54.798Z] [LOG] ✅ Finished transcode for 720p | ||
| [2026-03-26T16:48:55.916Z] [LOG] ✅ Finished transcode for 1080p | ||
| [2026-03-26T16:48:55.916Z] [LOG] ✅ All transcoding finished for job 10. Outputs: /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/gjlpffjg44s925cfbjzkva_360p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/gjlpffjg44s925cfbjzkva_480p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/gjlpffjg44s925cfbjzkva_720p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/gjlpffjg44s925cfbjzkva_1080p.mp4 | ||
| [2026-03-26T16:48:55.916Z] [LOG] ☁️ Uploading transcoded files to S3 for gjlpffjg44s925cfbjzkva... | ||
| [2026-03-26T16:48:56.923Z] [LOG] ☁️ Uploaded 360p to S3: dev/users/7eth647c4ztcj86vkwwqpl/original/gjlpffjg44s925cfbjzkva/360p.mp4 | ||
| [2026-03-26T16:48:57.473Z] [LOG] ☁️ Uploaded 480p to S3: dev/users/7eth647c4ztcj86vkwwqpl/original/gjlpffjg44s925cfbjzkva/480p.mp4 | ||
| [2026-03-26T16:48:57.581Z] [LOG] ☁️ Uploaded 720p to S3: dev/users/7eth647c4ztcj86vkwwqpl/original/gjlpffjg44s925cfbjzkva/720p.mp4 | ||
| [2026-03-26T16:48:58.565Z] [LOG] ☁️ Uploaded 1080p to S3: dev/users/7eth647c4ztcj86vkwwqpl/original/gjlpffjg44s925cfbjzkva/1080p.mp4 | ||
| [2026-03-26T16:48:58.565Z] [LOG] ✅ All transcoded files uploaded to S3 for fileId: gjlpffjg44s925cfbjzkva | ||
| [2026-03-26T16:48:58.565Z] [LOG] ✅ All uploads complete for job 10. Keys: dev/users/7eth647c4ztcj86vkwwqpl/original/gjlpffjg44s925cfbjzkva/360p.mp4, dev/users/7eth647c4ztcj86vkwwqpl/original/gjlpffjg44s925cfbjzkva/480p.mp4, dev/users/7eth647c4ztcj86vkwwqpl/original/gjlpffjg44s925cfbjzkva/720p.mp4, dev/users/7eth647c4ztcj86vkwwqpl/original/gjlpffjg44s925cfbjzkva/1080p.mp4 | ||
| [2026-03-26T16:48:58.623Z] [LOG] HLS job added for fileId gjlpffjg44s925cfbjzkva | ||
| [2026-03-26T16:48:58.863Z] [LOG] Job 10 has completed successfully! | ||
| [2026-03-26T16:48:58.880Z] [LOG] Successfully cleaned up downloads directory | ||
| [2026-03-26T18:01:09.146Z] [LOG] Server is running on port 8080 | ||
| [2026-03-26T18:02:16.151Z] [LOG] 📽️ Processing job 11 for fileId 65sbgktk187hir9k4k3xtq | ||
| [2026-03-26T18:02:18.247Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/65sbgktk187hir9k4k3xtq for transcode job 11 | ||
| [2026-03-26T18:02:18.247Z] [LOG] ⏳ Initiating bulk FFmpeg transcodes for 65sbgktk187hir9k4k3xtq... | ||
| [2026-03-26T18:02:18.247Z] [LOG] ⏳ Starting transcode for 1080p (1920x1080)... | ||
| [2026-03-26T18:02:18.249Z] [LOG] ⏳ Starting transcode for 720p (1280x720)... | ||
| [2026-03-26T18:02:18.249Z] [LOG] ⏳ Starting transcode for 480p (854x480)... | ||
| [2026-03-26T18:02:18.249Z] [LOG] ⏳ Starting transcode for 360p (640x360)... | ||
| [2026-03-26T18:02:29.169Z] [LOG] ✅ Finished transcode for 360p | ||
| [2026-03-26T18:02:29.235Z] [LOG] ✅ Finished transcode for 480p | ||
| [2026-03-26T18:02:30.306Z] [LOG] ✅ Finished transcode for 720p | ||
| [2026-03-26T18:02:31.340Z] [LOG] ✅ Finished transcode for 1080p | ||
| [2026-03-26T18:02:31.340Z] [LOG] ✅ All transcoding finished for job 11. Outputs: /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/65sbgktk187hir9k4k3xtq_360p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/65sbgktk187hir9k4k3xtq_480p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/65sbgktk187hir9k4k3xtq_720p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/65sbgktk187hir9k4k3xtq_1080p.mp4 | ||
| [2026-03-26T18:02:31.340Z] [LOG] ☁️ Uploading transcoded files to S3 for 65sbgktk187hir9k4k3xtq... | ||
| [2026-03-26T18:02:31.869Z] [LOG] ☁️ Uploaded 360p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/65sbgktk187hir9k4k3xtq/360p.mp4 | ||
| [2026-03-26T18:02:31.913Z] [LOG] ☁️ Uploaded 480p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/65sbgktk187hir9k4k3xtq/480p.mp4 | ||
| [2026-03-26T18:02:31.981Z] [LOG] ☁️ Uploaded 1080p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/65sbgktk187hir9k4k3xtq/1080p.mp4 | ||
| [2026-03-26T18:02:31.985Z] [LOG] ☁️ Uploaded 720p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/65sbgktk187hir9k4k3xtq/720p.mp4 | ||
| [2026-03-26T18:02:31.985Z] [LOG] ✅ All transcoded files uploaded to S3 for fileId: 65sbgktk187hir9k4k3xtq | ||
| [2026-03-26T18:02:31.985Z] [LOG] ✅ All uploads complete for job 11. Keys: dev/users/ze3ej8dp2v9j2bi43gm63/original/65sbgktk187hir9k4k3xtq/360p.mp4, dev/users/ze3ej8dp2v9j2bi43gm63/original/65sbgktk187hir9k4k3xtq/480p.mp4, dev/users/ze3ej8dp2v9j2bi43gm63/original/65sbgktk187hir9k4k3xtq/1080p.mp4, dev/users/ze3ej8dp2v9j2bi43gm63/original/65sbgktk187hir9k4k3xtq/720p.mp4 | ||
| [2026-03-26T18:02:32.036Z] [LOG] HLS job added for fileId 65sbgktk187hir9k4k3xtq | ||
| [2026-03-26T18:02:32.133Z] [LOG] Job 11 has completed successfully! | ||
| [2026-03-26T18:02:32.151Z] [LOG] Successfully cleaned up downloads directory | ||
| [2026-03-26T18:07:20.938Z] [LOG] Server is running on port 8080 | ||
| [2026-03-26T18:07:21.345Z] [LOG] 📽️ Processing HLS job 2 for fileId 65sbgktk187hir9k4k3xtq | ||
| [2026-03-26T18:07:21.694Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/65sbgktk187hir9k4k3xtq/480p.mp4 for hls job 2 | ||
| [2026-03-26T18:07:21.694Z] [LOG] ⏳ Initiating HLS segmenting for 65sbgktk187hir9k4k3xtq for 480p bitrate... | ||
| [2026-03-26T18:07:21.695Z] [LOG] ⏳ Starting HLS segmentation for 65sbgktk187hir9k4k3xtq [480p]... | ||
| [2026-03-26T18:07:21.719Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/65sbgktk187hir9k4k3xtq/720p.mp4 for hls job 2 | ||
| [2026-03-26T18:07:21.719Z] [LOG] ⏳ Initiating HLS segmenting for 65sbgktk187hir9k4k3xtq for 720p bitrate... | ||
| [2026-03-26T18:07:21.720Z] [LOG] ⏳ Starting HLS segmentation for 65sbgktk187hir9k4k3xtq [720p]... | ||
| [2026-03-26T18:07:21.723Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/65sbgktk187hir9k4k3xtq/360p.mp4 for hls job 2 | ||
| [2026-03-26T18:07:21.723Z] [LOG] ⏳ Initiating HLS segmenting for 65sbgktk187hir9k4k3xtq for 360p bitrate... | ||
| [2026-03-26T18:07:21.723Z] [LOG] ⏳ Starting HLS segmentation for 65sbgktk187hir9k4k3xtq [360p]... | ||
| [2026-03-26T18:07:21.833Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/65sbgktk187hir9k4k3xtq/1080p.mp4 for hls job 2 | ||
| [2026-03-26T18:07:21.833Z] [LOG] ⏳ Initiating HLS segmenting for 65sbgktk187hir9k4k3xtq for 1080p bitrate... | ||
| [2026-03-26T18:07:21.833Z] [LOG] ⏳ Starting HLS segmentation for 65sbgktk187hir9k4k3xtq [1080p]... | ||
| [2026-03-26T18:07:21.968Z] [LOG] 📊 HLS [480p] progress: 100% | ||
| [2026-03-26T18:07:21.969Z] [LOG] ✅ HLS segmentation complete for 65sbgktk187hir9k4k3xtq [360p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/65sbgktk187hir9k4k3xtq/360p/360p.m3u8 | ||
| [2026-03-26T18:07:21.969Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/65sbgktk187hir9k4k3xtq/360p/360p.m3u8 | ||
| [2026-03-26T18:07:21.969Z] [LOG] ☁️ Uploading segmented files to S3 for 65sbgktk187hir9k4k3xtq with 360p bitrate... | ||
| [2026-03-26T18:07:21.973Z] [LOG] ✅ HLS segmentation complete for 65sbgktk187hir9k4k3xtq [480p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/65sbgktk187hir9k4k3xtq/480p/480p.m3u8 | ||
| [2026-03-26T18:07:21.973Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/65sbgktk187hir9k4k3xtq/480p/480p.m3u8 | ||
| [2026-03-26T18:07:21.973Z] [LOG] ☁️ Uploading segmented files to S3 for 65sbgktk187hir9k4k3xtq with 480p bitrate... | ||
| [2026-03-26T18:07:21.974Z] [LOG] 📊 HLS [720p] progress: 100% | ||
| [2026-03-26T18:07:21.975Z] [LOG] ✅ HLS segmentation complete for 65sbgktk187hir9k4k3xtq [720p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/65sbgktk187hir9k4k3xtq/720p/720p.m3u8 | ||
| [2026-03-26T18:07:21.975Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/65sbgktk187hir9k4k3xtq/720p/720p.m3u8 | ||
| [2026-03-26T18:07:21.975Z] [LOG] ☁️ Uploading segmented files to S3 for 65sbgktk187hir9k4k3xtq with 720p bitrate... | ||
| [2026-03-26T18:07:21.989Z] [LOG] 📊 HLS [1080p] progress: 100% | ||
| [2026-03-26T18:07:21.990Z] [LOG] ✅ HLS segmentation complete for 65sbgktk187hir9k4k3xtq [1080p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/65sbgktk187hir9k4k3xtq/1080p/1080p.m3u8 | ||
| [2026-03-26T18:07:21.990Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/65sbgktk187hir9k4k3xtq/1080p/1080p.m3u8 | ||
| [2026-03-26T18:07:21.990Z] [LOG] ☁️ Uploading segmented files to S3 for 65sbgktk187hir9k4k3xtq with 1080p bitrate... | ||
| [2026-03-26T18:07:22.142Z] [LOG] ✅ HLS playlist uploaded successfully to S3 for 65sbgktk187hir9k4k3xtq with 720p bitrate | ||
| [2026-03-26T18:07:22.142Z] [LOG] ✅ All hls uploads complete for job 2. Keys: dev/users/ze3ej8dp2v9j2bi43gm63/65sbgktk187hir9k4k3xtq/720p/720p.m3u8 | ||
| [2026-03-26T18:07:22.144Z] [LOG] ✅ HLS playlist uploaded successfully to S3 for 65sbgktk187hir9k4k3xtq with 480p bitrate | ||
| [2026-03-26T18:07:22.144Z] [LOG] ✅ All hls uploads complete for job 2. Keys: dev/users/ze3ej8dp2v9j2bi43gm63/65sbgktk187hir9k4k3xtq/480p/480p.m3u8 | ||
| [2026-03-26T18:07:22.156Z] [LOG] ✅ HLS playlist uploaded successfully to S3 for 65sbgktk187hir9k4k3xtq with 1080p bitrate | ||
| [2026-03-26T18:07:22.156Z] [LOG] ✅ All hls uploads complete for job 2. Keys: dev/users/ze3ej8dp2v9j2bi43gm63/65sbgktk187hir9k4k3xtq/1080p/1080p.m3u8 | ||
| [2026-03-26T18:07:22.156Z] [LOG] ✅ HLS playlist uploaded successfully to S3 for 65sbgktk187hir9k4k3xtq with 360p bitrate | ||
| [2026-03-26T18:07:22.157Z] [LOG] ✅ All hls uploads complete for job 2. Keys: dev/users/ze3ej8dp2v9j2bi43gm63/65sbgktk187hir9k4k3xtq/360p/360p.m3u8 | ||
| [2026-03-26T18:07:22.248Z] [LOG] Successfully cleaned up hlsDownloads directory | ||
| [2026-03-26T18:10:06.306Z] [LOG] Server is running on port 8080 | ||
| [2026-03-26T18:10:55.341Z] [LOG] 📽️ Processing job 12 for fileId g6bn52zu2ralcgsqhpfy1 | ||
| [2026-03-26T18:10:56.721Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/g6bn52zu2ralcgsqhpfy1 for transcode job 12 | ||
| [2026-03-26T18:10:56.721Z] [LOG] ⏳ Initiating bulk FFmpeg transcodes for g6bn52zu2ralcgsqhpfy1... | ||
| [2026-03-26T18:10:56.721Z] [LOG] ⏳ Starting transcode for 1080p (1920x1080)... | ||
| [2026-03-26T18:10:56.724Z] [LOG] ⏳ Starting transcode for 720p (1280x720)... | ||
| [2026-03-26T18:10:56.724Z] [LOG] ⏳ Starting transcode for 480p (854x480)... | ||
| [2026-03-26T18:10:56.724Z] [LOG] ⏳ Starting transcode for 360p (640x360)... | ||
| [2026-03-26T18:11:06.368Z] [LOG] ✅ Finished transcode for 360p | ||
| [2026-03-26T18:11:06.577Z] [LOG] ✅ Finished transcode for 480p | ||
| [2026-03-26T18:11:07.162Z] [LOG] ✅ Finished transcode for 720p | ||
| [2026-03-26T18:11:08.179Z] [LOG] ✅ Finished transcode for 1080p | ||
| [2026-03-26T18:11:08.179Z] [LOG] ✅ All transcoding finished for job 12. Outputs: /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/g6bn52zu2ralcgsqhpfy1_360p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/g6bn52zu2ralcgsqhpfy1_480p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/g6bn52zu2ralcgsqhpfy1_720p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/g6bn52zu2ralcgsqhpfy1_1080p.mp4 | ||
| [2026-03-26T18:11:08.179Z] [LOG] ☁️ Uploading transcoded files to S3 for g6bn52zu2ralcgsqhpfy1... | ||
| [2026-03-26T18:11:08.535Z] [LOG] ☁️ Uploaded 360p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/g6bn52zu2ralcgsqhpfy1/360p.mp4 | ||
| [2026-03-26T18:11:08.575Z] [LOG] ☁️ Uploaded 720p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/g6bn52zu2ralcgsqhpfy1/720p.mp4 | ||
| [2026-03-26T18:11:08.605Z] [LOG] ☁️ Uploaded 480p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/g6bn52zu2ralcgsqhpfy1/480p.mp4 | ||
| [2026-03-26T18:11:08.695Z] [LOG] ☁️ Uploaded 1080p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/g6bn52zu2ralcgsqhpfy1/1080p.mp4 | ||
| [2026-03-26T18:11:08.695Z] [LOG] ✅ All transcoded files uploaded to S3 for fileId: g6bn52zu2ralcgsqhpfy1 | ||
| [2026-03-26T18:11:08.695Z] [LOG] ✅ All uploads complete for job 12. Keys: dev/users/ze3ej8dp2v9j2bi43gm63/original/g6bn52zu2ralcgsqhpfy1/360p.mp4, dev/users/ze3ej8dp2v9j2bi43gm63/original/g6bn52zu2ralcgsqhpfy1/720p.mp4, dev/users/ze3ej8dp2v9j2bi43gm63/original/g6bn52zu2ralcgsqhpfy1/480p.mp4, dev/users/ze3ej8dp2v9j2bi43gm63/original/g6bn52zu2ralcgsqhpfy1/1080p.mp4 | ||
| [2026-03-26T18:11:08.741Z] [LOG] HLS job added for fileId g6bn52zu2ralcgsqhpfy1 | ||
| [2026-03-26T18:11:08.784Z] [LOG] 📽️ Processing HLS job 3 for fileId g6bn52zu2ralcgsqhpfy1 | ||
| [2026-03-26T18:11:08.835Z] [LOG] Job 12 has completed successfully! | ||
| [2026-03-26T18:11:08.844Z] [LOG] Successfully cleaned up downloads directory | ||
| [2026-03-26T18:11:09.071Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/g6bn52zu2ralcgsqhpfy1/480p.mp4 for hls job 3 | ||
| [2026-03-26T18:11:09.071Z] [LOG] ⏳ Initiating HLS segmenting for g6bn52zu2ralcgsqhpfy1 for 480p bitrate... | ||
| [2026-03-26T18:11:09.072Z] [LOG] ⏳ Starting HLS segmentation for g6bn52zu2ralcgsqhpfy1 [480p]... | ||
| [2026-03-26T18:11:09.147Z] [LOG] 📊 HLS [480p] progress: 100% | ||
| [2026-03-26T18:11:09.148Z] [LOG] ✅ HLS segmentation complete for g6bn52zu2ralcgsqhpfy1 [480p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/g6bn52zu2ralcgsqhpfy1/480p/480p.m3u8 | ||
| [2026-03-26T18:11:09.148Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/g6bn52zu2ralcgsqhpfy1/480p/480p.m3u8 | ||
| [2026-03-26T18:11:09.207Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/g6bn52zu2ralcgsqhpfy1/360p.mp4 for hls job 3 | ||
| [2026-03-26T18:11:09.207Z] [LOG] ⏳ Initiating HLS segmenting for g6bn52zu2ralcgsqhpfy1 for 360p bitrate... | ||
| [2026-03-26T18:11:09.207Z] [LOG] ⏳ Starting HLS segmentation for g6bn52zu2ralcgsqhpfy1 [360p]... | ||
| [2026-03-26T18:11:09.250Z] [LOG] 📊 HLS [360p] progress: 100% | ||
| [2026-03-26T18:11:09.251Z] [LOG] ✅ HLS segmentation complete for g6bn52zu2ralcgsqhpfy1 [360p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/g6bn52zu2ralcgsqhpfy1/360p/360p.m3u8 | ||
| [2026-03-26T18:11:09.251Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/g6bn52zu2ralcgsqhpfy1/360p/360p.m3u8 | ||
| [2026-03-26T18:11:09.514Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/g6bn52zu2ralcgsqhpfy1/720p.mp4 for hls job 3 | ||
| [2026-03-26T18:11:09.514Z] [LOG] ⏳ Initiating HLS segmenting for g6bn52zu2ralcgsqhpfy1 for 720p bitrate... | ||
| [2026-03-26T18:11:09.514Z] [LOG] ⏳ Starting HLS segmentation for g6bn52zu2ralcgsqhpfy1 [720p]... | ||
| [2026-03-26T18:11:09.560Z] [LOG] 📊 HLS [720p] progress: 100% | ||
| [2026-03-26T18:11:09.561Z] [LOG] ✅ HLS segmentation complete for g6bn52zu2ralcgsqhpfy1 [720p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/g6bn52zu2ralcgsqhpfy1/720p/720p.m3u8 | ||
| [2026-03-26T18:11:09.561Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/g6bn52zu2ralcgsqhpfy1/720p/720p.m3u8 | ||
| [2026-03-26T18:11:09.861Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/g6bn52zu2ralcgsqhpfy1/1080p.mp4 for hls job 3 | ||
| [2026-03-26T18:11:09.861Z] [LOG] ⏳ Initiating HLS segmenting for g6bn52zu2ralcgsqhpfy1 for 1080p bitrate... | ||
| [2026-03-26T18:11:09.861Z] [LOG] ⏳ Starting HLS segmentation for g6bn52zu2ralcgsqhpfy1 [1080p]... | ||
| [2026-03-26T18:11:09.908Z] [LOG] 📊 HLS [1080p] progress: 100% | ||
| [2026-03-26T18:11:09.908Z] [LOG] ✅ HLS segmentation complete for g6bn52zu2ralcgsqhpfy1 [1080p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/g6bn52zu2ralcgsqhpfy1/1080p/1080p.m3u8 | ||
| [2026-03-26T18:11:09.908Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/g6bn52zu2ralcgsqhpfy1/1080p/1080p.m3u8 | ||
| [2026-03-26T18:26:48.061Z] [LOG] Server is running on port 8080 | ||
| [2026-03-26T18:27:08.901Z] [LOG] 📽️ Processing job 13 for fileId 7fj07hrkf3csvxqn1iham | ||
| [2026-03-26T18:27:10.743Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/7fj07hrkf3csvxqn1iham for transcode job 13 | ||
| [2026-03-26T18:27:10.743Z] [LOG] ⏳ Initiating bulk FFmpeg transcodes for 7fj07hrkf3csvxqn1iham... | ||
| [2026-03-26T18:27:10.743Z] [LOG] ⏳ Starting transcode for 1080p (1920x1080)... | ||
| [2026-03-26T18:27:10.745Z] [LOG] ⏳ Starting transcode for 720p (1280x720)... | ||
| [2026-03-26T18:27:10.745Z] [LOG] ⏳ Starting transcode for 480p (854x480)... | ||
| [2026-03-26T18:27:10.745Z] [LOG] ⏳ Starting transcode for 360p (640x360)... | ||
| [2026-03-26T18:27:20.647Z] [LOG] ✅ Finished transcode for 360p | ||
| [2026-03-26T18:27:21.057Z] [LOG] ✅ Finished transcode for 480p | ||
| [2026-03-26T18:27:21.702Z] [LOG] ✅ Finished transcode for 720p | ||
| [2026-03-26T18:27:22.775Z] [LOG] ✅ Finished transcode for 1080p | ||
| [2026-03-26T18:27:22.775Z] [LOG] ✅ All transcoding finished for job 13. Outputs: /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/7fj07hrkf3csvxqn1iham_360p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/7fj07hrkf3csvxqn1iham_480p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/7fj07hrkf3csvxqn1iham_720p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/7fj07hrkf3csvxqn1iham_1080p.mp4 | ||
| [2026-03-26T18:27:22.775Z] [LOG] ☁️ Uploading transcoded files to S3 for 7fj07hrkf3csvxqn1iham... | ||
| [2026-03-26T18:27:23.049Z] [LOG] ☁️ Uploaded 360p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/7fj07hrkf3csvxqn1iham/360p.mp4 | ||
| [2026-03-26T18:27:23.050Z] [LOG] ☁️ Uploaded 480p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/7fj07hrkf3csvxqn1iham/480p.mp4 | ||
| [2026-03-26T18:27:23.183Z] [LOG] ☁️ Uploaded 720p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/7fj07hrkf3csvxqn1iham/720p.mp4 | ||
| [2026-03-26T18:27:23.197Z] [LOG] ☁️ Uploaded 1080p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/7fj07hrkf3csvxqn1iham/1080p.mp4 | ||
| [2026-03-26T18:27:23.197Z] [LOG] ✅ All transcoded files uploaded to S3 for fileId: 7fj07hrkf3csvxqn1iham | ||
| [2026-03-26T18:27:23.197Z] [LOG] ✅ All uploads complete for job 13. Keys: dev/users/ze3ej8dp2v9j2bi43gm63/original/7fj07hrkf3csvxqn1iham/360p.mp4, dev/users/ze3ej8dp2v9j2bi43gm63/original/7fj07hrkf3csvxqn1iham/480p.mp4, dev/users/ze3ej8dp2v9j2bi43gm63/original/7fj07hrkf3csvxqn1iham/720p.mp4, dev/users/ze3ej8dp2v9j2bi43gm63/original/7fj07hrkf3csvxqn1iham/1080p.mp4 | ||
| [2026-03-26T18:27:23.316Z] [LOG] HLS job added for fileId 7fj07hrkf3csvxqn1iham | ||
| [2026-03-26T18:27:23.357Z] [LOG] 📽️ Processing HLS job 4 for fileId 7fj07hrkf3csvxqn1iham | ||
| [2026-03-26T18:27:23.395Z] [LOG] Job 13 has completed successfully! | ||
| [2026-03-26T18:27:23.401Z] [LOG] Successfully cleaned up downloads directory | ||
| [2026-03-26T18:27:23.631Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/480p.mp4 for hls job 4 | ||
| [2026-03-26T18:27:23.631Z] [LOG] ⏳ Initiating HLS segmenting for 7fj07hrkf3csvxqn1iham for 480p bitrate... | ||
| [2026-03-26T18:27:23.632Z] [LOG] ⏳ Starting HLS segmentation for 7fj07hrkf3csvxqn1iham [480p]... | ||
| [2026-03-26T18:27:23.669Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/360p.mp4 for hls job 4 | ||
| [2026-03-26T18:27:23.669Z] [LOG] ⏳ Initiating HLS segmenting for 7fj07hrkf3csvxqn1iham for 360p bitrate... | ||
| [2026-03-26T18:27:23.670Z] [LOG] ⏳ Starting HLS segmentation for 7fj07hrkf3csvxqn1iham [360p]... | ||
| [2026-03-26T18:27:23.694Z] [LOG] 📊 HLS [480p] progress: 100% | ||
| [2026-03-26T18:27:23.694Z] [LOG] ✅ HLS segmentation complete for 7fj07hrkf3csvxqn1iham [480p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/480p/480p.m3u8 | ||
| [2026-03-26T18:27:23.694Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/480p/480p.m3u8 | ||
| [2026-03-26T18:27:23.695Z] [LOG] ☁️ Uploading segmented files to S3 for 7fj07hrkf3csvxqn1iham with 480p bitrate... | ||
| [2026-03-26T18:27:23.696Z] [ERROR] UNCAUGHT EXCEPTION: ENOENT: no such file or directory, open '/Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/480p/480p.m3u8' | ||
| Error: ENOENT: no such file or directory, open '/Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/480p/480p.m3u8' | ||
| [2026-03-26T18:27:23.712Z] [LOG] 📊 HLS [360p] progress: 100% | ||
| [2026-03-26T18:27:23.712Z] [LOG] ✅ HLS segmentation complete for 7fj07hrkf3csvxqn1iham [360p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/360p/360p.m3u8 | ||
| [2026-03-26T18:27:23.712Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/360p/360p.m3u8 | ||
| [2026-03-26T18:27:23.712Z] [LOG] ☁️ Uploading segmented files to S3 for 7fj07hrkf3csvxqn1iham with 360p bitrate... | ||
| [2026-03-26T18:27:23.712Z] [ERROR] UNCAUGHT EXCEPTION: ENOENT: no such file or directory, open '/Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/360p/360p.m3u8' | ||
| Error: ENOENT: no such file or directory, open '/Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/360p/360p.m3u8' | ||
| [2026-03-26T18:27:23.722Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/1080p.mp4 for hls job 4 | ||
| [2026-03-26T18:27:23.722Z] [LOG] ⏳ Initiating HLS segmenting for 7fj07hrkf3csvxqn1iham for 1080p bitrate... | ||
| [2026-03-26T18:27:23.722Z] [LOG] ⏳ Starting HLS segmentation for 7fj07hrkf3csvxqn1iham [1080p]... | ||
| [2026-03-26T18:27:23.723Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/720p.mp4 for hls job 4 | ||
| [2026-03-26T18:27:23.723Z] [LOG] ⏳ Initiating HLS segmenting for 7fj07hrkf3csvxqn1iham for 720p bitrate... | ||
| [2026-03-26T18:27:23.723Z] [LOG] ⏳ Starting HLS segmentation for 7fj07hrkf3csvxqn1iham [720p]... | ||
| [2026-03-26T18:27:23.730Z] [LOG] Job 4 has failed with error: Function not implemented. | ||
| [2026-03-26T18:27:23.770Z] [LOG] 📊 HLS [720p] progress: 100% | ||
| [2026-03-26T18:27:23.771Z] [LOG] ✅ HLS segmentation complete for 7fj07hrkf3csvxqn1iham [720p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/720p/720p.m3u8 | ||
| [2026-03-26T18:27:23.771Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/720p/720p.m3u8 | ||
| [2026-03-26T18:27:23.771Z] [LOG] ☁️ Uploading segmented files to S3 for 7fj07hrkf3csvxqn1iham with 720p bitrate... | ||
| [2026-03-26T18:27:23.771Z] [ERROR] UNCAUGHT EXCEPTION: ENOENT: no such file or directory, open '/Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/720p/720p.m3u8' | ||
| Error: ENOENT: no such file or directory, open '/Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/720p/720p.m3u8' | ||
| [2026-03-26T18:27:23.772Z] [LOG] 📊 HLS [1080p] progress: 100% | ||
| [2026-03-26T18:27:23.773Z] [LOG] ✅ HLS segmentation complete for 7fj07hrkf3csvxqn1iham [1080p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/1080p/1080p.m3u8 | ||
| [2026-03-26T18:27:23.773Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/1080p/1080p.m3u8 | ||
| [2026-03-26T18:27:23.773Z] [LOG] ☁️ Uploading segmented files to S3 for 7fj07hrkf3csvxqn1iham with 1080p bitrate... | ||
| [2026-03-26T18:27:23.773Z] [ERROR] UNCAUGHT EXCEPTION: ENOENT: no such file or directory, open '/Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/1080p/1080p.m3u8' | ||
| Error: ENOENT: no such file or directory, open '/Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/7fj07hrkf3csvxqn1iham/1080p/1080p.m3u8' | ||
| [2026-03-26T18:30:55.922Z] [LOG] Server is running on port 8080 | ||
| [2026-03-26T18:31:40.104Z] [LOG] 📽️ Processing job 14 for fileId 47a76ddw00p27bcieb6lpj | ||
| [2026-03-26T18:31:42.695Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/47a76ddw00p27bcieb6lpj for transcode job 14 | ||
| [2026-03-26T18:31:42.695Z] [LOG] ⏳ Initiating bulk FFmpeg transcodes for 47a76ddw00p27bcieb6lpj... | ||
| [2026-03-26T18:31:42.695Z] [LOG] ⏳ Starting transcode for 1080p (1920x1080)... | ||
| [2026-03-26T18:31:42.697Z] [LOG] ⏳ Starting transcode for 720p (1280x720)... | ||
| [2026-03-26T18:31:42.697Z] [LOG] ⏳ Starting transcode for 480p (854x480)... | ||
| [2026-03-26T18:31:42.697Z] [LOG] ⏳ Starting transcode for 360p (640x360)... | ||
| [2026-03-26T18:31:51.199Z] [LOG] ✅ Finished transcode for 360p | ||
| [2026-03-26T18:31:51.382Z] [LOG] ✅ Finished transcode for 480p | ||
| [2026-03-26T18:31:52.215Z] [LOG] ✅ Finished transcode for 720p | ||
| [2026-03-26T18:31:53.122Z] [LOG] ✅ Finished transcode for 1080p | ||
| [2026-03-26T18:31:53.122Z] [LOG] ✅ All transcoding finished for job 14. Outputs: /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/47a76ddw00p27bcieb6lpj_360p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/47a76ddw00p27bcieb6lpj_480p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/47a76ddw00p27bcieb6lpj_720p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/47a76ddw00p27bcieb6lpj_1080p.mp4 | ||
| [2026-03-26T18:31:53.122Z] [LOG] ☁️ Uploading transcoded files to S3 for 47a76ddw00p27bcieb6lpj... | ||
| [2026-03-26T18:31:53.431Z] [LOG] ☁️ Uploaded 480p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/47a76ddw00p27bcieb6lpj/480p.mp4 | ||
| [2026-03-26T18:31:53.432Z] [LOG] ☁️ Uploaded 360p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/47a76ddw00p27bcieb6lpj/360p.mp4 | ||
| [2026-03-26T18:31:53.578Z] [LOG] ☁️ Uploaded 720p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/47a76ddw00p27bcieb6lpj/720p.mp4 | ||
| [2026-03-26T18:31:53.663Z] [LOG] ☁️ Uploaded 1080p to S3: dev/users/ze3ej8dp2v9j2bi43gm63/original/47a76ddw00p27bcieb6lpj/1080p.mp4 | ||
| [2026-03-26T18:31:53.664Z] [LOG] ✅ All transcoded files uploaded to S3 for fileId: 47a76ddw00p27bcieb6lpj | ||
| [2026-03-26T18:31:53.664Z] [LOG] ✅ All uploads complete for job 14. Keys: dev/users/ze3ej8dp2v9j2bi43gm63/original/47a76ddw00p27bcieb6lpj/480p.mp4, dev/users/ze3ej8dp2v9j2bi43gm63/original/47a76ddw00p27bcieb6lpj/360p.mp4, dev/users/ze3ej8dp2v9j2bi43gm63/original/47a76ddw00p27bcieb6lpj/720p.mp4, dev/users/ze3ej8dp2v9j2bi43gm63/original/47a76ddw00p27bcieb6lpj/1080p.mp4 | ||
| [2026-03-26T18:31:53.699Z] [LOG] HLS job added for fileId 47a76ddw00p27bcieb6lpj | ||
| [2026-03-26T18:31:53.787Z] [LOG] Job 14 has completed successfully! | ||
| [2026-03-26T18:31:53.789Z] [LOG] 📽️ Processing HLS job 5 for fileId 47a76ddw00p27bcieb6lpj | ||
| [2026-03-26T18:31:53.810Z] [LOG] Successfully cleaned up downloads directory | ||
| [2026-03-26T18:31:54.202Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/47a76ddw00p27bcieb6lpj/480p.mp4 for hls job 5 | ||
| [2026-03-26T18:31:54.202Z] [LOG] ⏳ Initiating HLS segmenting for 47a76ddw00p27bcieb6lpj for 480p bitrate... | ||
| [2026-03-26T18:31:54.203Z] [LOG] ⏳ Starting HLS segmentation for 47a76ddw00p27bcieb6lpj [480p]... | ||
| [2026-03-26T18:31:54.279Z] [LOG] 📊 HLS [480p] progress: 100% | ||
| [2026-03-26T18:31:54.280Z] [LOG] ✅ HLS segmentation complete for 47a76ddw00p27bcieb6lpj [480p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/47a76ddw00p27bcieb6lpj/480p/480p.m3u8 | ||
| [2026-03-26T18:31:54.280Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/47a76ddw00p27bcieb6lpj/480p/480p.m3u8 | ||
| [2026-03-26T18:31:54.280Z] [LOG] ☁️ Uploading segmented files to S3 for 47a76ddw00p27bcieb6lpj with 480p bitrate... | ||
| [2026-03-26T18:31:54.325Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/47a76ddw00p27bcieb6lpj/360p.mp4 for hls job 5 | ||
| [2026-03-26T18:31:54.325Z] [LOG] ⏳ Initiating HLS segmenting for 47a76ddw00p27bcieb6lpj for 360p bitrate... | ||
| [2026-03-26T18:31:54.326Z] [LOG] ⏳ Starting HLS segmentation for 47a76ddw00p27bcieb6lpj [360p]... | ||
| [2026-03-26T18:31:54.368Z] [LOG] 📊 HLS [360p] progress: 100% | ||
| [2026-03-26T18:31:54.369Z] [LOG] ✅ HLS segmentation complete for 47a76ddw00p27bcieb6lpj [360p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/47a76ddw00p27bcieb6lpj/360p/360p.m3u8 | ||
| [2026-03-26T18:31:54.369Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/47a76ddw00p27bcieb6lpj/360p/360p.m3u8 | ||
| [2026-03-26T18:31:54.369Z] [LOG] ☁️ Uploading segmented files to S3 for 47a76ddw00p27bcieb6lpj with 360p bitrate... | ||
| [2026-03-26T18:31:54.567Z] [LOG] ☁️ Uploaded 480p.m3u8 to S3: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/480p/480p.m3u8 | ||
| [2026-03-26T18:31:54.597Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/480p/segment_001.ts | ||
| [2026-03-26T18:31:54.647Z] [LOG] ☁️ Uploaded 360p.m3u8 to S3: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/360p/360p.m3u8 | ||
| [2026-03-26T18:31:54.656Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/360p/segment_001.ts | ||
| [2026-03-26T18:31:54.666Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/47a76ddw00p27bcieb6lpj/720p.mp4 for hls job 5 | ||
| [2026-03-26T18:31:54.666Z] [LOG] ⏳ Initiating HLS segmenting for 47a76ddw00p27bcieb6lpj for 720p bitrate... | ||
| [2026-03-26T18:31:54.666Z] [LOG] ⏳ Starting HLS segmentation for 47a76ddw00p27bcieb6lpj [720p]... | ||
| [2026-03-26T18:31:54.673Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/480p/segment_000.ts | ||
| [2026-03-26T18:31:54.673Z] [LOG] ✅ All HLS files uploaded to S3 for 47a76ddw00p27bcieb6lpj [480p] | ||
| [2026-03-26T18:31:54.673Z] [LOG] ✅ All hls uploads complete for job 5. Keys: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/480p/480p.m3u8,dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/480p/segment_001.ts,dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/480p/segment_000.ts | ||
| [2026-03-26T18:31:54.726Z] [LOG] 📊 HLS [720p] progress: 100% | ||
| [2026-03-26T18:31:54.727Z] [LOG] ✅ HLS segmentation complete for 47a76ddw00p27bcieb6lpj [720p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/47a76ddw00p27bcieb6lpj/720p/720p.m3u8 | ||
| [2026-03-26T18:31:54.727Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/47a76ddw00p27bcieb6lpj/720p/720p.m3u8 | ||
| [2026-03-26T18:31:54.727Z] [LOG] ☁️ Uploading segmented files to S3 for 47a76ddw00p27bcieb6lpj with 720p bitrate... | ||
| [2026-03-26T18:31:54.745Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/360p/segment_000.ts | ||
| [2026-03-26T18:31:54.745Z] [LOG] ✅ All HLS files uploaded to S3 for 47a76ddw00p27bcieb6lpj [360p] | ||
| [2026-03-26T18:31:54.745Z] [LOG] ✅ All hls uploads complete for job 5. Keys: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/360p/360p.m3u8,dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/360p/segment_001.ts,dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/360p/segment_000.ts | ||
| [2026-03-26T18:31:54.840Z] [LOG] ☁️ Uploaded 720p.m3u8 to S3: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/720p/720p.m3u8 | ||
| [2026-03-26T18:31:54.882Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/720p/segment_001.ts | ||
| [2026-03-26T18:31:55.075Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/47a76ddw00p27bcieb6lpj/1080p.mp4 for hls job 5 | ||
| [2026-03-26T18:31:55.075Z] [LOG] ⏳ Initiating HLS segmenting for 47a76ddw00p27bcieb6lpj for 1080p bitrate... | ||
| [2026-03-26T18:31:55.075Z] [LOG] ⏳ Starting HLS segmentation for 47a76ddw00p27bcieb6lpj [1080p]... | ||
| [2026-03-26T18:31:55.086Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/720p/segment_000.ts | ||
| [2026-03-26T18:31:55.087Z] [LOG] ✅ All HLS files uploaded to S3 for 47a76ddw00p27bcieb6lpj [720p] | ||
| [2026-03-26T18:31:55.087Z] [LOG] ✅ All hls uploads complete for job 5. Keys: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/720p/720p.m3u8,dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/720p/segment_001.ts,dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/720p/segment_000.ts | ||
| [2026-03-26T18:31:55.131Z] [LOG] 📊 HLS [1080p] progress: 100% | ||
| [2026-03-26T18:31:55.132Z] [LOG] ✅ HLS segmentation complete for 47a76ddw00p27bcieb6lpj [1080p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/47a76ddw00p27bcieb6lpj/1080p/1080p.m3u8 | ||
| [2026-03-26T18:31:55.132Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/47a76ddw00p27bcieb6lpj/1080p/1080p.m3u8 | ||
| [2026-03-26T18:31:55.132Z] [LOG] ☁️ Uploading segmented files to S3 for 47a76ddw00p27bcieb6lpj with 1080p bitrate... | ||
| [2026-03-26T18:31:55.218Z] [LOG] ☁️ Uploaded 1080p.m3u8 to S3: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/1080p/1080p.m3u8 | ||
| [2026-03-26T18:31:55.341Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/1080p/segment_000.ts | ||
| [2026-03-26T18:31:55.601Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/1080p/segment_001.ts | ||
| [2026-03-26T18:31:55.601Z] [LOG] ✅ All HLS files uploaded to S3 for 47a76ddw00p27bcieb6lpj [1080p] | ||
| [2026-03-26T18:31:55.601Z] [LOG] ✅ All hls uploads complete for job 5. Keys: dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/1080p/1080p.m3u8,dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/1080p/segment_000.ts,dev/users/ze3ej8dp2v9j2bi43gm63/47a76ddw00p27bcieb6lpj/1080p/segment_001.ts | ||
| [2026-03-26T18:31:55.641Z] [LOG] Successfully cleaned up hlsDownloads directory | ||
| [2026-03-29T14:41:48.831Z] [LOG] Server is running on port 8080 | ||
| [2026-03-29T14:44:16.549Z] [LOG] 📽️ Processing job 1 for fileId xcolv0ia3bezijeod8nhcj | ||
| [2026-03-29T14:44:40.469Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/xcolv0ia3bezijeod8nhcj for transcode job 1 | ||
| [2026-03-29T14:44:40.469Z] [LOG] ⏳ Initiating bulk FFmpeg transcodes for xcolv0ia3bezijeod8nhcj... | ||
| [2026-03-29T14:44:40.469Z] [LOG] ⏳ Starting transcode for 1080p (1920x1080)... | ||
| [2026-03-29T14:44:40.471Z] [LOG] ⏳ Starting transcode for 720p (1280x720)... | ||
| [2026-03-29T14:44:40.472Z] [LOG] ⏳ Starting transcode for 480p (854x480)... | ||
| [2026-03-29T14:44:40.473Z] [LOG] ⏳ Starting transcode for 360p (640x360)... | ||
| [2026-03-29T14:44:52.263Z] [LOG] ✅ Finished transcode for 360p | ||
| [2026-03-29T14:44:52.607Z] [LOG] ✅ Finished transcode for 480p | ||
| [2026-03-29T14:44:53.191Z] [LOG] ✅ Finished transcode for 720p | ||
| [2026-03-29T14:44:54.438Z] [LOG] ✅ Finished transcode for 1080p | ||
| [2026-03-29T14:44:54.438Z] [LOG] ✅ All transcoding finished for job 1. Outputs: /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/xcolv0ia3bezijeod8nhcj_360p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/xcolv0ia3bezijeod8nhcj_480p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/xcolv0ia3bezijeod8nhcj_720p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/xcolv0ia3bezijeod8nhcj_1080p.mp4 | ||
| [2026-03-29T14:44:54.438Z] [LOG] ☁️ Uploading transcoded files to S3 for xcolv0ia3bezijeod8nhcj... | ||
| [2026-03-29T14:44:54.936Z] [LOG] ☁️ Uploaded 360p to S3: dev/users/y3ki145rneqxikqntm95in/original/xcolv0ia3bezijeod8nhcj/360p.mp4 | ||
| [2026-03-29T14:44:55.123Z] [LOG] ☁️ Uploaded 720p to S3: dev/users/y3ki145rneqxikqntm95in/original/xcolv0ia3bezijeod8nhcj/720p.mp4 | ||
| [2026-03-29T14:44:55.477Z] [LOG] ☁️ Uploaded 480p to S3: dev/users/y3ki145rneqxikqntm95in/original/xcolv0ia3bezijeod8nhcj/480p.mp4 | ||
| [2026-03-29T14:44:56.301Z] [LOG] ☁️ Uploaded 1080p to S3: dev/users/y3ki145rneqxikqntm95in/original/xcolv0ia3bezijeod8nhcj/1080p.mp4 | ||
| [2026-03-29T14:44:56.301Z] [LOG] ✅ All transcoded files uploaded to S3 for fileId: xcolv0ia3bezijeod8nhcj | ||
| [2026-03-29T14:44:56.301Z] [LOG] ✅ All uploads complete for job 1. Keys: dev/users/y3ki145rneqxikqntm95in/original/xcolv0ia3bezijeod8nhcj/360p.mp4, dev/users/y3ki145rneqxikqntm95in/original/xcolv0ia3bezijeod8nhcj/720p.mp4, dev/users/y3ki145rneqxikqntm95in/original/xcolv0ia3bezijeod8nhcj/480p.mp4, dev/users/y3ki145rneqxikqntm95in/original/xcolv0ia3bezijeod8nhcj/1080p.mp4 | ||
| [2026-03-29T14:44:56.358Z] [LOG] HLS job added for fileId xcolv0ia3bezijeod8nhcj | ||
| [2026-03-29T14:44:56.415Z] [LOG] 📽️ Processing HLS job 1 for fileId xcolv0ia3bezijeod8nhcj | ||
| [2026-03-29T14:44:56.448Z] [LOG] Job 1 has completed successfully! | ||
| [2026-03-29T14:44:56.457Z] [LOG] Successfully cleaned up downloads directory | ||
| [2026-03-29T14:44:56.789Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/xcolv0ia3bezijeod8nhcj/360p.mp4 for hls job 1 | ||
| [2026-03-29T14:44:56.789Z] [LOG] ⏳ Initiating HLS segmenting for xcolv0ia3bezijeod8nhcj for 360p bitrate... | ||
| [2026-03-29T14:44:56.789Z] [LOG] ⏳ Starting HLS segmentation for xcolv0ia3bezijeod8nhcj [360p]... | ||
| [2026-03-29T14:44:56.820Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/xcolv0ia3bezijeod8nhcj/480p.mp4 for hls job 1 | ||
| [2026-03-29T14:44:56.820Z] [LOG] ⏳ Initiating HLS segmenting for xcolv0ia3bezijeod8nhcj for 480p bitrate... | ||
| [2026-03-29T14:44:56.820Z] [LOG] ⏳ Starting HLS segmentation for xcolv0ia3bezijeod8nhcj [480p]... | ||
| [2026-03-29T14:44:56.839Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/xcolv0ia3bezijeod8nhcj/720p.mp4 for hls job 1 | ||
| [2026-03-29T14:44:56.839Z] [LOG] ⏳ Initiating HLS segmenting for xcolv0ia3bezijeod8nhcj for 720p bitrate... | ||
| [2026-03-29T14:44:56.839Z] [LOG] ⏳ Starting HLS segmentation for xcolv0ia3bezijeod8nhcj [720p]... | ||
| [2026-03-29T14:44:56.850Z] [LOG] ✅ HLS segmentation complete for xcolv0ia3bezijeod8nhcj [360p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/xcolv0ia3bezijeod8nhcj/360p/360p.m3u8 | ||
| [2026-03-29T14:44:56.850Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/xcolv0ia3bezijeod8nhcj/360p/360p.m3u8 | ||
| [2026-03-29T14:44:56.850Z] [LOG] ☁️ Uploading segmented files to S3 for xcolv0ia3bezijeod8nhcj with 360p bitrate... | ||
| [2026-03-29T14:44:56.877Z] [LOG] 📊 HLS [480p] progress: 100% | ||
| [2026-03-29T14:44:56.878Z] [LOG] ✅ HLS segmentation complete for xcolv0ia3bezijeod8nhcj [480p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/xcolv0ia3bezijeod8nhcj/480p/480p.m3u8 | ||
| [2026-03-29T14:44:56.878Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/xcolv0ia3bezijeod8nhcj/480p/480p.m3u8 | ||
| [2026-03-29T14:44:56.878Z] [LOG] ☁️ Uploading segmented files to S3 for xcolv0ia3bezijeod8nhcj with 480p bitrate... | ||
| [2026-03-29T14:44:56.889Z] [LOG] 📊 HLS [720p] progress: 100% | ||
| [2026-03-29T14:44:56.889Z] [LOG] ✅ HLS segmentation complete for xcolv0ia3bezijeod8nhcj [720p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/xcolv0ia3bezijeod8nhcj/720p/720p.m3u8 | ||
| [2026-03-29T14:44:56.889Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/xcolv0ia3bezijeod8nhcj/720p/720p.m3u8 | ||
| [2026-03-29T14:44:56.889Z] [LOG] ☁️ Uploading segmented files to S3 for xcolv0ia3bezijeod8nhcj with 720p bitrate... | ||
| [2026-03-29T14:44:57.146Z] [LOG] ☁️ Uploaded 480p.m3u8 to S3: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/480p/480p.m3u8 | ||
| [2026-03-29T14:44:57.150Z] [LOG] ☁️ Uploaded 360p.m3u8 to S3: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/360p/360p.m3u8 | ||
| [2026-03-29T14:44:57.197Z] [LOG] ☁️ Uploaded 720p.m3u8 to S3: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/720p/720p.m3u8 | ||
| [2026-03-29T14:44:57.243Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/xcolv0ia3bezijeod8nhcj/1080p.mp4 for hls job 1 | ||
| [2026-03-29T14:44:57.243Z] [LOG] ⏳ Initiating HLS segmenting for xcolv0ia3bezijeod8nhcj for 1080p bitrate... | ||
| [2026-03-29T14:44:57.243Z] [LOG] ⏳ Starting HLS segmentation for xcolv0ia3bezijeod8nhcj [1080p]... | ||
| [2026-03-29T14:44:57.252Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/360p/segment_001.ts | ||
| [2026-03-29T14:44:57.279Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/720p/segment_001.ts | ||
| [2026-03-29T14:44:57.281Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/480p/segment_001.ts | ||
| [2026-03-29T14:44:57.292Z] [LOG] 📊 HLS [1080p] progress: 100% | ||
| [2026-03-29T14:44:57.292Z] [LOG] ✅ HLS segmentation complete for xcolv0ia3bezijeod8nhcj [1080p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/xcolv0ia3bezijeod8nhcj/1080p/1080p.m3u8 | ||
| [2026-03-29T14:44:57.292Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/xcolv0ia3bezijeod8nhcj/1080p/1080p.m3u8 | ||
| [2026-03-29T14:44:57.292Z] [LOG] ☁️ Uploading segmented files to S3 for xcolv0ia3bezijeod8nhcj with 1080p bitrate... | ||
| [2026-03-29T14:44:57.434Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/360p/segment_000.ts | ||
| [2026-03-29T14:44:57.435Z] [LOG] ✅ All HLS files uploaded to S3 for xcolv0ia3bezijeod8nhcj [360p] | ||
| [2026-03-29T14:44:57.435Z] [LOG] ✅ All hls uploads complete for job 1. Keys: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/360p/360p.m3u8,dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/360p/segment_001.ts,dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/360p/segment_000.ts | ||
| [2026-03-29T14:44:57.457Z] [LOG] ☁️ Uploaded 1080p.m3u8 to S3: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/1080p/1080p.m3u8 | ||
| [2026-03-29T14:44:57.468Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/480p/segment_000.ts | ||
| [2026-03-29T14:44:57.468Z] [LOG] ✅ All HLS files uploaded to S3 for xcolv0ia3bezijeod8nhcj [480p] | ||
| [2026-03-29T14:44:57.468Z] [LOG] ✅ All hls uploads complete for job 1. Keys: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/480p/480p.m3u8,dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/480p/segment_001.ts,dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/480p/segment_000.ts | ||
| [2026-03-29T14:44:57.521Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/1080p/segment_001.ts | ||
| [2026-03-29T14:44:57.794Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/1080p/segment_000.ts | ||
| [2026-03-29T14:44:57.794Z] [LOG] ✅ All HLS files uploaded to S3 for xcolv0ia3bezijeod8nhcj [1080p] | ||
| [2026-03-29T14:44:57.794Z] [LOG] ✅ All hls uploads complete for job 1. Keys: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/1080p/1080p.m3u8,dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/1080p/segment_001.ts,dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/1080p/segment_000.ts | ||
| [2026-03-29T14:44:58.035Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/720p/segment_000.ts | ||
| [2026-03-29T14:44:58.036Z] [LOG] ✅ All HLS files uploaded to S3 for xcolv0ia3bezijeod8nhcj [720p] | ||
| [2026-03-29T14:44:58.036Z] [LOG] ✅ All hls uploads complete for job 1. Keys: dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/720p/720p.m3u8,dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/720p/segment_001.ts,dev/users/y3ki145rneqxikqntm95in/xcolv0ia3bezijeod8nhcj/720p/segment_000.ts | ||
| [2026-03-29T14:44:58.102Z] [LOG] Successfully cleaned up hlsDownloads directory | ||
| [2026-03-29T14:51:08.567Z] [LOG] Server is running on port 8080 | ||
| [2026-03-29T14:51:38.246Z] [LOG] | ||
| ============================================================ | ||
| [2026-03-29T14:51:38.246Z] [LOG] 📽️ Processing job 2 | fileId: erizscz8cof0w7o9roswsci | ||
| [2026-03-29T14:51:38.246Z] [LOG] 🔄 Attempt 1 / 5 | ||
| [2026-03-29T14:51:38.246Z] [LOG] ⏰ Timestamp: 2026-03-29T14:51:38.246Z | ||
| [2026-03-29T14:51:38.246Z] [LOG] ============================================================ | ||
| [2026-03-29T14:51:38.246Z] [LOG] ❌ 🧪 SIMULATED FAILURE on attempt 1. Will succeed on attempt 3. Next retry in ~5s (exponential backoff). | ||
| [2026-03-29T14:51:38.341Z] [LOG] | ||
| ❌ Job 2 FAILED on attempt 1/5 | ||
| [2026-03-29T14:51:38.342Z] [LOG] Error: 🧪 SIMULATED FAILURE on attempt 1. Will succeed on attempt 3. Next retry in ~5s (exponential backoff). | ||
| [2026-03-29T14:51:38.343Z] [LOG] ⏳ Next retry in ~5s (exponential backoff: 5s × 2^0) | ||
| [2026-03-29T14:51:43.482Z] [LOG] | ||
| ============================================================ | ||
| [2026-03-29T14:51:43.482Z] [LOG] 📽️ Processing job 2 | fileId: erizscz8cof0w7o9roswsci | ||
| [2026-03-29T14:51:43.482Z] [LOG] 🔄 Attempt 2 / 5 | ||
| [2026-03-29T14:51:43.482Z] [LOG] ⏰ Timestamp: 2026-03-29T14:51:43.482Z | ||
| [2026-03-29T14:51:43.482Z] [LOG] ============================================================ | ||
| [2026-03-29T14:51:43.482Z] [LOG] ❌ 🧪 SIMULATED FAILURE on attempt 2. Will succeed on attempt 3. Next retry in ~10s (exponential backoff). | ||
| [2026-03-29T14:51:43.531Z] [LOG] | ||
| ❌ Job 2 FAILED on attempt 2/5 | ||
| [2026-03-29T14:51:43.531Z] [LOG] Error: 🧪 SIMULATED FAILURE on attempt 2. Will succeed on attempt 3. Next retry in ~10s (exponential backoff). | ||
| [2026-03-29T14:51:43.531Z] [LOG] ⏳ Next retry in ~10s (exponential backoff: 5s × 2^1) | ||
| [2026-03-29T14:51:53.592Z] [LOG] | ||
| ============================================================ | ||
| [2026-03-29T14:51:53.593Z] [LOG] 📽️ Processing job 2 | fileId: erizscz8cof0w7o9roswsci | ||
| [2026-03-29T14:51:53.593Z] [LOG] 🔄 Attempt 3 / 5 | ||
| [2026-03-29T14:51:53.593Z] [LOG] ⏰ Timestamp: 2026-03-29T14:51:53.593Z | ||
| [2026-03-29T14:51:53.593Z] [LOG] ============================================================ | ||
| [2026-03-29T14:51:53.593Z] [LOG] ✅ 🧪 Attempt 3 — past simulated failure threshold, proceeding normally! | ||
| [2026-03-29T14:52:00.960Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/erizscz8cof0w7o9roswsci for transcode job 2 | ||
| [2026-03-29T14:52:00.960Z] [LOG] ⏳ Initiating bulk FFmpeg transcodes for erizscz8cof0w7o9roswsci... | ||
| [2026-03-29T14:52:00.960Z] [LOG] ⏳ Starting transcode for 1080p (1920x1080)... | ||
| [2026-03-29T14:52:00.962Z] [LOG] ⏳ Starting transcode for 720p (1280x720)... | ||
| [2026-03-29T14:52:00.962Z] [LOG] ⏳ Starting transcode for 480p (854x480)... | ||
| [2026-03-29T14:52:00.963Z] [LOG] ⏳ Starting transcode for 360p (640x360)... | ||
| [2026-03-29T14:52:11.077Z] [LOG] ✅ Finished transcode for 360p | ||
| [2026-03-29T14:52:11.314Z] [LOG] ✅ Finished transcode for 480p | ||
| [2026-03-29T14:52:12.071Z] [LOG] ✅ Finished transcode for 720p | ||
| [2026-03-29T14:52:13.097Z] [LOG] ✅ Finished transcode for 1080p | ||
| [2026-03-29T14:52:13.097Z] [LOG] ✅ All transcoding finished for job 2. Outputs: /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/erizscz8cof0w7o9roswsci_360p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/erizscz8cof0w7o9roswsci_480p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/erizscz8cof0w7o9roswsci_720p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/erizscz8cof0w7o9roswsci_1080p.mp4 | ||
| [2026-03-29T14:52:13.097Z] [LOG] ☁️ Uploading transcoded files to S3 for erizscz8cof0w7o9roswsci... | ||
| [2026-03-29T14:52:13.662Z] [LOG] ☁️ Uploaded 480p to S3: dev/users/ux6kt6r36hoidrle0a0tmc/original/erizscz8cof0w7o9roswsci/480p.mp4 | ||
| [2026-03-29T14:52:13.744Z] [LOG] ☁️ Uploaded 720p to S3: dev/users/ux6kt6r36hoidrle0a0tmc/original/erizscz8cof0w7o9roswsci/720p.mp4 | ||
| [2026-03-29T14:52:14.101Z] [LOG] ☁️ Uploaded 1080p to S3: dev/users/ux6kt6r36hoidrle0a0tmc/original/erizscz8cof0w7o9roswsci/1080p.mp4 | ||
| [2026-03-29T14:52:14.130Z] [LOG] ☁️ Uploaded 360p to S3: dev/users/ux6kt6r36hoidrle0a0tmc/original/erizscz8cof0w7o9roswsci/360p.mp4 | ||
| [2026-03-29T14:52:14.130Z] [LOG] ✅ All transcoded files uploaded to S3 for fileId: erizscz8cof0w7o9roswsci | ||
| [2026-03-29T14:52:14.130Z] [LOG] ✅ All uploads complete for job 2. Keys: dev/users/ux6kt6r36hoidrle0a0tmc/original/erizscz8cof0w7o9roswsci/480p.mp4, dev/users/ux6kt6r36hoidrle0a0tmc/original/erizscz8cof0w7o9roswsci/720p.mp4, dev/users/ux6kt6r36hoidrle0a0tmc/original/erizscz8cof0w7o9roswsci/1080p.mp4, dev/users/ux6kt6r36hoidrle0a0tmc/original/erizscz8cof0w7o9roswsci/360p.mp4 | ||
| [2026-03-29T14:52:14.204Z] [LOG] HLS job added for fileId erizscz8cof0w7o9roswsci | ||
| [2026-03-29T14:52:14.303Z] [LOG] Job 2 has completed successfully! | ||
| [2026-03-29T14:52:14.319Z] [LOG] Successfully cleaned up downloads directory | ||
| [2026-03-29T14:52:14.520Z] [LOG] 📽️ Processing HLS job 2 for fileId erizscz8cof0w7o9roswsci | ||
| [2026-03-29T14:52:15.118Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/1080p.mp4 for hls job 2 | ||
| [2026-03-29T14:52:15.118Z] [LOG] ⏳ Initiating HLS segmenting for erizscz8cof0w7o9roswsci for 1080p bitrate... | ||
| [2026-03-29T14:52:15.119Z] [LOG] ⏳ Starting HLS segmentation for erizscz8cof0w7o9roswsci [1080p]... | ||
| [2026-03-29T14:52:15.186Z] [LOG] 📊 HLS [1080p] progress: 100% | ||
| [2026-03-29T14:52:15.186Z] [LOG] ✅ HLS segmentation complete for erizscz8cof0w7o9roswsci [1080p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/1080p/1080p.m3u8 | ||
| [2026-03-29T14:52:15.187Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/1080p/1080p.m3u8 | ||
| [2026-03-29T14:52:15.187Z] [LOG] ☁️ Uploading segmented files to S3 for erizscz8cof0w7o9roswsci with 1080p bitrate... | ||
| [2026-03-29T14:52:15.195Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/480p.mp4 for hls job 2 | ||
| [2026-03-29T14:52:15.195Z] [LOG] ⏳ Initiating HLS segmenting for erizscz8cof0w7o9roswsci for 480p bitrate... | ||
| [2026-03-29T14:52:15.196Z] [LOG] ⏳ Starting HLS segmentation for erizscz8cof0w7o9roswsci [480p]... | ||
| [2026-03-29T14:52:15.235Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/360p.mp4 for hls job 2 | ||
| [2026-03-29T14:52:15.235Z] [LOG] ⏳ Initiating HLS segmenting for erizscz8cof0w7o9roswsci for 360p bitrate... | ||
| [2026-03-29T14:52:15.235Z] [LOG] ⏳ Starting HLS segmentation for erizscz8cof0w7o9roswsci [360p]... | ||
| [2026-03-29T14:52:15.236Z] [LOG] 📊 HLS [480p] progress: 100% | ||
| [2026-03-29T14:52:15.237Z] [LOG] ✅ HLS segmentation complete for erizscz8cof0w7o9roswsci [480p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/480p/480p.m3u8 | ||
| [2026-03-29T14:52:15.237Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/480p/480p.m3u8 | ||
| [2026-03-29T14:52:15.237Z] [LOG] ☁️ Uploading segmented files to S3 for erizscz8cof0w7o9roswsci with 480p bitrate... | ||
| [2026-03-29T14:52:15.275Z] [LOG] 📊 HLS [360p] progress: 100% | ||
| [2026-03-29T14:52:15.276Z] [LOG] ✅ HLS segmentation complete for erizscz8cof0w7o9roswsci [360p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/360p/360p.m3u8 | ||
| [2026-03-29T14:52:15.276Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/360p/360p.m3u8 | ||
| [2026-03-29T14:52:15.276Z] [LOG] ☁️ Uploading segmented files to S3 for erizscz8cof0w7o9roswsci with 360p bitrate... | ||
| [2026-03-29T14:52:15.375Z] [WARN] An error was encountered in a non-retryable streaming request. | ||
| [2026-03-29T14:52:15.448Z] [WARN] An error was encountered in a non-retryable streaming request. | ||
| [2026-03-29T14:52:15.464Z] [LOG] Job 2 has failed with error: read ECONNRESET | ||
| [2026-03-29T14:52:15.546Z] [LOG] ☁️ Uploaded 480p.m3u8 to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/480p/480p.m3u8 | ||
| [2026-03-29T14:52:15.547Z] [LOG] ☁️ Uploaded 1080p.m3u8 to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/1080p/1080p.m3u8 | ||
| [2026-03-29T14:52:15.574Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/720p.mp4 for hls job 2 | ||
| [2026-03-29T14:52:15.574Z] [LOG] ⏳ Initiating HLS segmenting for erizscz8cof0w7o9roswsci for 720p bitrate... | ||
| [2026-03-29T14:52:15.574Z] [LOG] ⏳ Starting HLS segmentation for erizscz8cof0w7o9roswsci [720p]... | ||
| [2026-03-29T14:52:15.626Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/480p/segment_001.ts | ||
| [2026-03-29T14:52:15.629Z] [LOG] 📊 HLS [720p] progress: 100% | ||
| [2026-03-29T14:52:15.630Z] [LOG] ✅ HLS segmentation complete for erizscz8cof0w7o9roswsci [720p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/720p/720p.m3u8 | ||
| [2026-03-29T14:52:15.630Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/720p/720p.m3u8 | ||
| [2026-03-29T14:52:15.630Z] [LOG] ☁️ Uploading segmented files to S3 for erizscz8cof0w7o9roswsci with 720p bitrate... | ||
| [2026-03-29T14:52:15.687Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/1080p/segment_001.ts | ||
| [2026-03-29T14:52:15.759Z] [LOG] ☁️ Uploaded 720p.m3u8 to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/720p/720p.m3u8 | ||
| [2026-03-29T14:52:15.793Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/480p/segment_000.ts | ||
| [2026-03-29T14:52:15.794Z] [LOG] ✅ All HLS files uploaded to S3 for erizscz8cof0w7o9roswsci [480p] | ||
| [2026-03-29T14:52:15.794Z] [LOG] ✅ All hls uploads complete for job 2. Keys: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/480p/480p.m3u8,dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/480p/segment_001.ts,dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/480p/segment_000.ts | ||
| [2026-03-29T14:52:15.820Z] [LOG] ☁️ Uploaded 360p.m3u8 to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/360p/360p.m3u8 | ||
| [2026-03-29T14:52:16.066Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/720p/segment_000.ts | ||
| [2026-03-29T14:52:16.179Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/720p/segment_001.ts | ||
| [2026-03-29T14:52:16.179Z] [LOG] ✅ All HLS files uploaded to S3 for erizscz8cof0w7o9roswsci [720p] | ||
| [2026-03-29T14:52:16.179Z] [LOG] ✅ All hls uploads complete for job 2. Keys: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/720p/720p.m3u8,dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/720p/segment_000.ts,dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/720p/segment_001.ts | ||
| [2026-03-29T14:52:16.451Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/360p/segment_000.ts | ||
| [2026-03-29T14:52:20.518Z] [LOG] 📽️ Processing HLS job 2 for fileId erizscz8cof0w7o9roswsci | ||
| [2026-03-29T14:52:20.908Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/480p.mp4 for hls job 2 | ||
| [2026-03-29T14:52:20.909Z] [LOG] ⏳ Initiating HLS segmenting for erizscz8cof0w7o9roswsci for 480p bitrate... | ||
| [2026-03-29T14:52:20.909Z] [LOG] ⏳ Starting HLS segmentation for erizscz8cof0w7o9roswsci [480p]... | ||
| [2026-03-29T14:52:20.919Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/360p.mp4 for hls job 2 | ||
| [2026-03-29T14:52:20.919Z] [LOG] ⏳ Initiating HLS segmenting for erizscz8cof0w7o9roswsci for 360p bitrate... | ||
| [2026-03-29T14:52:20.919Z] [LOG] ⏳ Starting HLS segmentation for erizscz8cof0w7o9roswsci [360p]... | ||
| [2026-03-29T14:52:20.979Z] [LOG] 📊 HLS [480p] progress: 100% | ||
| [2026-03-29T14:52:20.980Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/720p.mp4 for hls job 2 | ||
| [2026-03-29T14:52:20.980Z] [LOG] ⏳ Initiating HLS segmenting for erizscz8cof0w7o9roswsci for 720p bitrate... | ||
| [2026-03-29T14:52:20.980Z] [LOG] ⏳ Starting HLS segmentation for erizscz8cof0w7o9roswsci [720p]... | ||
| [2026-03-29T14:52:20.981Z] [LOG] ✅ HLS segmentation complete for erizscz8cof0w7o9roswsci [480p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/480p/480p.m3u8 | ||
| [2026-03-29T14:52:20.981Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/480p/480p.m3u8 | ||
| [2026-03-29T14:52:20.981Z] [LOG] ☁️ Uploading segmented files to S3 for erizscz8cof0w7o9roswsci with 480p bitrate... | ||
| [2026-03-29T14:52:20.982Z] [LOG] 📊 HLS [360p] progress: 100% | ||
| [2026-03-29T14:52:20.983Z] [LOG] ✅ HLS segmentation complete for erizscz8cof0w7o9roswsci [360p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/360p/360p.m3u8 | ||
| [2026-03-29T14:52:20.983Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/360p/360p.m3u8 | ||
| [2026-03-29T14:52:20.983Z] [LOG] ☁️ Uploading segmented files to S3 for erizscz8cof0w7o9roswsci with 360p bitrate... | ||
| [2026-03-29T14:52:21.026Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/1080p.mp4 for hls job 2 | ||
| [2026-03-29T14:52:21.026Z] [LOG] ⏳ Initiating HLS segmenting for erizscz8cof0w7o9roswsci for 1080p bitrate... | ||
| [2026-03-29T14:52:21.026Z] [LOG] ⏳ Starting HLS segmentation for erizscz8cof0w7o9roswsci [1080p]... | ||
| [2026-03-29T14:52:21.027Z] [LOG] 📊 HLS [720p] progress: 100% | ||
| [2026-03-29T14:52:21.027Z] [LOG] ✅ HLS segmentation complete for erizscz8cof0w7o9roswsci [720p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/720p/720p.m3u8 | ||
| [2026-03-29T14:52:21.027Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/720p/720p.m3u8 | ||
| [2026-03-29T14:52:21.027Z] [LOG] ☁️ Uploading segmented files to S3 for erizscz8cof0w7o9roswsci with 720p bitrate... | ||
| [2026-03-29T14:52:21.071Z] [LOG] 📊 HLS [1080p] progress: 100% | ||
| [2026-03-29T14:52:21.071Z] [LOG] ✅ HLS segmentation complete for erizscz8cof0w7o9roswsci [1080p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/1080p/1080p.m3u8 | ||
| [2026-03-29T14:52:21.071Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/erizscz8cof0w7o9roswsci/1080p/1080p.m3u8 | ||
| [2026-03-29T14:52:21.071Z] [LOG] ☁️ Uploading segmented files to S3 for erizscz8cof0w7o9roswsci with 1080p bitrate... | ||
| [2026-03-29T14:52:21.105Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/480p/segment_001.ts | ||
| [2026-03-29T14:52:21.135Z] [LOG] ☁️ Uploaded 480p.m3u8 to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/480p/480p.m3u8 | ||
| [2026-03-29T14:52:21.139Z] [LOG] ☁️ Uploaded 360p.m3u8 to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/360p/360p.m3u8 | ||
| [2026-03-29T14:52:21.164Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/360p/segment_001.ts | ||
| [2026-03-29T14:52:21.199Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/360p/segment_000.ts | ||
| [2026-03-29T14:52:21.199Z] [LOG] ✅ All HLS files uploaded to S3 for erizscz8cof0w7o9roswsci [360p] | ||
| [2026-03-29T14:52:21.199Z] [LOG] ✅ All hls uploads complete for job 2. Keys: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/360p/360p.m3u8,dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/360p/segment_001.ts,dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/360p/segment_000.ts | ||
| [2026-03-29T14:52:21.201Z] [LOG] ☁️ Uploaded 720p.m3u8 to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/720p/720p.m3u8 | ||
| [2026-03-29T14:52:21.312Z] [LOG] ☁️ Uploaded 1080p.m3u8 to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/1080p/1080p.m3u8 | ||
| [2026-03-29T14:52:21.356Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/720p/segment_001.ts | ||
| [2026-03-29T14:52:21.562Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/720p/segment_000.ts | ||
| [2026-03-29T14:52:21.562Z] [LOG] ✅ All HLS files uploaded to S3 for erizscz8cof0w7o9roswsci [720p] | ||
| [2026-03-29T14:52:21.562Z] [LOG] ✅ All hls uploads complete for job 2. Keys: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/720p/720p.m3u8,dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/720p/segment_001.ts,dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/720p/segment_000.ts | ||
| [2026-03-29T14:52:21.633Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/1080p/segment_001.ts | ||
| [2026-03-29T14:52:21.721Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/480p/segment_000.ts | ||
| [2026-03-29T14:52:21.721Z] [LOG] ✅ All HLS files uploaded to S3 for erizscz8cof0w7o9roswsci [480p] | ||
| [2026-03-29T14:52:21.721Z] [LOG] ✅ All hls uploads complete for job 2. Keys: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/480p/segment_001.ts,dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/480p/480p.m3u8,dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/480p/segment_000.ts | ||
| [2026-03-29T14:52:22.216Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/1080p/segment_000.ts | ||
| [2026-03-29T14:52:22.216Z] [LOG] ✅ All HLS files uploaded to S3 for erizscz8cof0w7o9roswsci [1080p] | ||
| [2026-03-29T14:52:22.216Z] [LOG] ✅ All hls uploads complete for job 2. Keys: dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/1080p/1080p.m3u8,dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/1080p/segment_001.ts,dev/users/ux6kt6r36hoidrle0a0tmc/erizscz8cof0w7o9roswsci/1080p/segment_000.ts | ||
| [2026-03-29T14:52:22.288Z] [LOG] Successfully cleaned up hlsDownloads directory | ||
| [2026-03-29T14:57:08.843Z] [LOG] Server is running on port 8080 | ||
| [2026-03-29T14:57:36.935Z] [LOG] | ||
| ============================================================ | ||
| [2026-03-29T14:57:36.936Z] [LOG] 📽️ Processing job 3 | fileId: i79oyab6j9o6x8kbfedx | ||
| [2026-03-29T14:57:36.936Z] [LOG] 🔄 Attempt 1 / 5 | ||
| [2026-03-29T14:57:36.936Z] [LOG] ⏰ Timestamp: 2026-03-29T14:57:36.936Z | ||
| [2026-03-29T14:57:36.936Z] [LOG] ============================================================ | ||
| [2026-03-29T14:57:36.936Z] [LOG] ❌ 🧪 SIMULATED FAILURE on attempt 1. Will succeed on attempt 3. Next retry in ~3.0s (exponential backoff). | ||
| [2026-03-29T14:57:37.020Z] [LOG] | ||
| ❌ Job 3 FAILED on attempt 1/5 | ||
| [2026-03-29T14:57:37.020Z] [LOG] Error: 🧪 SIMULATED FAILURE on attempt 1. Will succeed on attempt 3. Next retry in ~3.0s (exponential backoff). | ||
| [2026-03-29T14:57:37.020Z] [LOG] ⏳ Next retry in ~3.0s (exponential backoff: 3s × 2^0) | ||
| [2026-03-29T14:57:40.455Z] [LOG] | ||
| ============================================================ | ||
| [2026-03-29T14:57:40.455Z] [LOG] 📽️ Processing job 3 | fileId: i79oyab6j9o6x8kbfedx | ||
| [2026-03-29T14:57:40.456Z] [LOG] 🔄 Attempt 2 / 5 | ||
| [2026-03-29T14:57:40.456Z] [LOG] ⏰ Timestamp: 2026-03-29T14:57:40.456Z | ||
| [2026-03-29T14:57:40.456Z] [LOG] ⏱️ Time since last attempt: 3.5s (expected: ~3.0s) | ||
| [2026-03-29T14:57:40.456Z] [LOG] ============================================================ | ||
| [2026-03-29T14:57:40.456Z] [LOG] ❌ 🧪 SIMULATED FAILURE on attempt 2. Will succeed on attempt 3. Next retry in ~6.0s (exponential backoff). | ||
| [2026-03-29T14:57:40.522Z] [LOG] | ||
| ❌ Job 3 FAILED on attempt 2/5 | ||
| [2026-03-29T14:57:40.522Z] [LOG] Error: 🧪 SIMULATED FAILURE on attempt 2. Will succeed on attempt 3. Next retry in ~6.0s (exponential backoff). | ||
| [2026-03-29T14:57:40.522Z] [LOG] ⏳ Next retry in ~6.0s (exponential backoff: 3s × 2^1) | ||
| [2026-03-29T14:57:46.618Z] [LOG] | ||
| ============================================================ | ||
| [2026-03-29T14:57:46.618Z] [LOG] 📽️ Processing job 3 | fileId: i79oyab6j9o6x8kbfedx | ||
| [2026-03-29T14:57:46.618Z] [LOG] 🔄 Attempt 3 / 5 | ||
| [2026-03-29T14:57:46.618Z] [LOG] ⏰ Timestamp: 2026-03-29T14:57:46.618Z | ||
| [2026-03-29T14:57:46.618Z] [LOG] ⏱️ Time since last attempt: 6.2s (expected: ~6.0s) | ||
| [2026-03-29T14:57:46.618Z] [LOG] ============================================================ | ||
| [2026-03-29T14:57:46.618Z] [LOG] ✅ 🧪 Attempt 3 — past simulated failure threshold, proceeding normally! | ||
| [2026-03-29T14:58:25.107Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/i79oyab6j9o6x8kbfedx for transcode job 3 | ||
| [2026-03-29T14:58:25.107Z] [LOG] ⏳ Initiating bulk FFmpeg transcodes for i79oyab6j9o6x8kbfedx... | ||
| [2026-03-29T14:58:25.107Z] [LOG] ⏳ Starting transcode for 1080p (1920x1080)... | ||
| [2026-03-29T14:58:25.109Z] [LOG] ⏳ Starting transcode for 720p (1280x720)... | ||
| [2026-03-29T14:58:25.109Z] [LOG] ⏳ Starting transcode for 480p (854x480)... | ||
| [2026-03-29T14:58:25.109Z] [LOG] ⏳ Starting transcode for 360p (640x360)... | ||
| [2026-03-29T14:58:36.024Z] [LOG] ✅ Finished transcode for 360p | ||
| [2026-03-29T14:58:36.066Z] [LOG] ✅ Finished transcode for 480p | ||
| [2026-03-29T14:58:37.067Z] [LOG] ✅ Finished transcode for 720p | ||
| [2026-03-29T14:58:38.001Z] [LOG] ✅ Finished transcode for 1080p | ||
| [2026-03-29T14:58:38.001Z] [LOG] ✅ All transcoding finished for job 3. Outputs: /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/i79oyab6j9o6x8kbfedx_360p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/i79oyab6j9o6x8kbfedx_480p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/i79oyab6j9o6x8kbfedx_720p.mp4, /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/downloads/i79oyab6j9o6x8kbfedx_1080p.mp4 | ||
| [2026-03-29T14:58:38.001Z] [LOG] ☁️ Uploading transcoded files to S3 for i79oyab6j9o6x8kbfedx... | ||
| [2026-03-29T14:58:38.534Z] [LOG] ☁️ Uploaded 360p to S3: dev/users/i0bcemn4itomyvyx5hhhvk/original/i79oyab6j9o6x8kbfedx/360p.mp4 | ||
| [2026-03-29T14:58:38.572Z] [LOG] ☁️ Uploaded 480p to S3: dev/users/i0bcemn4itomyvyx5hhhvk/original/i79oyab6j9o6x8kbfedx/480p.mp4 | ||
| [2026-03-29T14:58:38.960Z] [LOG] ☁️ Uploaded 720p to S3: dev/users/i0bcemn4itomyvyx5hhhvk/original/i79oyab6j9o6x8kbfedx/720p.mp4 | ||
| [2026-03-29T14:58:39.019Z] [LOG] ☁️ Uploaded 1080p to S3: dev/users/i0bcemn4itomyvyx5hhhvk/original/i79oyab6j9o6x8kbfedx/1080p.mp4 | ||
| [2026-03-29T14:58:39.020Z] [LOG] ✅ All transcoded files uploaded to S3 for fileId: i79oyab6j9o6x8kbfedx | ||
| [2026-03-29T14:58:39.020Z] [LOG] ✅ All uploads complete for job 3. Keys: dev/users/i0bcemn4itomyvyx5hhhvk/original/i79oyab6j9o6x8kbfedx/360p.mp4, dev/users/i0bcemn4itomyvyx5hhhvk/original/i79oyab6j9o6x8kbfedx/480p.mp4, dev/users/i0bcemn4itomyvyx5hhhvk/original/i79oyab6j9o6x8kbfedx/720p.mp4, dev/users/i0bcemn4itomyvyx5hhhvk/original/i79oyab6j9o6x8kbfedx/1080p.mp4 | ||
| [2026-03-29T14:58:39.063Z] [LOG] HLS job added for fileId i79oyab6j9o6x8kbfedx | ||
| [2026-03-29T14:58:39.066Z] [LOG] 📽️ Processing HLS job 3 for fileId i79oyab6j9o6x8kbfedx | ||
| [2026-03-29T14:58:39.150Z] [LOG] Job 3 has completed successfully! | ||
| [2026-03-29T14:58:39.156Z] [LOG] Successfully cleaned up downloads directory | ||
| [2026-03-29T14:58:39.346Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/i79oyab6j9o6x8kbfedx/360p.mp4 for hls job 3 | ||
| [2026-03-29T14:58:39.346Z] [LOG] ⏳ Initiating HLS segmenting for i79oyab6j9o6x8kbfedx for 360p bitrate... | ||
| [2026-03-29T14:58:39.347Z] [LOG] ⏳ Starting HLS segmentation for i79oyab6j9o6x8kbfedx [360p]... | ||
| [2026-03-29T14:58:39.413Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/i79oyab6j9o6x8kbfedx/480p.mp4 for hls job 3 | ||
| [2026-03-29T14:58:39.413Z] [LOG] ⏳ Initiating HLS segmenting for i79oyab6j9o6x8kbfedx for 480p bitrate... | ||
| [2026-03-29T14:58:39.413Z] [LOG] ⏳ Starting HLS segmentation for i79oyab6j9o6x8kbfedx [480p]... | ||
| [2026-03-29T14:58:39.415Z] [LOG] 📊 HLS [360p] progress: 100% | ||
| [2026-03-29T14:58:39.416Z] [LOG] ✅ HLS segmentation complete for i79oyab6j9o6x8kbfedx [360p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/i79oyab6j9o6x8kbfedx/360p/360p.m3u8 | ||
| [2026-03-29T14:58:39.416Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/i79oyab6j9o6x8kbfedx/360p/360p.m3u8 | ||
| [2026-03-29T14:58:39.416Z] [LOG] ☁️ Uploading segmented files to S3 for i79oyab6j9o6x8kbfedx with 360p bitrate... | ||
| [2026-03-29T14:58:39.437Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/i79oyab6j9o6x8kbfedx/720p.mp4 for hls job 3 | ||
| [2026-03-29T14:58:39.438Z] [LOG] ⏳ Initiating HLS segmenting for i79oyab6j9o6x8kbfedx for 720p bitrate... | ||
| [2026-03-29T14:58:39.438Z] [LOG] ⏳ Starting HLS segmentation for i79oyab6j9o6x8kbfedx [720p]... | ||
| [2026-03-29T14:58:39.457Z] [LOG] 📊 HLS [480p] progress: 100% | ||
| [2026-03-29T14:58:39.458Z] [LOG] ✅ HLS segmentation complete for i79oyab6j9o6x8kbfedx [480p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/i79oyab6j9o6x8kbfedx/480p/480p.m3u8 | ||
| [2026-03-29T14:58:39.458Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/i79oyab6j9o6x8kbfedx/480p/480p.m3u8 | ||
| [2026-03-29T14:58:39.458Z] [LOG] ☁️ Uploading segmented files to S3 for i79oyab6j9o6x8kbfedx with 480p bitrate... | ||
| [2026-03-29T14:58:39.481Z] [LOG] 📊 HLS [720p] progress: 100% | ||
| [2026-03-29T14:58:39.482Z] [LOG] ✅ HLS segmentation complete for i79oyab6j9o6x8kbfedx [720p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/i79oyab6j9o6x8kbfedx/720p/720p.m3u8 | ||
| [2026-03-29T14:58:39.482Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/i79oyab6j9o6x8kbfedx/720p/720p.m3u8 | ||
| [2026-03-29T14:58:39.482Z] [LOG] ☁️ Uploading segmented files to S3 for i79oyab6j9o6x8kbfedx with 720p bitrate... | ||
| [2026-03-29T14:58:39.593Z] [LOG] ✅ Video downloaded successfully to /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/i79oyab6j9o6x8kbfedx/1080p.mp4 for hls job 3 | ||
| [2026-03-29T14:58:39.593Z] [LOG] ⏳ Initiating HLS segmenting for i79oyab6j9o6x8kbfedx for 1080p bitrate... | ||
| [2026-03-29T14:58:39.593Z] [LOG] ⏳ Starting HLS segmentation for i79oyab6j9o6x8kbfedx [1080p]... | ||
| [2026-03-29T14:58:39.639Z] [LOG] ☁️ Uploaded 480p.m3u8 to S3: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/480p/480p.m3u8 | ||
| [2026-03-29T14:58:39.641Z] [LOG] 📊 HLS [1080p] progress: 100% | ||
| [2026-03-29T14:58:39.642Z] [LOG] ✅ HLS segmentation complete for i79oyab6j9o6x8kbfedx [1080p] → /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/i79oyab6j9o6x8kbfedx/1080p/1080p.m3u8 | ||
| [2026-03-29T14:58:39.642Z] [LOG] ✅ HLS playlist created at /Users/anshkumain/Developer/POC/videoThumbnailProcessingPOC/server/hlsDownloads/i79oyab6j9o6x8kbfedx/1080p/1080p.m3u8 | ||
| [2026-03-29T14:58:39.642Z] [LOG] ☁️ Uploading segmented files to S3 for i79oyab6j9o6x8kbfedx with 1080p bitrate... | ||
| [2026-03-29T14:58:39.651Z] [LOG] ☁️ Uploaded 360p.m3u8 to S3: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/360p/360p.m3u8 | ||
| [2026-03-29T14:58:39.661Z] [LOG] ☁️ Uploaded 720p.m3u8 to S3: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/720p/720p.m3u8 | ||
| [2026-03-29T14:58:39.685Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/480p/segment_001.ts | ||
| [2026-03-29T14:58:39.706Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/360p/segment_001.ts | ||
| [2026-03-29T14:58:39.806Z] [LOG] ☁️ Uploaded 1080p.m3u8 to S3: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/1080p/1080p.m3u8 | ||
| [2026-03-29T14:58:39.862Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/360p/segment_000.ts | ||
| [2026-03-29T14:58:39.862Z] [LOG] ✅ All HLS files uploaded to S3 for i79oyab6j9o6x8kbfedx [360p] | ||
| [2026-03-29T14:58:39.862Z] [LOG] ✅ All hls uploads complete for job 3. Keys: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/360p/360p.m3u8,dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/360p/segment_001.ts,dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/360p/segment_000.ts | ||
| [2026-03-29T14:58:39.907Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/720p/segment_000.ts | ||
| [2026-03-29T14:58:39.911Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/480p/segment_000.ts | ||
| [2026-03-29T14:58:39.911Z] [LOG] ✅ All HLS files uploaded to S3 for i79oyab6j9o6x8kbfedx [480p] | ||
| [2026-03-29T14:58:39.911Z] [LOG] ✅ All hls uploads complete for job 3. Keys: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/480p/480p.m3u8,dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/480p/segment_001.ts,dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/480p/segment_000.ts | ||
| [2026-03-29T14:58:39.974Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/720p/segment_001.ts | ||
| [2026-03-29T14:58:39.974Z] [LOG] ✅ All HLS files uploaded to S3 for i79oyab6j9o6x8kbfedx [720p] | ||
| [2026-03-29T14:58:39.974Z] [LOG] ✅ All hls uploads complete for job 3. Keys: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/720p/720p.m3u8,dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/720p/segment_000.ts,dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/720p/segment_001.ts | ||
| [2026-03-29T14:58:40.058Z] [LOG] ☁️ Uploaded segment_001.ts to S3: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/1080p/segment_001.ts | ||
| [2026-03-29T14:58:40.307Z] [LOG] ☁️ Uploaded segment_000.ts to S3: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/1080p/segment_000.ts | ||
| [2026-03-29T14:58:40.307Z] [LOG] ✅ All HLS files uploaded to S3 for i79oyab6j9o6x8kbfedx [1080p] | ||
| [2026-03-29T14:58:40.307Z] [LOG] ✅ All hls uploads complete for job 3. Keys: dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/1080p/1080p.m3u8,dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/1080p/segment_001.ts,dev/users/i0bcemn4itomyvyx5hhhvk/i79oyab6j9o6x8kbfedx/1080p/segment_000.ts | ||
| [2026-03-29T14:58:40.390Z] [LOG] Successfully cleaned up hlsDownloads directory |
There was a problem hiding this comment.
Remove the checked-in runtime log from the PR.
This file leaks absolute local paths, raw buffer output, internal user/object identifiers, and failure traces into source control. Generated logs should stay out of the repo; keep only sanitized excerpts in docs/tests if you need an example.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/logs/log.txt` around lines 1 - 684, Remove the checked-in runtime log
(log.txt) that contains absolute paths, raw buffers (e.g. "<Buffer ff d8 ff e0
...>"), internal IDs and stack traces; delete it from the repo and history (git
rm --cached log.txt then add log.txt to .gitignore, and purge past commits with
git filter-repo or BFG), replace with a small sanitized excerpt if you need an
example (no absolute paths, buffers, or real IDs), and add a pre-commit rule/CI
check to prevent committing generated logs.
| "devDependencies": { | ||
| "@types/fluent-ffmpeg": "^2.1.28", | ||
| "@types/axios": "^0.9.36", | ||
| "@types/bcrypt": "^6.0.0", | ||
| "@types/body-parser": "^1.19.6", | ||
| "@types/cors": "^2.8.19", | ||
| "@types/dotenv": "^6.1.1", | ||
| "@types/express": "^5.0.6", | ||
| "@types/ioredis": "^4.28.10", | ||
| "@types/jsonwebtoken": "^9.0.10", | ||
| "nodemon": "^3.1.14" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify that these packages have built-in types by checking their package.json for "types" field
echo "Checking axios types..."
curl -s https://registry.npmjs.org/axios/latest | jq '.types // .typings // "No types field"'
echo "Checking dotenv types..."
curl -s https://registry.npmjs.org/dotenv/latest | jq '.types // .typings // "No types field"'
echo "Checking ioredis types..."
curl -s https://registry.npmjs.org/ioredis/latest | jq '.types // .typings // "No types field"'Repository: vector17002/video-transcoding
Length of output: 197
Remove deprecated @types packages.
The following @types packages are unnecessary because the libraries now include their own TypeScript definitions:
@types/axios— Axios has built-in types@types/dotenv— Dotenv has built-in types@types/ioredis— ioredis has built-in types
Remove them to avoid potential type conflicts.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/package.json` around lines 30 - 40, The devDependencies in
package.json include deprecated external type packages that conflict with the
libraries' built-in TypeScript definitions; remove the entries "@types/axios",
"@types/dotenv", and "@types/ioredis" from the "devDependencies" section so
package.json only references the actual packages (leave other `@types` entries
intact) and then run install to update lockfile.
| export const downloadObjectFromPreSignedUrlWithBitrate = async (videoDownloadSignedUrl: string, fileId: string, job: Job, bitrate: string) => { | ||
| // Download the video as a buffer | ||
| const response = await axios.get(videoDownloadSignedUrl, { responseType: 'arraybuffer' }); | ||
|
|
||
| if (response.status !== 200) | ||
| console.log(`Video download failed for hls job id ${job.id}`) | ||
|
|
||
| const videoBuffer = response.data; | ||
|
|
||
| // Ensure downloads directory exists (hlsDownloads/{fileId}/{bitrate}) | ||
| const downloadsDir = path.join(__dirname, '..', '..', 'hlsDownloads', fileId); | ||
| if (!fs.existsSync(downloadsDir)) { | ||
| fs.mkdirSync(downloadsDir, { recursive: true }); | ||
| } | ||
|
|
||
| // Save the buffer to the local repository | ||
| const localFilePath = path.join(downloadsDir, `${bitrate}.mp4`); | ||
| fs.writeFileSync(localFilePath, videoBuffer); | ||
| console.log(`✅ Video downloaded successfully to ${localFilePath} for hls job ${job.id}`); |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# First, locate and check the hls service file
find . -type f -name "hls.service.ts" | head -5Repository: vector17002/video-transcoding
Length of output: 109
🏁 Script executed:
# Check the hls worker file
find . -type f -name "hls.worker.ts" | head -5Repository: vector17002/video-transcoding
Length of output: 107
🏁 Script executed:
# Get line count to understand file size
wc -l server/src/services/hls.service.ts server/src/workers/hls.worker.ts 2>/dev/null || echo "Files not found in expected location"Repository: vector17002/video-transcoding
Length of output: 161
🏁 Script executed:
# Read the hls.service.ts file with line numbers
cat -n server/src/services/hls.service.tsRepository: vector17002/video-transcoding
Length of output: 6487
🏁 Script executed:
# Read the hls.worker.ts file with line numbers
cat -n server/src/workers/hls.worker.tsRepository: vector17002/video-transcoding
Length of output: 2231
🏁 Script executed:
# Check for any other calls to downloadObjectFromPreSignedUrlWithBitrate
rg "downloadObjectFromPreSignedUrlWithBitrate" --type tsRepository: vector17002/video-transcoding
Length of output: 587
🏁 Script executed:
# Check if there are any timeout configurations elsewhere in the codebase
rg "timeout" server/src --type ts -iRepository: vector17002/video-transcoding
Length of output: 55
Switch HLS bitrate downloads to streaming with an explicit timeout.
server/src/workers/hls.worker.ts line 12 starts all four bitrate downloads concurrently via Promise.all(). Combined with the arraybuffer response type on server/src/services/hls.service.ts line 49, this holds all four full MP4 renditions (1080p, 720p, 480p, 360p) in RAM simultaneously before they are written to disk. Replace the buffer-based download with a streaming approach using axios piped to a file write stream, and add a download timeout to prevent stalled transfers from consuming resources indefinitely.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/src/services/hls.service.ts` around lines 47 - 65,
downloadObjectFromPreSignedUrlWithBitrate currently downloads the whole MP4 into
memory using axios with responseType 'arraybuffer'; change it to stream the
response to disk and add a request timeout to avoid holding multiple full files
in RAM and prevent stalls. Use axios with responseType: 'stream' (or
AbortController) and a timeout value, create a write stream to localFilePath,
pipe response.data into fs.createWriteStream, await the stream 'finish' event
and handle 'error' to cleanup the partial file; also check response.status (or
reject non-2xx) before piping and log/throw using job.id on failures so
Promise.all callers won’t hang indefinitely.
| await Promise.all(files.map(async (fileName) => { | ||
| const filePath = path.join(segmentDir, fileName); | ||
| const s3Key = `${s3BaseKey}/${fileName}`; | ||
| const contentType = fileName.endsWith('.m3u8') | ||
| ? 'application/x-mpegURL' | ||
| : 'video/MP2T'; // .ts segments | ||
|
|
||
| const command = new PutObjectCommand({ | ||
| Bucket: bucket, | ||
| Key: s3Key, | ||
| Body: fs.createReadStream(filePath), | ||
| ContentType: contentType, | ||
| }); | ||
|
|
||
| await s3Client.send(command); | ||
| console.log(`☁️ Uploaded ${fileName} to S3: ${s3Key}`); | ||
| uploadedKeys.push(s3Key); | ||
| })); |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
# First, let's check if the file exists and examine the code at lines 120-137
cat -n server/src/services/hls.service.ts | sed -n '115,145p'Repository: vector17002/video-transcoding
Length of output: 1235
🏁 Script executed:
# Check if the log file exists and examine lines 263-289
if [ -f "server/logs/log.txt" ]; then
cat -n server/logs/log.txt | sed -n '260,295p'
else
echo "Log file not found at server/logs/log.txt"
fiRepository: vector17002/video-transcoding
Length of output: 5543
🏁 Script executed:
# Let's also check the surrounding context to understand error handling
cat -n server/src/services/hls.service.ts | sed -n '100,160p'Repository: vector17002/video-transcoding
Length of output: 1945
Add error handling to the ReadStream before passing it to S3.
The fs.createReadStream() call at line 130 does not have an error listener, so file-open errors (e.g., ENOENT) are emitted asynchronously as uncaught exceptions. The logs show this occurs repeatedly during HLS uploads: lines 263–289 in server/logs/log.txt contain multiple UNCAUGHT EXCEPTION: ENOENT errors logged immediately after the "Uploading segmented files to S3" message, confirming the stream failures escape unhandled. Attach an error listener to the stream or wrap the s3Client.send() call in a try-catch block.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/src/services/hls.service.ts` around lines 120 - 137, The
fs.createReadStream used when building the PutObjectCommand can emit async
errors (e.g., ENOENT) that are currently unhandled; modify the upload loop (the
Promise.all over files in the function that constructs PutObjectCommand and
calls s3Client.send) to attach an 'error' listener to the stream before passing
it to Body and wrap the s3Client.send call in try/catch so stream/open errors
and S3 errors are caught; specifically, create the stream variable from
fs.createReadStream(filePath), add stream.on('error', err => { /* log and
reject/handle per-file failure */ }), then use that stream for Body in the
PutObjectCommand and handle failures by logging and not letting uncaught
exceptions propagate (and ensure uploadedKeys is only pushed on success).
| export const downloadObjectFromPreSignedUrl = async (videoDownloadSignedUrl: string, fileId: string, job: Job) => { | ||
| // Download the video as a buffer | ||
| const response = await axios.get(videoDownloadSignedUrl, { responseType: 'arraybuffer' }); | ||
|
|
||
| if (response.status !== 200) | ||
| console.log(`Video download failed for transcode job id ${job.id}`) | ||
|
|
||
| const videoBuffer = response.data; | ||
|
|
||
| // Ensure downloads directory exists | ||
| const downloadsDir = path.join(__dirname, '..', '..', 'downloads'); | ||
| if (!fs.existsSync(downloadsDir)) { | ||
| fs.mkdirSync(downloadsDir, { recursive: true }); | ||
| } | ||
|
|
||
| // Save the buffer to the local repository | ||
| const localFilePath = path.join(downloadsDir, fileId); | ||
| fs.writeFileSync(localFilePath, videoBuffer); | ||
| console.log(`✅ Video downloaded successfully to ${localFilePath} for transcode job ${job.id}`); |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cd server/src/services && wc -l transcode.service.tsRepository: vector17002/video-transcoding
Length of output: 97
🏁 Script executed:
cd server/src/services && sed -n '27,45p' transcode.service.ts && echo "---SEPARATOR---" && sed -n '95,115p' transcode.service.tsRepository: vector17002/video-transcoding
Length of output: 1753
Eliminate full-file buffering on video download and transcoded output uploads.
Lines 29–44 buffer the entire source video in memory with arraybuffer, and lines 100–110 read every transcoded output into memory before uploading. Launching all uploads concurrently via Promise.all stacks these buffers, risking memory exhaustion on typical video sizes. Stream the download directly to disk using axios with responseType: 'stream' (piped to fs.createWriteStream), and stream each upload to S3 using the Body parameter as a file stream instead of buffering with readFileSync.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/src/services/transcode.service.ts` around lines 27 - 45, The download
currently buffers the entire video in memory in downloadObjectFromPreSignedUrl
(axios responseType 'arraybuffer') and later the transcoded outputs are read via
fs.readFileSync and uploaded concurrently, risking OOM; change the download to
use axios responseType: 'stream' and pipe the response.data to
fs.createWriteStream(localFilePath) to write directly to disk, then for
uploading replace fs.readFileSync usage with fs.createReadStream(filePath) and
pass that stream as the S3 upload Body, and avoid unbounded Promise.all by
uploading sequentially or with a bounded concurrency loop (e.g., for..of or a
small worker pool) when handling the transcoded outputs.
| const videoDownloadSignedUrl = await getPreSignedUrlForDownload(fileId, userId); | ||
|
|
||
| if (!videoDownloadSignedUrl) { | ||
| console.log(`❌ Presigned url failed for job ${job.id}.`); | ||
| return; | ||
| } |
There was a problem hiding this comment.
Silent failure prevents retry - throw an error instead of returning.
When the presigned URL fails, returning early marks the job as completed successfully, preventing any retry attempts. This defeats the exponential backoff mechanism.
🐛 Proposed fix
const videoDownloadSignedUrl = await getPreSignedUrlForDownload(fileId, userId);
if (!videoDownloadSignedUrl) {
- console.log(`❌ Presigned url failed for job ${job.id}.`);
- return;
+ throw new Error(`Failed to get presigned URL for fileId: ${fileId}`);
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| const videoDownloadSignedUrl = await getPreSignedUrlForDownload(fileId, userId); | |
| if (!videoDownloadSignedUrl) { | |
| console.log(`❌ Presigned url failed for job ${job.id}.`); | |
| return; | |
| } | |
| const videoDownloadSignedUrl = await getPreSignedUrlForDownload(fileId, userId); | |
| if (!videoDownloadSignedUrl) { | |
| throw new Error(`Failed to get presigned URL for fileId: ${fileId}`); | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/src/workers/transcode.worker.ts` around lines 56 - 61, The code
currently returns early when getPreSignedUrlForDownload(fileId, userId) yields
no URL, which silently marks the job successful and prevents retries; update the
transcode.worker.ts flow to throw an Error (including job.id and fileId in the
message) instead of returning so the job framework can detect failure and retry,
i.e., replace the early return after checking videoDownloadSignedUrl with a
thrown error (or rethrow a descriptive error) in the same block where
getPreSignedUrlForDownload is called.
| settings: { | ||
| backoffStrategy: (attemptsMade: number, type?: string) => { | ||
| if (type === 'exponential') { | ||
| const delay = Math.round(Math.pow(2, attemptsMade - 1) * BASE_DELAY); | ||
| console.log(`\n🔧 Backoff strategy called: attemptsMade=${attemptsMade}, type=${type}`); | ||
| console.log(` 📐 Formula: 2^(${attemptsMade}-1) × ${BASE_DELAY}ms = ${delay}ms (${(delay / 1000).toFixed(1)}s)`); | ||
| return delay; | ||
| } | ||
| return BASE_DELAY; | ||
| }, | ||
| }, |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Custom backoffStrategy duplicates queue-level configuration.
The backoff logic here works correctly, but the same exponential backoff is already configured at the queue level in transcode.queue.ts.
If you need custom logging during backoff calculation, keep this. Otherwise, remove it and rely on the queue's defaultJobOptions.backoff configuration for simpler maintenance.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/src/workers/transcode.worker.ts` around lines 76 - 86, The custom
backoffStrategy in the settings object duplicates the queue-level exponential
backoff configured in transcode.queue.ts; remove the entire
settings.backoffStrategy block (the function referencing BASE_DELAY and
console.log) so the worker relies on the queue's defaultJobOptions.backoff, or
if you must keep it for logging, replace the heavy logic with a thin wrapper
that delegates to the queue-level backoff configuration and only emits logs
(i.e., do not duplicate the exponential formula in transcode.worker.ts;
reference BASE_DELAY and defaultJobOptions.backoff in transcode.queue.ts
instead).
| transcodeWorker.on("completed", (job) => { | ||
| exec("rm -rf downloads", (error, stdout, stderr) => { | ||
| if (error) { | ||
| console.error(`exec error: ${error.message}`); | ||
| return; | ||
| } | ||
| if (stderr) { | ||
| console.error(`stderr: ${stderr}`); | ||
| return; | ||
| } | ||
| console.log('Successfully cleaned up downloads directory'); | ||
| }) | ||
| console.log(`Job ${job.id} has completed successfully!`); |
There was a problem hiding this comment.
Unsafe cleanup with rm -rf on relative path risks deleting wrong directory or race conditions.
Using exec("rm -rf downloads") has several issues:
- Race condition: If multiple transcode jobs run concurrently, one job's cleanup could delete files another job is still processing.
- Relative path risk: If the process's working directory changes unexpectedly, this could delete unintended files.
- No error handling impact: Errors are logged but the job is already marked complete.
Consider cleaning up only the specific job's files, or use an absolute path.
🛡️ Proposed fix - clean up job-specific files only
+import fs from "fs/promises";
+
transcodeWorker.on("completed", (job) => {
- exec("rm -rf downloads", (error, stdout, stderr) => {
- if (error) {
- console.error(`exec error: ${error.message}`);
- return;
- }
- if (stderr) {
- console.error(`stderr: ${stderr}`);
- return;
- }
- console.log('Successfully cleaned up downloads directory');
- })
+ const jobDownloadDir = path.join(__dirname, '..', '..', 'downloads', job.data.fileId);
+ fs.rm(jobDownloadDir, { recursive: true, force: true })
+ .then(() => console.log(`Cleaned up downloads for job ${job.id}`))
+ .catch((err) => console.error(`Failed to clean up ${jobDownloadDir}: ${err.message}`));
console.log(`Job ${job.id} has completed successfully!`);
});🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/src/workers/transcode.worker.ts` around lines 89 - 101, The current
transcodeWorker.on("completed", (job) => { ... }) handler unsafely runs exec("rm
-rf downloads") — replace this with a safe, job-scoped cleanup: compute the
absolute path for the job's output (e.g., derive from job.id or
job.data.outputDir), verify the path is inside your expected base workspace, and
delete only that directory atomically (use fs.rm or a library with recursive
option and proper error/lock handling) instead of a global rm -rf; ensure the
removal is awaited and errors are handled so one job's cleanup cannot affect
other concurrent jobs and the job completion flow accounts for cleanup failures.
| <button type="button" class="btn" id="logout-btn" style="background: var(--surface-color); color: var(--text-muted); border: 1px solid var(--border-color); margin-top: 1rem;"> | ||
| Logout | ||
| </button> |
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Consider extracting inline styles to a CSS class.
The logout button uses inline styles that could be moved to a dedicated CSS class (e.g., .btn-secondary) for consistency with the rest of the stylesheet and easier maintenance.
Proposed refactor
Add to CSS:
.btn-secondary {
background: var(--surface-color);
color: var(--text-muted);
border: 1px solid var(--border-color);
margin-top: 1rem;
}Then update the button:
- <button type="button" class="btn" id="logout-btn" style="background: var(--surface-color); color: var(--text-muted); border: 1px solid var(--border-color); margin-top: 1rem;">
+ <button type="button" class="btn btn-secondary" id="logout-btn">
Logout
</button>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@web/index.html` around lines 338 - 340, The inline styles on the logout
button should be moved into a CSS class for consistency and maintainability:
create a class (e.g., .btn-secondary) with the styles background:
var(--surface-color); color: var(--text-muted); border: 1px solid
var(--border-color); margin-top: 1rem; then remove the inline style attribute
from the element with id "logout-btn" and add the new class alongside the
existing "btn" class so the button becomes class="btn btn-secondary" while
preserving its id.
| // Handle Logout | ||
| const logoutBtn = document.getElementById('logout-btn'); | ||
| if (logoutBtn) { | ||
| logoutBtn.addEventListener('click', () => { | ||
| document.cookie = 'token=; Max-Age=0; path=/;'; | ||
| localStorage.removeItem('token'); | ||
| uploadView.classList.add('hidden'); | ||
| authView.classList.remove('hidden'); | ||
| // Clear inputs | ||
| emailInput.value = ''; | ||
| passwordInput.value = ''; | ||
| hideStatus(authStatus); | ||
| hideStatus(uploadStatus); | ||
| }); | ||
| } |
There was a problem hiding this comment.
Client-side logout should also call the server's /auth/logout endpoint.
The current implementation only clears tokens client-side. Per the server middleware in server/src/middleware/auth.middleware.ts, tokens are read from both the Authorization header and cookies. The server has a /auth/logout endpoint that clears the server-side cookie, but it's not being called here.
While this works for basic logout UX, calling the server endpoint ensures:
- The
HttpOnlycookie (if any) is cleared server-side - Consistent logout behavior across the system
Proposed fix to call server logout
if (logoutBtn) {
- logoutBtn.addEventListener('click', () => {
+ logoutBtn.addEventListener('click', async () => {
+ try {
+ await fetch(`${API_BASE}/auth/logout`, {
+ method: 'POST',
+ headers: {
+ 'Authorization': `Bearer ${localStorage.getItem('token') || ''}`
+ },
+ credentials: 'include'
+ });
+ } catch (e) {
+ console.error('Server logout failed', e);
+ }
document.cookie = 'token=; Max-Age=0; path=/;';
localStorage.removeItem('token');
uploadView.classList.add('hidden');
authView.classList.remove('hidden');
// Clear inputs
emailInput.value = '';
passwordInput.value = '';
hideStatus(authStatus);
hideStatus(uploadStatus);
});
}Note: For stronger security guarantees, consider implementing server-side token blacklisting (e.g., via Redis) to invalidate tokens immediately upon logout, preventing replay attacks with captured tokens until their natural JWT expiration.
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| // Handle Logout | |
| const logoutBtn = document.getElementById('logout-btn'); | |
| if (logoutBtn) { | |
| logoutBtn.addEventListener('click', () => { | |
| document.cookie = 'token=; Max-Age=0; path=/;'; | |
| localStorage.removeItem('token'); | |
| uploadView.classList.add('hidden'); | |
| authView.classList.remove('hidden'); | |
| // Clear inputs | |
| emailInput.value = ''; | |
| passwordInput.value = ''; | |
| hideStatus(authStatus); | |
| hideStatus(uploadStatus); | |
| }); | |
| } | |
| // Handle Logout | |
| const logoutBtn = document.getElementById('logout-btn'); | |
| if (logoutBtn) { | |
| logoutBtn.addEventListener('click', async () => { | |
| try { | |
| await fetch(`${API_BASE}/auth/logout`, { | |
| method: 'POST', | |
| headers: { | |
| 'Authorization': `Bearer ${localStorage.getItem('token') || ''}` | |
| }, | |
| credentials: 'include' | |
| }); | |
| } catch (e) { | |
| console.error('Server logout failed', e); | |
| } | |
| document.cookie = 'token=; Max-Age=0; path=/;'; | |
| localStorage.removeItem('token'); | |
| uploadView.classList.add('hidden'); | |
| authView.classList.remove('hidden'); | |
| // Clear inputs | |
| emailInput.value = ''; | |
| passwordInput.value = ''; | |
| hideStatus(authStatus); | |
| hideStatus(uploadStatus); | |
| }); | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@web/index.html` around lines 596 - 610, Modify the logoutBtn click handler to
call the server logout endpoint before clearing UI/storage: in the event
listener attached to logoutBtn (the anonymous function where you currently clear
document.cookie, localStorage, and toggle uploadView/authView), send a fetch to
'/auth/logout' (POST or the server's expected method) with credentials:
'include' so the HttpOnly cookie is cleared server-side; await the response (or
handle non-OK responses) and only then remove client-side token
(localStorage.removeItem('token')), clear inputs
(emailInput.value/passwordInput.value), hide statuses
(hideStatus(authStatus)/hideStatus(uploadStatus)), and toggle views. Ensure
errors from the fetch are caught and logged so logout still falls back to
clearing UI if the call fails.
Notion
Summary by CodeRabbit
New Features
Chores