Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
html5-animation-video-renderer
Advanced tools
A Node.js script that renders an HTML5-based animation (\*) into a high-quality video. It renders the animation frame-by-frame using Puppeteer without using screen capturing, so no frameskips!
A Node.js script that renders an HTML5-based animation (*) into a high-quality video. It renders the animation frame-by-frame using Puppeteer without using screen capturing, so no frameskips!
It works by opening a headless browser and calls seekToFrame(frameNumber)
for each frame of your animation.
Your web page is expected to display that frame on the screen.
It then captures a screenshot for that frame.
Each frame is then sent to ffmpeg
to encode the video without needing to save temporary files to disk.
Because it works by capturing the page screenshot, it can render:
However, the renderer needs to get the webpage to display a specific frame before rendering. Therefore, it does not support:
Features:
All videos and preview images here are generated by CircleCI on every commit.
Image | Example | View in browser | Result |
---|---|---|---|
examples/gsap-hello-world.html | 🌏 View | 🎬 Play (1080p60) | |
A simple but CPU-intensive Hello World example using GSAP. Shows basic usage on how to create an HTML5 webpage compatible with this renderer. | |||
examples/vue-starfield.html | 🌏 View | 🎬 Play (1080p60) | |
A very CPU-intensive starfield built with Vue.js. When viewed in real-time, my Late 2013 MacBook Pro cannot render any faster than 10 fps. |
Your HTML5-based animation can be created using any tool, so long as the webpage has these properties:
The webpage should contain a #scene
element in the DOM, positioned at top: 0; left: 0;
.
The dimensions of the #scene
element will be the video’s dimensions.
You can use the provided lib/style.css as a starting point.
The webpage should contain these global JavaScript functions:
getInfo()
should return an object with the following properties:
fps
The video frame rate.numberOfFrames
The number of frames to render.seekToFrame(frameNumber)
should display the frame at the specified frameNumber
.
This function may return a promise, in this case the renderer will wait for it to resolve.
Please make sure that all assets (such as images/fonts) are already loaded.
See an example at examples/gsap-hello-world.html.
Install Node.js 12, Yarn and ffmpeg, then install the project dependencies with:
yarn install
To see help text, run:
node render --help
node render --url=<URL> --video=<FILE>.mp4
By default, the renderer will spawn multiple headless Chrome processes matching the number of CPU cores detected on your machine. However, more running Chrome instances means more memory consumption. This may be undesirable.
For instance, CircleCI instances have 2 vCPUs and 4 GB of RAM. However it reports as having 36 cores, leading to a lot of crashes due to out-of-memory condition.
You can control the number of headless Chrome processes using the --parallelism
option:
node render --url=<URL> --video=<FILE>.mp4 --parallelism=4
You can also render individual frames as different image files using the --png
option.
This can help you avoid losing your work in case you want to render a long video, in exchange for more disk usage.
node render --url=<URL> --video=<FILE>.mp4 --png=<DIR>
This will render each frame to <DIR>/frameNNNNNN.png
.
Note that you will have to assemble these frames into a video file yourself.
You can use this in conjunction with --no-video
to render just the image files, without the video.
You can also set the starting and ending frame numbers.
node render --url=<URL> --video=<FILE>.mp4 --start=60 --end=120
This will render the frames 60–119. Note that the ending frame is not rendered.
Use the --no-video
option. Useful when used with --png
.
node render --url=<URL> --no-video
Just set --end
to (--start
+ 1) and render out a --png
file.
node render --url=<URL> --png=<DIR> --start=60 --end=61
Use the --scale
option to scale up or scale down the browser viewport.
node render --url=<URL> --video=<FILE>.mp4 --scale=0.5
node render --url=<URL> --video=<FILE>.mp4 --scale=2
FAQs
A Node.js script that renders an HTML5-based animation (\*) into a high-quality video. It renders the animation frame-by-frame using Puppeteer without using screen capturing, so no frameskips!
We found that html5-animation-video-renderer demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.