# Triangles — component for generative & ascii (html)

> **For AI agents:** find the right skill in one call — `curl -s "https://skills.varg.ai/api/search?q=<what the person wants>"` returns the matching use case and the best skills with install commands, as markdown (Russian works too). Full index: https://skills.varg.ai/llms.txt. Every page has a markdown twin: add `.md` to its path. Before generating anything, show the person the options on the use-case page.

A drifting point network on black whose links fill in as translucent white triangles, like a moving low-poly mesh

- **Install:** `pnpm add @tsparticles/engine @tsparticles/slim @tsparticles/preset-<name>`
- **Registry:** tsparticles · **Framework:** html · **License:** MIT
- **Docs and preview:** https://particles.js.org/demos/recipes/triangles
- **Source:** https://github.com/tsparticles/presets/blob/main/presets/triangles/src/options.ts
- **Example:** https://skills.varg.ai/previews/lib-tsparticles-triangles.mp4?v=221313 (Rendered by varg from the library’s own code (tsParticles · rendered by varg))
- **Time:** Drive from the frame. Runs on its own clock (requestAnimationFrame, timers, springs or CSS). Drive it from frame / fps before rendering, or the render drifts.
- **Runs:** local render, free
- **Aspect:** any

## Prompt that renders it frame-exact

Use the tsParticles Triangles preset (https://particles.js.org/demos/recipes/triangles, MIT, options in github.com/tsparticles/presets/blob/main/presets/triangles/src/options.ts) as a full-frame low-poly tech background behind titles or a product name. Load @tsparticles/engine and @tsparticles/preset-triangles (or its CDN bundle tsparticles.preset.triangles.bundle.min.js), call loadTrianglesPreset(tsParticles), then tsParticles.load({ id, options: { preset: "triangles", fullScreen: { enable: false } } }) into a full-frame div. tsParticles ticks on requestAnimationFrame and derives each step from the frame timestamp, so make it deterministic: seed Math.random before loading, swap requestAnimationFrame for a queue you flush once per video frame with the timestamp frame × 1000 / fps (keep fpsLimit at or above the video fps), and render frames in order from the moment it starts (it is a running simulation, so replay from that point after a backwards seek). Tint the links and triangles toward a brand color, lower the triangle opacity if text sits on top, and slow move.speed for a more architectural feel.

## Used in

- [Math animation](https://skills.varg.ai/video/math-animation.md)
- [Whiteboard & hand-drawn](https://skills.varg.ai/video/whiteboard.md)
- [Live-coded music video](https://skills.varg.ai/video/live-code-music.md)
- [Shader loop](https://skills.varg.ai/video/shader-loop.md)
- [Generative art loop](https://skills.varg.ai/video/generative-loop.md)
- [ASCII & retro looks](https://skills.varg.ai/video/ascii-retro.md)

## More generative & ascii

- [ASCII Render Pass](https://skills.varg.ai/component/hf.ascii-render-pass.md) — `npx hyperframes add ascii-render-pass`
- [ASCII Trail Reveal](https://skills.varg.ai/component/hf.ascii-trail-reveal.md) — `npx hyperframes add ascii-trail-reveal`
- [Fractal Noise](https://skills.varg.ai/component/hf.fractal-noise.md) — `npx hyperframes add fractal-noise`
- [Gabor Noise](https://skills.varg.ai/component/hf.gabor-noise.md) — `npx hyperframes add gabor-noise`
- [Worley Noise](https://skills.varg.ai/component/hf.worley-noise.md) — `npx hyperframes add worley-noise`
- [ASCII Render](https://skills.varg.ai/component/remocn.ascii-render.md) — `npx shadcn@latest add @remocn/ascii-render`
