> ## Documentation Index
> Fetch the complete documentation index at: /llms.txt
> Use this file to discover all available pages before exploring further.

# Camcorder HUD

> Responsive REC, battery, editable date placeholder, and timeline-driven counter overlay for creator-camera and camcorder treatments

# Camcorder HUD

Responsive REC, battery, editable date placeholder, and timeline-driven counter overlay for creator-camera and camcorder treatments

**Camcorder HUD**

```html camcorder-hud.html theme={null}
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
    <style>
      *,
      *::before,
      *::after {
        box-sizing: border-box;
      }

      html,
      body {
        width: 1920px;
        height: 1080px;
        margin: 0;
        overflow: hidden;
        background: transparent;
      }

      #ch-hud {
        --hf-camcorder-color: #fff;
        --hf-camcorder-accent: #f12c2c;
        --hf-camcorder-inset: 5vmin;
        --hf-camcorder-font-size: 3.7vmin;
        position: absolute;
        inset: 0;
        color: var(--hf-camcorder-color);
        font-family: monospace;
        font-size: var(--hf-camcorder-font-size);
        font-weight: 700;
        line-height: 1.25;
        pointer-events: none;
        -webkit-text-stroke: 0.12vmin rgb(0 0 0 / 92%);
        text-shadow: 0 0.2vmin 0.6vmin rgb(0 0 0 / 90%);
      }

      #ch-hud .ch-corner {
        position: absolute;
      }

      #ch-hud .ch-record {
        top: var(--hf-camcorder-inset);
        left: var(--hf-camcorder-inset);
        display: flex;
        align-items: center;
        gap: 1.8vmin;
      }

      #ch-hud .ch-record-dot {
        width: 2.2vmin;
        height: 2.2vmin;
        border-radius: 50%;
        background: var(--hf-camcorder-accent);
        box-shadow: 0 0 0.9vmin color-mix(in srgb, var(--hf-camcorder-accent) 55%, transparent);
      }

      #ch-hud .ch-battery {
        top: var(--hf-camcorder-inset);
        right: var(--hf-camcorder-inset);
        width: 7vmin;
        height: 3.5vmin;
        border: 0.35vmin solid currentcolor;
      }

      #ch-hud .ch-battery::before {
        position: absolute;
        top: 0.7vmin;
        left: 0.7vmin;
        width: 4.7vmin;
        height: 1.4vmin;
        background: currentcolor;
        content: "";
      }

      #ch-hud .ch-battery::after {
        position: absolute;
        top: 0.7vmin;
        right: -1vmin;
        width: 0.7vmin;
        height: 1.4vmin;
        background: currentcolor;
        content: "";
      }

      #ch-hud .ch-date {
        bottom: var(--hf-camcorder-inset);
        left: var(--hf-camcorder-inset);
      }

      #ch-hud .ch-counter {
        right: var(--hf-camcorder-inset);
        bottom: var(--hf-camcorder-inset);
        text-align: right;
      }

      #ch-hud .ch-mode {
        display: block;
        margin-bottom: 0.7vmin;
        font-size: 2.6vmin;
      }
    </style>
  </head>
  <body>
    <div
      id="camcorder-hud"
      data-composition-id="camcorder-hud"
      data-start="0"
      data-duration="4"
      data-width="1920"
      data-height="1080"
    >
      <div id="ch-hud" data-hf-counter-start="0" aria-hidden="true">
        <div class="ch-corner ch-record"><span class="ch-record-dot"></span><span>REC</span></div>
        <div class="ch-corner ch-battery"></div>
        <div class="ch-corner ch-date">JAN 01 2000<br />12:00 AM</div>
        <div class="ch-corner ch-counter">
          <span class="ch-mode">SP · 16:9</span><span class="ch-counter-value">00:00:00</span>
        </div>
      </div>
    </div>

    <script>
      window.__timelines = window.__timelines || {};

      var hud = document.getElementById("ch-hud");
      var counter = hud && hud.querySelector(".ch-counter-value");
      var recordDot = hud && hud.querySelector(".ch-record-dot");
      var host = hud && hud.closest("[data-composition-id]");
      if (!hud || !counter || !recordDot || !host) {
        throw new Error("Camcorder HUD could not find its composition host");
      }

      var compositionId = host.getAttribute("data-composition-id");
      var duration = Number(host.getAttribute("data-duration")) || 4;
      var counterStart = Number(hud.getAttribute("data-hf-counter-start")) || 0;
      var state = { seconds: 0 };

      function formatCounter(value) {
        var seconds = Math.max(0, Math.floor(value));
        var hours = Math.floor(seconds / 3600);
        var minutes = Math.floor((seconds % 3600) / 60);
        var remainder = seconds % 60;
        return [hours, minutes, remainder]
          .map(function (part) {
            return String(part).padStart(2, "0");
          })
          .join(":");
      }

      function updateHud() {
        counter.textContent = formatCounter(counterStart + state.seconds);
        recordDot.style.opacity = Math.floor(state.seconds / 0.55) % 2 === 0 ? "1" : "0.25";
      }

      var tl = gsap.timeline({ paused: true });
      tl.to(state, { seconds: duration, duration: duration, ease: "none", onUpdate: updateHud }, 0);
      updateHud();
      window.__timelines[compositionId] = tl;
    </script>
  </body>
</html>
```

Copy npx hyperframes add camcorder-hud to the clipboard

That writes one file: `compositions/camcorder-hud.html`.

## Add it to your video

It runs for 4 seconds at 1920×1080. Paste this into your composition:

```html index.html theme={null}
<div
  data-composition-id="camcorder-hud"
  data-composition-src="compositions/camcorder-hud.html"
  data-start="0"
  data-duration="4"
  data-track-index="1"
  data-width="1920"
  data-height="1080"
></div>
```

Move it in time with `data-start`. Put it on a different timeline row with
`data-track-index`. See [data attributes](/concepts/data-attributes.md) for the rest.

Tagged `camcorder` `camera` `recording` `hud` `overlay` `creator` `media-treatment-overlay`.

## Related topics

* [Browse the complete Catalog](/catalog.md)
* [Add assets and Catalog items in the browser editor](/studio/assets-and-blocks.md)
* [Put blocks together into one video](/concepts/compositions.md)


## Related topics

- [Colour, effects, 3D and generated art](/prompting/color-grading.md)
- [Telemetry HUD](/catalog/components/telemetry-hud.md)
- [Segmentation Flood](/catalog/components/segmentation-flood.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.