From c18006fabc23ab30b5217ba7473a7826e45f8658 Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Sat, 3 Oct 2026 13:06:04 +0700 Subject: [PATCH] fix(renderer): raise the default render timeout to 30s Under normal load on the shared host, a /wheelofnames GIF takes 11-12s and a /gacha wish 14-15s to render, so the 15s default turned ordinary renders into 504s. The default is now 30s, and the bot waits 45s so it never abandons a render the renderer is still allowed to finish. --- compose.yml | 2 +- internal/modules/random/renderer_client.go | 6 +++++- renderer/.env.example | 2 +- renderer/README.md | 2 +- renderer/docs/deployment.md | 2 +- renderer/src/config.js | 2 +- 6 files changed, 10 insertions(+), 6 deletions(-) diff --git a/compose.yml b/compose.yml index ab63d39..26c5e4f 100644 --- a/compose.yml +++ b/compose.yml @@ -75,7 +75,7 @@ services: # Set any of these in the Coolify dashboard; it reaches this service # through Coolify's injected .env. Outside Coolify, uncomment a line. # RENDERER_MAX_CONCURRENT_RENDERS: ${RENDERER_MAX_CONCURRENT_RENDERS:-1} - # RENDERER_RENDER_TIMEOUT_MS: ${RENDERER_RENDER_TIMEOUT_MS:-15000} # floor 7000 + # RENDERER_RENDER_TIMEOUT_MS: ${RENDERER_RENDER_TIMEOUT_MS:-30000} # floor 7000 # RENDERER_MAX_OPTIONS: ${RENDERER_MAX_OPTIONS:-32} # wheel options # RENDERER_MAX_OPTION_CHARS: ${RENDERER_MAX_OPTION_CHARS:-40} # chars per option/label diff --git a/internal/modules/random/renderer_client.go b/internal/modules/random/renderer_client.go index 183bb06..d952f4e 100644 --- a/internal/modules/random/renderer_client.go +++ b/internal/modules/random/renderer_client.go @@ -24,7 +24,11 @@ const ( rendererURLEnv = "RENDERER_URL" rendererMaxBytes = 12 << 20 - rendererTimeout = 30 * time.Second + // rendererTimeout outlasts the renderer's own default render limit + // (RENDERER_RENDER_TIMEOUT_MS, 30s) plus upload time, so a slow render + // ends in the renderer's 504 rather than the bot abandoning a render + // that was about to finish. + rendererTimeout = 45 * time.Second wheelRemoteDurationMs = 6000 wheelRemoteHoldMs = 1000 diff --git a/renderer/.env.example b/renderer/.env.example index 2e9fb45..2651812 100644 --- a/renderer/.env.example +++ b/renderer/.env.example @@ -3,6 +3,6 @@ RENDERER_HOST=0.0.0.0 NODE_ENV=production RENDERER_MAX_CONCURRENT_RENDERS=1 # Remotion browser timeout floor is 7000ms; lower values are raised to 7000. -RENDERER_RENDER_TIMEOUT_MS=15000 +RENDERER_RENDER_TIMEOUT_MS=30000 RENDERER_MAX_OPTIONS=32 RENDERER_MAX_OPTION_CHARS=40 diff --git a/renderer/README.md b/renderer/README.md index f6f0510..a016962 100644 --- a/renderer/README.md +++ b/renderer/README.md @@ -183,5 +183,5 @@ docker run --rm -p 3000:3000 miti99bot-renderer Recommended starting resources: 1-2 vCPU and 1-2 GB RAM, with `RENDERER_MAX_CONCURRENT_RENDERS=1`. `RENDERER_RENDER_TIMEOUT_MS` defaults to -`15000` and is raised to Remotion's `7000ms` browser timeout floor when configured lower. +`30000` and is raised to Remotion's `7000ms` browser timeout floor when configured lower. The API has no authentication; publish its port only on a trusted network. diff --git a/renderer/docs/deployment.md b/renderer/docs/deployment.md index 804b4ba..00797c2 100644 --- a/renderer/docs/deployment.md +++ b/renderer/docs/deployment.md @@ -34,7 +34,7 @@ Env vars, all optional (defaults shown): RENDERER_PORT=3000 RENDERER_HOST=0.0.0.0 RENDERER_MAX_CONCURRENT_RENDERS=1 -RENDERER_RENDER_TIMEOUT_MS=15000 +RENDERER_RENDER_TIMEOUT_MS=30000 RENDERER_MAX_OPTIONS=32 RENDERER_MAX_OPTION_CHARS=40 ``` diff --git a/renderer/src/config.js b/renderer/src/config.js index 4c72922..434afac 100644 --- a/renderer/src/config.js +++ b/renderer/src/config.js @@ -35,7 +35,7 @@ export const loadConfig = (env = process.env) => { maxConcurrentRenders: parsePositiveInt(env.RENDERER_MAX_CONCURRENT_RENDERS, 1), renderTimeoutMs: Math.max( minRenderTimeoutMs, - parsePositiveInt(env.RENDERER_RENDER_TIMEOUT_MS, 15000), + parsePositiveInt(env.RENDERER_RENDER_TIMEOUT_MS, 30000), ), maxOptions: parsePositiveInt(env.RENDERER_MAX_OPTIONS, 32), maxOptionChars: parsePositiveInt(env.RENDERER_MAX_OPTION_CHARS, 40),