Conversation
|
Warning Rate limit exceeded
Your organization is not enrolled in usage-based pricing. Contact your admin to enable usage-based pricing to continue reviews beyond the rate limit, or try again in 16 minutes and 5 seconds. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughAdded Docker infrastructure with multi-stage builds and containerized services for transcoding and HLS processing. Introduced transcode and HLS service modules handling video download, processing via FFmpeg, and S3 uploads. Decoupled worker processes from main app startup, and added logout functionality to the frontend. Changes
Sequence Diagram(s)sequenceDiagram
participant User as Transcode Job
participant TWorker as Transcode Worker
participant S3 as S3 Storage
participant FFmpeg as FFmpeg
participant Redis as Redis Queue
User->>Redis: Enqueue transcode job (fileId, userId)
TWorker->>S3: Get presigned URL for original MP4
S3-->>TWorker: Presigned URL
TWorker->>S3: Download original MP4
S3-->>TWorker: MP4 file
TWorker->>FFmpeg: Transcode to 4 resolutions (concurrent)
FFmpeg-->>TWorker: 1080p, 720p, 480p, 360p MP4s
TWorker->>S3: Upload transcoded files (4 objects)
S3-->>TWorker: Upload confirmed
TWorker->>Redis: Enqueue HLS job with fileId
TWorker->>TWorker: Cleanup: rm -rf downloads/
sequenceDiagram
participant HLSJob as HLS Job
participant HWorker as HLS Worker
participant S3 as S3 Storage
participant FFmpeg as FFmpeg
participant Cleanup as Local FS
HLSJob->>S3: Get presigned URLs (4 bitrates)
S3-->>HWorker: URLs for 1080p, 720p, 480p, 360p
par Per-Bitrate Processing
HWorker->>S3: Download 1080p MP4
S3-->>HWorker: 1080p file
HWorker->>FFmpeg: Segment to HLS playlist
FFmpeg-->>HWorker: playlist.m3u8 + segments
HWorker->>S3: Upload .m3u8 and .ts files
S3-->>HWorker: Upload confirmed
and
HWorker->>S3: Download 720p MP4
S3-->>HWorker: 720p file
HWorker->>FFmpeg: Segment to HLS playlist
FFmpeg-->>HWorker: playlist.m3u8 + segments
HWorker->>S3: Upload .m3u8 and .ts files
S3-->>HWorker: Upload confirmed
and
HWorker->>S3: Download 480p MP4
S3-->>HWorker: 480p file
HWorker->>FFmpeg: Segment to HLS playlist
FFmpeg-->>HWorker: playlist.m3u8 + segments
HWorker->>S3: Upload .m3u8 and .ts files
S3-->>HWorker: Upload confirmed
and
HWorker->>S3: Download 360p MP4
S3-->>HWorker: 360p file
HWorker->>FFmpeg: Segment to HLS playlist
FFmpeg-->>HWorker: playlist.m3u8 + segments
HWorker->>S3: Upload .m3u8 and .ts files
S3-->>HWorker: Upload confirmed
end
HWorker->>Cleanup: Cleanup: rm -rf hlsDownloads/
Cleanup-->>HWorker: Directories removed
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 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 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: 17
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
web/index.html (1)
312-324:⚠️ Potential issue | 🟡 MinorFile input lacks an associated
<label>element.The static analysis tool correctly identifies that the file input at line 313 has no associated label, which impacts accessibility for screen reader users. The surrounding text divs are not semantically linked to the input.
Proposed fix to add proper labeling
<div class="file-upload-wrapper" id="drop-zone"> - <input type="file" id="file-input" required> + <input type="file" id="file-input" required aria-label="Choose file to upload"> <div class="file-upload-icon">Or use a proper label element:
<div class="file-upload-wrapper" id="drop-zone"> + <label for="file-input" class="visually-hidden">Choose file to upload</label> <input type="file" id="file-input" required>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@web/index.html` around lines 312 - 324, The file input with id "file-input" is missing an associated label, harming accessibility; add a proper <label> element linked via the input's id (or use aria-labelledby referencing an element like the "file-upload-text" or "selected-file-name") so screen readers can announce the control; update the DOM around the "file-input" (or the wrapper with id "drop-zone") to include a descriptive label text (e.g., "Upload file") and ensure the label uses for="file-input" or the input has aria-labelledby pointing to the descriptive element, and verify required/disabled state remains intact.
🤖 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/.dockerignore`:
- Around line 1-12: The .dockerignore currently contains an entry for
".Dockerfile" which appears to be a typo; update the .dockerignore by either
removing the ".Dockerfile" entry entirely or replacing it with "Dockerfile" if
you intend to exclude the actual Dockerfile, ensuring the change targets the
".Dockerfile" line in the diff so only the intended file is excluded from the
build context.
In `@server/Dockerfile`:
- Around line 31-54: The runtime stages ("api" and "worker") run Node/FFmpeg as
root; create a non-root user and group (e.g., adduser/appuser), chown the /app
workspace and node_modules/dist to that user, and switch to that user with USER
before the CMD in both the api and worker stages; ensure the FFmpeg installation
step (apk add ffmpeg) and any files created earlier remain accessible to the
non-root account so that "dist/index.js" and "dist/worker.js" can be executed
without root privileges.
In `@server/logs/log.txt`:
- Around line 1-684: Summary: Committed runtime log server/logs/log.txt contains
sensitive runtime data and must be removed from the repo and ignored going
forward; update .gitignore to include logs/ (or server/logs/) so similar files
aren't committed. Fix: open .gitignore and add a line for logs/ (or
server/logs/) in addition to the existing *.log entry, then remove the committed
file from git tracking with git rm --cached server/logs/log.txt and commit the
changes (include a short commit message like "chore: remove committed logs and
ignore logs/"). Refer to server/logs/log.txt and the repository .gitignore entry
(*.log) when applying the change.
In `@server/package.json`:
- Line 9: The package.json contains a "build" script that runs "tsc -b" but
TypeScript is not declared in devDependencies; add "typescript" to
devDependencies (e.g., add a "typescript": "<appropriate-version>" entry) so tsc
is installed when running npm ci && npm run build outside Docker, ensuring the
build script works consistently; update package.json's devDependencies
accordingly (and regenerate lockfile if needed) so the "build" script and tsc
usage are properly declared.
- Around line 10-11: The dev scripts ("dev" and "dev:worker") only build once
then nodemon watches dist/*.js; change them to watch the TypeScript source and
trigger builds on source changes—e.g., update "dev" to run nodemon with --watch
src --ext ts --exec "npm run build && node dist/index.js" (and similarly update
"dev:worker" to exec the worker output), or replace with a tool like ts-node-dev
that restarts on src changes; ensure the modified scripts reference "dev" and
"dev:worker" so editing files under src triggers rebuild + restart
automatically.
In `@server/src/services/hls.service.ts`:
- Around line 120-137: The current use of Promise.all over files in the upload
block (files.map async ... where PutObjectCommand is sent via s3Client and
streams opened with fs.createReadStream from segmentDir into uploadedKeys)
launches all uploads concurrently and can exhaust file descriptors/sockets;
replace Promise.all with a bounded concurrency queue (e.g., use p-limit or an
async pool) to limit concurrent executions (suggest 10–20), and inside the
queued task keep the same logic that builds s3Key from s3BaseKey, creates the
PutObjectCommand, sends via s3Client.send, logs and pushes to uploadedKeys so
the rest of the flow is unchanged but uploads are rate-limited.
- Around line 47-65: The downloadObjectFromPreSignedUrlWithBitrate function
currently buffers the entire response (responseType: 'arraybuffer') causing high
memory use; change the axios request to stream the response (responseType:
'stream'), create the downloadsDir as before, open a writable stream with
fs.createWriteStream(localFilePath) and pipe the axios response.data stream into
it, then await stream completion (use stream.finished or promisify to wait) and
handle non-200 responses by rejecting/throwing so callers see failures; keep
existing logs (use job.id) and ensure proper error handling and stream cleanup
on error.
In `@server/src/services/transcode.service.ts`:
- Around line 27-45: The function downloadObjectFromPreSignedUrl currently uses
axios with responseType: 'arraybuffer' which buffers the entire video in memory;
change it to stream the response by calling axios with responseType: 'stream'
(or using a streaming GET) on videoDownloadSignedUrl, create the downloadsDir if
missing, pipe response.data into a fs.createWriteStream(localFilePath), await
the stream 'finish'/'error' events (or promisify stream pipeline) and handle
non-200 responses or request errors by rejecting/throwing with a clear log
referencing job.id and fileId; keep symbols: downloadObjectFromPreSignedUrl,
videoDownloadSignedUrl, fileId, job, downloadsDir, localFilePath.
- Around line 95-115: The current upload loop reads entire files into memory via
fs.readFileSync(filePath) causing high memory use; replace that with a streaming
upload by using fs.createReadStream(filePath) as the PutObjectCommand Body (in
the uploadPromises map) or, for better bounded concurrency and multipart
handling, swap to `@aws-sdk/lib-storage`'s Upload class with the same s3Client and
file stream; update the code that builds the command (references:
uploadPromises, filePath, fileBuffer, PutObjectCommand, s3Client.send,
uploadedKeys) to pass the stream as Body (or instantiate Upload) and ensure you
await the Upload.done() (or s3Client.send) and still push s3Key into
uploadedKeys and handle/propagate errors appropriately.
In `@server/src/workers/hls.queue.ts`:
- Around line 4-15: The code casts the ioredis client to any when constructing
new Queue (hlsQueue) because `@types/ioredis` is out-of-sync with runtime ioredis;
update the type package to a version compatible with ioredis v5 (or remove the
outdated `@types` package if ioredis ships its own types) and then remove the "as
any" cast from the Queue connection option (the new Queue("hlsQueue", {
connection: redis, ... }) in hls.queue.ts); apply the same change to the other
instances mentioned (hls.worker.ts, transcode.queue.ts, transcode.worker.ts) so
the Queue constructor accepts the typed ioredis client directly.
In `@server/src/workers/hls.worker.ts`:
- Around line 29-45: The current fire-and-forget exec("rm -rf hlsDownloads") in
hlsWorker.on("completed") causes races and leaks because artifacts are stored
under a shared hlsDownloads tree; instead, change the code to remove only the
job-specific directory (e.g., hlsDownloads/${job.id} or the exact path used by
server/src/services/hls.service.ts) and perform the removal with an awaited,
error-handled call (use fs.promises.rm or fs.rmSync wrapped in try/catch) inside
both hlsWorker.on("completed", (job) => {...}) and hlsWorker.on("failed", (job,
err) => {...}) so cleanup is deterministic, per-job, and any errors are logged
rather than fire-and-forget.
In `@server/src/workers/transcode.worker.ts`:
- Around line 89-100: The current cleanup handler in
transcodeWorker.on("completed", ...) races by removing the shared downloads/
root and misses failed jobs; change to per-job temp directories (e.g., derive
jobTempDir from the job id or fileId used in
server/src/services/transcode.service.ts) and ensure removal is done per-job in
an async, awaited finally block so it runs for both success and failure; replace
the fire-and-forget exec("rm -rf downloads") in the transcodeWorker completed
handler (and similar code at the 104-114 region) with an awaited
fs.promises.rm(jobTempDir, { recursive: true, force: true }) (or equivalent safe
removal) and add removal in the job failure handler so each job only deletes its
own temp folder and large artifacts are always cleaned up.
- Around line 72-73: The transcode worker currently calls hlsQueue.add("hls", {
fileId, userId }) which creates duplicate HLS jobs on transcode retries; make
the enqueue idempotent by supplying a deterministic jobId (e.g. using fileId and
userId or a stable prefix like `hls:${fileId}:${userId}`) as the third argument
to hlsQueue.add so retries reuse the same downstream job instead of creating
duplicates; update the call site where hlsQueue.add is invoked in
transcode.worker.ts and ensure the chosen jobId format is stable across retries
(and unique enough to avoid collisions).
In `@server/tsconfig.tsbuildinfo`:
- Line 1: The tsconfig.tsbuildinfo file is a generated TypeScript incremental
build artifact and should be ignored by VCS; add "tsconfig.tsbuildinfo" to the
repository .gitignore so it is not committed (or update .gitignore entries to
cover *.tsbuildinfo if you prefer), then remove the tracked file from the index
if already committed (e.g., git rm --cached tsconfig.tsbuildinfo) and commit the
updated .gitignore; ensure no code changes are required in functions or
classes—this is purely a VCS ignore/cleanup change.
In `@web/index.html`:
- Around line 436-437: The page currently writes the JWT to both document.cookie
and localStorage (document.cookie = `token=${data.token}...` and
localStorage.setItem('token', data.token)); stop exposing the token client-side
by removing localStorage.setItem('token', ...) and stop setting a cookie from
JavaScript without HttpOnly. Instead send the token to the server (or include it
in the API response) and have the server set the cookie via Set-Cookie with
HttpOnly; Secure; SameSite=Strict; if you must keep a client-side fix, at
minimum change the document.cookie assignment to include Secure and
SameSite=Strict, but prefer server-side Set-Cookie with HttpOnly and remove
localStorage usage.
- Around line 338-340: The logout button uses inline styles instead of a CSS
class; create a .btn-secondary CSS class (matching the inline rules: background:
var(--surface-color); color: var(--text-muted); border: 1px solid
var(--border-color); margin-top: 1rem;) in the page's <style> block and replace
the inline style on the element with that class (keep the existing id
"logout-btn" and base "btn" class) so the button uses ".btn btn-secondary" for
consistent styling and maintainability.
- Around line 596-610: Update the logoutBtn click handler to call the server
logout endpoint before clearing client state: read the JWT from cookie or
localStorage, POST to /auth/logout with the Authorization: Bearer <token> header
(handle network errors and non-2xx responses), then on success (or after
best-effort attempt) clear cookie/localStorage and toggle uploadView/authView
and inputs (emailInput, passwordInput) like today; additionally ensure the
server implements token revocation (e.g., Redis blacklist) and that
authMiddleware checks that blacklist so the JWT is invalidated server-side.
---
Outside diff comments:
In `@web/index.html`:
- Around line 312-324: The file input with id "file-input" is missing an
associated label, harming accessibility; add a proper <label> element linked via
the input's id (or use aria-labelledby referencing an element like the
"file-upload-text" or "selected-file-name") so screen readers can announce the
control; update the DOM around the "file-input" (or the wrapper with id
"drop-zone") to include a descriptive label text (e.g., "Upload file") and
ensure the label uses for="file-input" or the input has aria-labelledby pointing
to the descriptive element, and verify required/disabled state remains intact.
🪄 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: 2fdb37c4-0179-4484-acff-401d77819734
⛔ Files ignored due to path filters (1)
server/package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (17)
.gitignoredocker-compose.ymlserver/.dockerignoreserver/Dockerfileserver/logs/log.txtserver/package.jsonserver/src/app.tsserver/src/index.tsserver/src/services/hls.service.tsserver/src/services/transcode.service.tsserver/src/worker.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
| node_modules | ||
| dist | ||
| downloads | ||
| hlsDownloads | ||
| logs | ||
| .env | ||
| .env.* | ||
| !.env.example | ||
| .DS_Store | ||
| *.log | ||
| .git | ||
| .Dockerfile |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Check if there's actually a .Dockerfile file or if it should be Dockerfile
fd -H '\.?Dockerfile' server/Repository: vector17002/video-transcoding
Length of output: 90
Remove or correct the .Dockerfile entry on line 12.
The .dockerignore file excludes a file named .Dockerfile (with leading dot), but the actual Dockerfile in the repository is named Dockerfile (without the dot). This entry is either a typo or unnecessary. If it was meant to exclude the Dockerfile from the build context, change it to Dockerfile; otherwise, remove it entirely.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/.dockerignore` around lines 1 - 12, The .dockerignore currently
contains an entry for ".Dockerfile" which appears to be a typo; update the
.dockerignore by either removing the ".Dockerfile" entry entirely or replacing
it with "Dockerfile" if you intend to exclude the actual Dockerfile, ensuring
the change targets the ".Dockerfile" line in the diff so only the intended file
is excluded from the build context.
| FROM node:22-alpine AS api | ||
|
|
||
| WORKDIR /app | ||
|
|
||
| COPY --from=prod-deps /app/node_modules ./node_modules | ||
| COPY --from=builder /app/dist ./dist | ||
| COPY package.json ./ | ||
|
|
||
| CMD ["node", "dist/index.js"] | ||
|
|
||
|
|
||
| # ── Stage 3b: Worker (with FFmpeg for transcoding) ───── | ||
| FROM node:22-alpine AS worker | ||
|
|
||
| # Only workers need FFmpeg | ||
| RUN apk add --no-cache ffmpeg | ||
|
|
||
| WORKDIR /app | ||
|
|
||
| COPY --from=prod-deps /app/node_modules ./node_modules | ||
| COPY --from=builder /app/dist ./dist | ||
| COPY package.json ./ | ||
|
|
||
| CMD ["node", "dist/worker.js"] |
There was a problem hiding this comment.
Run the final images as a non-root user.
Both runtime stages execute Node/FFmpeg as root today, which unnecessarily widens the blast radius if either service is compromised.
Harden the runtime stages
FROM node:22-alpine AS api
WORKDIR /app
-COPY --from=prod-deps /app/node_modules ./node_modules
-COPY --from=builder /app/dist ./dist
-COPY package.json ./
+COPY --chown=node:node --from=prod-deps /app/node_modules ./node_modules
+COPY --chown=node:node --from=builder /app/dist ./dist
+COPY --chown=node:node package.json ./
+USER node FROM node:22-alpine AS worker
# Only workers need FFmpeg
RUN apk add --no-cache ffmpeg
WORKDIR /app
-COPY --from=prod-deps /app/node_modules ./node_modules
-COPY --from=builder /app/dist ./dist
-COPY package.json ./
+COPY --chown=node:node --from=prod-deps /app/node_modules ./node_modules
+COPY --chown=node:node --from=builder /app/dist ./dist
+COPY --chown=node:node package.json ./
+USER node📝 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.
| FROM node:22-alpine AS api | |
| WORKDIR /app | |
| COPY --from=prod-deps /app/node_modules ./node_modules | |
| COPY --from=builder /app/dist ./dist | |
| COPY package.json ./ | |
| CMD ["node", "dist/index.js"] | |
| # ── Stage 3b: Worker (with FFmpeg for transcoding) ───── | |
| FROM node:22-alpine AS worker | |
| # Only workers need FFmpeg | |
| RUN apk add --no-cache ffmpeg | |
| WORKDIR /app | |
| COPY --from=prod-deps /app/node_modules ./node_modules | |
| COPY --from=builder /app/dist ./dist | |
| COPY package.json ./ | |
| CMD ["node", "dist/worker.js"] | |
| FROM node:22-alpine AS api | |
| WORKDIR /app | |
| COPY --chown=node:node --from=prod-deps /app/node_modules ./node_modules | |
| COPY --chown=node:node --from=builder /app/dist ./dist | |
| COPY --chown=node:node package.json ./ | |
| USER node | |
| CMD ["node", "dist/index.js"] | |
| # ── Stage 3b: Worker (with FFmpeg for transcoding) ───── | |
| FROM node:22-alpine AS worker | |
| # Only workers need FFmpeg | |
| RUN apk add --no-cache ffmpeg | |
| WORKDIR /app | |
| COPY --chown=node:node --from=prod-deps /app/node_modules ./node_modules | |
| COPY --chown=node:node --from=builder /app/dist ./dist | |
| COPY --chown=node:node package.json ./ | |
| USER node | |
| CMD ["node", "dist/worker.js"] |
🧰 Tools
🪛 Checkov (3.2.510)
[low] 1-54: Ensure that HEALTHCHECK instructions have been added to container images
(CKV_DOCKER_2)
[low] 1-54: Ensure that a user for the container has been created
(CKV_DOCKER_3)
🪛 Hadolint (2.14.0)
[warning] 46-46: Pin versions in apk add. Instead of apk add <package> use apk add <package>=<version>
(DL3018)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/Dockerfile` around lines 31 - 54, The runtime stages ("api" and
"worker") run Node/FFmpeg as root; create a non-root user and group (e.g.,
adduser/appuser), chown the /app workspace and node_modules/dist to that user,
and switch to that user with USER before the CMD in both the api and worker
stages; ensure the FFmpeg installation step (apk add ffmpeg) and any files
created earlier remain accessible to the non-root account so that
"dist/index.js" and "dist/worker.js" can be executed without root privileges.
| [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.
Do not commit log files to version control.
This log file contains runtime output with potentially sensitive information including:
- Local filesystem paths exposing developer usernames
- User IDs and file IDs from S3 paths
- Stack traces revealing internal implementation details
The .gitignore has *.log but this file is log.txt. Add logs/ directory to .gitignore and remove this file from the repository.
📝 Proposed fix for .gitignore
*.log
+logs/
downloads/
hlsDownloads/Then remove the committed file:
git rm --cached server/logs/log.txt🤖 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, Summary: Committed runtime log
server/logs/log.txt contains sensitive runtime data and must be removed from the
repo and ignored going forward; update .gitignore to include logs/ (or
server/logs/) so similar files aren't committed. Fix: open .gitignore and add a
line for logs/ (or server/logs/) in addition to the existing *.log entry, then
remove the committed file from git tracking with git rm --cached
server/logs/log.txt and commit the changes (include a short commit message like
"chore: remove committed logs and ignore logs/"). Refer to server/logs/log.txt
and the repository .gitignore entry (*.log) when applying the change.
| "dev": "npm run build && nodemon dist/index.js" | ||
| "start": "node dist/index.js", | ||
| "start:worker": "node dist/worker.js", | ||
| "build": "tsc -b", |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cat -n server/package.json | head -30Repository: vector17002/video-transcoding
Length of output: 1108
🏁 Script executed:
cat server/Dockerfile | grep -n typescript -iRepository: vector17002/video-transcoding
Length of output: 134
🏁 Script executed:
cat server/DockerfileRepository: vector17002/video-transcoding
Length of output: 1305
🏁 Script executed:
cat server/package.json | grep -A 20 '"devDependencies"'Repository: vector17002/video-transcoding
Length of output: 429
Add typescript to devDependencies before using tsc in the build script.
The "build": "tsc -b" script requires the TypeScript compiler, but typescript is not declared in devDependencies. The ad-hoc RUN npm i typescript in the Dockerfile masks this dependency gap instead of fixing it, causing npm ci && npm run build to fail outside Docker.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/package.json` at line 9, The package.json contains a "build" script
that runs "tsc -b" but TypeScript is not declared in devDependencies; add
"typescript" to devDependencies (e.g., add a "typescript":
"<appropriate-version>" entry) so tsc is installed when running npm ci && npm
run build outside Docker, ensuring the build script works consistently; update
package.json's devDependencies accordingly (and regenerate lockfile if needed)
so the "build" script and tsc usage are properly declared.
| "dev": "npm run build && nodemon dist/index.js", | ||
| "dev:worker": "npm run build && nodemon dist/worker.js" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
cd server && cat -n package.json | head -30Repository: vector17002/video-transcoding
Length of output: 1108
🏁 Script executed:
cd server && ls -la | grep -E "tsconfig|build" && cat -n tsconfig.jsonRepository: vector17002/video-transcoding
Length of output: 1632
🏁 Script executed:
cd server && cat -n package.json | grep -A 2 -B 2 '"build"'Repository: vector17002/video-transcoding
Length of output: 321
Dev scripts don't rebuild on TypeScript source changes.
The current setup compiles once with npm run build, then nodemon only watches the compiled dist/*.js files. Any edits to src/ require manually restarting the command.
Rebuild on source changes
- "dev": "npm run build && nodemon dist/index.js",
- "dev:worker": "npm run build && nodemon dist/worker.js"
+ "dev": "nodemon --watch src --watch tsconfig.json --ext ts --exec \"npm run build && node dist/index.js\"",
+ "dev:worker": "nodemon --watch src --watch tsconfig.json --ext ts --exec \"npm run build && node dist/worker.js\""📝 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.
| "dev": "npm run build && nodemon dist/index.js", | |
| "dev:worker": "npm run build && nodemon dist/worker.js" | |
| "dev": "nodemon --watch src --watch tsconfig.json --ext ts --exec \"npm run build && node dist/index.js\"", | |
| "dev:worker": "nodemon --watch src --watch tsconfig.json --ext ts --exec \"npm run build && node dist/worker.js\"" |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/package.json` around lines 10 - 11, The dev scripts ("dev" and
"dev:worker") only build once then nodemon watches dist/*.js; change them to
watch the TypeScript source and trigger builds on source changes—e.g., update
"dev" to run nodemon with --watch src --ext ts --exec "npm run build && node
dist/index.js" (and similarly update "dev:worker" to exec the worker output), or
replace with a tool like ts-node-dev that restarts on src changes; ensure the
modified scripts reference "dev" and "dev:worker" so editing files under src
triggers rebuild + restart automatically.
| 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'); | ||
| }) |
There was a problem hiding this comment.
The temp cleanup is racy and misses failed jobs.
server/src/services/transcode.service.ts writes every job into the shared downloads/ root. This fire-and-forget rm -rf downloads can overlap the next job, and nothing removes large artifacts when the job fails.
Safer cleanup pattern
const jobTempDir = path.join(downloadsRoot, fileId);
try {
// download, transcode, upload, enqueue HLS
} finally {
await fs.promises.rm(jobTempDir, { recursive: true, force: true });
}Also applies to: 104-114
🤖 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 - 100, The current
cleanup handler in transcodeWorker.on("completed", ...) races by removing the
shared downloads/ root and misses failed jobs; change to per-job temp
directories (e.g., derive jobTempDir from the job id or fileId used in
server/src/services/transcode.service.ts) and ensure removal is done per-job in
an async, awaited finally block so it runs for both success and failure; replace
the fire-and-forget exec("rm -rf downloads") in the transcodeWorker completed
handler (and similar code at the 104-114 region) with an awaited
fs.promises.rm(jobTempDir, { recursive: true, force: true }) (or equivalent safe
removal) and add removal in the job failure handler so each job only deletes its
own temp folder and large artifacts are always cleaned up.
| @@ -1 +1 @@ | |||
| {"root":["./src/app.ts","./src/index.ts","./src/server.ts","./src/config/redis.ts","./src/config/s3.ts","./src/controllers/auth.controller.ts","./src/middleware/auth.middleware.ts","./src/routes/auth.routes.ts","./src/routes/s3.routes.ts","./src/services/auth.service.ts","./src/services/s3.service.ts","./src/services/user.store.ts","./src/utils/generateid.ts","./src/utils/getpresignedurl.ts","./src/utils/jwt.ts","./src/utils/logger.ts","./src/workers/transcode.queue.ts","./src/workers/transcode.worker.ts"],"version":"5.9.3"} No newline at end of file | |||
| {"root":["./src/app.ts","./src/index.ts","./src/server.ts","./src/config/redis.ts","./src/config/s3.ts","./src/controllers/auth.controller.ts","./src/middleware/auth.middleware.ts","./src/routes/auth.routes.ts","./src/routes/s3.routes.ts","./src/services/auth.service.ts","./src/services/hls.service.ts","./src/services/s3.service.ts","./src/services/transcode.service.ts","./src/services/user.store.ts","./src/utils/generateid.ts","./src/utils/getpresignedurl.ts","./src/utils/jwt.ts","./src/utils/logger.ts","./src/workers/hls.queue.ts","./src/workers/hls.worker.ts","./src/workers/transcode.queue.ts","./src/workers/transcode.worker.ts"],"version":"5.9.3"} No newline at end of file | |||
There was a problem hiding this comment.
🧹 Nitpick | 🔵 Trivial
Consider adding tsconfig.tsbuildinfo to .gitignore.
This file is auto-generated by the TypeScript compiler during incremental builds. Committing it can cause unnecessary merge conflicts and churn. It's typically excluded from version control.
📝 Add to .gitignore
downloads/
hlsDownloads/
+*.tsbuildinfo🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@server/tsconfig.tsbuildinfo` at line 1, The tsconfig.tsbuildinfo file is a
generated TypeScript incremental build artifact and should be ignored by VCS;
add "tsconfig.tsbuildinfo" to the repository .gitignore so it is not committed
(or update .gitignore entries to cover *.tsbuildinfo if you prefer), then remove
the tracked file from the index if already committed (e.g., git rm --cached
tsconfig.tsbuildinfo) and commit the updated .gitignore; ensure no code changes
are required in functions or classes—this is purely a VCS ignore/cleanup change.
| <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
Logout button styling uses inline styles.
The button uses inline style attribute while the rest of the page uses CSS classes. Consider adding a .btn-secondary class for consistency and maintainability.
Proposed refactor to use CSS class
Add to the <style> block:
.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>📝 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.
| <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> | |
| <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 logout button uses inline styles
instead of a CSS class; create a .btn-secondary CSS class (matching the inline
rules: background: var(--surface-color); color: var(--text-muted); border: 1px
solid var(--border-color); margin-top: 1rem;) in the page's <style> block and
replace the inline style on the element with that class (keep the existing id
"logout-btn" and base "btn" class) so the button uses ".btn btn-secondary" for
consistent styling and maintainability.
| document.cookie = `token=${data.token}; path=/; max-age=3600`; | ||
| localStorage.setItem('token', data.token); |
There was a problem hiding this comment.
Token stored in both localStorage and a non-HttpOnly cookie exposes it to XSS.
Storing the JWT in localStorage and a client-set cookie (without HttpOnly, Secure, or SameSite attributes) means any XSS vulnerability can exfiltrate the token. Consider:
- Having the server set the cookie with
HttpOnly; Secure; SameSite=StrictviaSet-Cookieheader - Removing localStorage storage entirely, relying solely on the secure cookie
- Or at minimum, add
SecureandSameSite=Strictto the client-set cookie
Minimal improvement: Add Secure and SameSite attributes
- document.cookie = `token=${data.token}; path=/; max-age=3600`;
- localStorage.setItem('token', data.token);
+ // Note: For production, the server should set HttpOnly cookie instead
+ document.cookie = `token=${data.token}; path=/; max-age=3600; SameSite=Strict; Secure`;
+ localStorage.setItem('token', data.token);📝 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.
| document.cookie = `token=${data.token}; path=/; max-age=3600`; | |
| localStorage.setItem('token', data.token); | |
| // Note: For production, the server should set HttpOnly cookie instead | |
| document.cookie = `token=${data.token}; path=/; max-age=3600; SameSite=Strict; Secure`; | |
| localStorage.setItem('token', data.token); |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@web/index.html` around lines 436 - 437, The page currently writes the JWT to
both document.cookie and localStorage (document.cookie =
`token=${data.token}...` and localStorage.setItem('token', data.token)); stop
exposing the token client-side by removing localStorage.setItem('token', ...)
and stop setting a cookie from JavaScript without HttpOnly. Instead send the
token to the server (or include it in the API response) and have the server set
the cookie via Set-Cookie with HttpOnly; Secure; SameSite=Strict; if you must
keep a client-side fix, at minimum change the document.cookie assignment to
include Secure and SameSite=Strict, but prefer server-side Set-Cookie with
HttpOnly and remove localStorage usage.
| // 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 doesn't invalidate the JWT server-side.
The logout handler only clears local storage and cookies on the client. The JWT remains valid on the server until its natural 1-hour expiration. An attacker who captured the token (e.g., via XSS) can continue using it after the user "logs out."
Consider calling the server's existing /auth/logout endpoint and implementing server-side token revocation (e.g., a Redis-backed blacklist checked by authMiddleware).
Proposed fix to call server logout endpoint
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('Logout request failed', e);
+ }
document.cookie = 'token=; Max-Age=0; path=/;';
localStorage.removeItem('token');Note: Even with this fix, true token invalidation requires the server to maintain a revocation list and check it in authMiddleware.
🤖 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, Update the logoutBtn click handler to
call the server logout endpoint before clearing client state: read the JWT from
cookie or localStorage, POST to /auth/logout with the Authorization: Bearer
<token> header (handle network errors and non-2xx responses), then on success
(or after best-effort attempt) clear cookie/localStorage and toggle
uploadView/authView and inputs (emailInput, passwordInput) like today;
additionally ensure the server implements token revocation (e.g., Redis
blacklist) and that authMiddleware checks that blacklist so the JWT is
invalidated server-side.
Notion
Summary by CodeRabbit
New Features
Infrastructure