Feature request: reuse the browser, server and page across renderStill calls
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 45/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- react, typescript
Research direction
Start by reading the implementations and call paths for renderStill, renderFrames, and renderMedia, especially where they start the static server, create the browser context and page, and close them. Compare the current shared-browser lifecycle with the requested caller-owned browser and multi-frame workflow; clarify the API and output-pattern behavior before implementation. Done means callers can control browser lifetime and render multiple frames without repeating page setup.
Written by the indexing model from the issue text.
Description
We render a lot of stills (thumbnails and frame checks), and each renderStill call has a fixed setup cost. It would help to be able to pass in a browser we own, like Remotion's puppeteerInstance, or even better to render several frames on one loaded page.
To be fair, renderStill does already reuse the shared browser: the same Browser instance served 10 calls in a row when I checked. But each call still starts a new static server, opens a new context and page, loads the bundle (networkidle), waits for __RENDIV_LOADED__ plus a fixed 100 ms, and then closes the page. For a trivial 320x180 composition that's about 0.8 s per still on my machine (Windows 11), and nearly all of it is setup.
Two things would help:
- a
browseroption onrenderStill(and onrenderFramesandrenderMediafor consistency), so callers control the browser's lifetime explicitly instead of relying on the module-level singleton andcloseBrowser(); - a way to render several frames in one call (e.g.
frames: number[]with an output pattern), so the server and page are only set up once.
- Dominant language
- TypeScript
- Stars
- 159
- Forks
- 32
- PR merge metrics
- No merged PRs in 30d
Getting set up
This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from thecodacus/rendiv
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
thecodacus/rendiv#17 ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
thecodacus/rendiv#16 ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
thecodacus/rendiv#15 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 55/100
thecodacus/rendiv#24 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 68/100
thecodacus/rendiv#22 ·
All issues in thecodacus/rendiv
Similar issues
-
needs investigation
Difficulty 2/5 1-3 hours Newbie friendliness 60/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 1 day
-
area:visualizer tech-debt
Difficulty 2/5 Under an hour Newbie friendliness 66/100
jmbarzee/temporal-architect#292 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 66/100
riverqueue/river#1576 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
colbymchenry/codegraph#3228 ·
Maintainers usually reply within 1 day