Run Pts.js from the command line.

pts-render creates images and SVGs directly without a browser.

$ npx pts-render interpolate.mjs

pts-output/interpolate-<render-id>.png
Geom.interpolate example output Nested white and navy squares twist inward on a transparent background.

Simple interface

Export one function with Pts drawing code, and run npx pts-render file.mjs.

Alternatively, install globally via npm i -g pts-render and run pts-render file.mjs.

Pts.js code sample

interpolate.mjs
export default function run({ Pts, space, form }) {
  const { Geom, Num, Rectangle } = Pts;

  function interpolate(points, t, depth = 0) {
    if (depth > 20) return;
    t = Num.boundValue(t, 0, 1);
    const next = points.map((p, i) =>
      Geom.interpolate(p, points[(i + 1) % points.length], t),
    );
    form.fillOnly(depth % 2 === 0 ? "#fff" : "#123").polygon(next);
    interpolate(next, t + 0.02, depth + 1);
  }

  space.add(() => {
    const size = space.size.$multiply(0.5).minValue().value;
    const rect = Rectangle.corners([
      space.center.$subtract(size),
      space.center.$add(size),
    ]);
    const t = 0.15;
    interpolate(rect, t);
  });
}

Render it from command line

$ npx pts-render interpolate.mjs \
  --out interpolate.png \
  --out interpolate.svg

$ npx pts-render interpolate.mjs \
  --size 1200x630 \
  --out card.png

Size and background are optional. They default to 800 × 600 and transparent.

You can also use the same file in a browser

import { mountScene } from
  "pts-render/browser";
import run from "./interpolate.mjs";

await mountScene(run, {
  target: "#pt"
});

Features

Repeatable renders
Control the frame, input, parameters, and random seed when a stable result matters.
CLI and API
Use the pts-render command or call renderScene() from Node.
Structured results
Request JSON output for build scripts, automation, and agents.
More
See other Pts options like Python and React in this ecosystem guide.