2026-10-11 16:34 UTC

ConsciousNode's Frame Grid project claims its client-side video-to-contact-sheet format with ElasticTOK fingerprints enables LLMs to ingest and reason about video content without external dependencies, and whether this format becomes a standard ingestion path for local and agent workflows resolves the episode.

state: seedheat: lowuncertainty: mediumconvergesscott: highvideo-llm-format multimodal-agents client-side-inference frame-gridConsciousNodeKhamubro

What is this?

ConsciousNode (Khamubro) released Frame Grid v2.3 as a single-file, zero-dependency HTML tool that runs entirely in the browser: it samples frames from a local video or camera feed, assembles them into labeled contact-sheet PNG grids, computes ROSA suffix-automaton 'ElasticTOK' fingerprints per frame, and emits a JSON manifest (FPSS-compatible). The project frames this as a client-side video-to-contact-sheet format that lets any LLM 'watch' and reason over video without uploading to a vendor. A parallel project (claude-real-video) uses a similar contact-sheet approach. The web results confirm the GitHub artifact and live demo exist; they do not yet show adoption beyond the author or independent validation that the ElasticTOK fingerprints materially improve LLM video reasoning.

Why it matters to Scott

An independent builder (ConsciousNode/Khamubro) has released a concrete, zero-dependency client-side implementation of the exact local-first video ingestion pattern Scott has both argued for (how-to-read-a-youtube-video, agent-native-computing, sovereign-software-assurance) and built himself (dev:project.video โ€” deterministic frame sampling + deduplication + contact-sheet output). The ElasticTOK/ROSA suffix-automaton fingerprinting is a specific instantiation of the frame-level deduplication techniques Scott's canon treats as load-bearing (semantic-case-formation, novelty-preserving-carve-out, imagehash). The FPSS-compatible manifest raises a concrete interoperability target for agent memory representations. This is a dated-receipts moment: the pattern Scott built privately is now appearing as a public, reusable format.
dev:project.videoip:source.how-to-read-a-youtube-video-ebookip:framework.agent-native-computingip:framework.sovereign-software-assuranceip:concept.semantic-closureip:framework.context-engineeringdev:technology.imagehashradar:abyss-acp-agent-isolationradar:agent-review-studio-local-evaluationradar:activity-frames-agent-memory-compilerradar:agent-memory-leaderboard-validationradar:aether-agent-commerce-protocol
queries asked of Scott's wikis
  • client-side inference patterns for multimodal agents
  • local-first video ingestion formats and open standards
  • model sovereignty / no-upload workflows for vision LLMs
  • agent memory: frame-level representations vs. native video tokens
  • open-weight model tooling for video reasoning without vendor APIs
  • fingerprinting / deduplication techniques for frame sequences

Measured heat

now 4 pts/hpeak 19 pts/hcomments 2/hpeers p92momentum: steady2 platformsage 27h
points/hour across evidence ยท reading as of 2026-10-12 02:59:37.977291+11:00 ยท deterministic, not a model opinion

How the heat travelled

10-10 13:00โญ origin echo-reconstructedFrame Grid v2.3: browser-native video/GIF contact-sheet generator with ElasticTOK frame fingerprinting (ROSA suffix automaton). Single HTML
ConsciousNode (Khamubro) on github (echo) ยท attributed from reddit.post.1x39bpi
โ€”
10-11 14:16first on r/ClaudeAI ยท published ยท +25.3hClaude and I built a 'video' format so Claude (and other LLMs) could 'watch' videos!
Khamubro
โ€”
10-11 14:16amplified on r/ClaudeAI ๐Ÿ‘‘reddit.post.1x39bpi
Khamubro
peak 25 ยท 9 comments ยท 100% of case engagement
10-11 15:34our radar first saw it ยท +26.6hdiscovery anchor: reddit.post.1x39bpiโ€”

Evidence (2) โ€” โญ canonical anchor

sourceobjectauthorscorecomments
๐ŸŸ  redditClaude and I built a 'video' format so Claude (and other LLMs) could 'watch' videos!
ClaudeAI
Retrieved article excerpt

Open article ยท Retrieved 2026-10-11T15:42:40.212529+00:00

# Frame Grid

**ConsciousNode SoftWorks** ยท Browser-native video and GIF contact-sheet generator with ElasticTOK frame fingerprinting.

[Live](https://consciousnode.github.io/frame-grid)
[Version](https://github.com/ConsciousNode/frame-grid)
[License](https://github.com/ConsciousNode/frame-grid/blob/main/LICENSE)
[Xinu](https://github.com/ConsciousNode)

```
camera feed, uploaded video, or GIF
  โ†’ temporal frame sampling / GIF frame extraction
  โ†’ ROSA ElasticTOK fingerprinting
  โ†’ labeled contact-sheet grids (PNG)
  โ†’ JSON frame manifests (FPSS-compatible)
```

Single HTML file. Zero dependencies. Zero uploads. Runs entirely in your browser.

---

## What it does

Frame Grid samples frames from a video or GIF at a configurable rate, assembles them into labeled contact-sheet grids, and exports them as downloadable PNGs. With ElasticTOK enabled, each frame also gets a ROSA suffix automaton fingerprint โ€” a structural signature that captures how repetitive or complex the frame's content is, independent of pixel-level appearance.

Originally designed as a proof of concept for the ManosNowAware visual pipeline. The GIF ingestion pipeline (v2.2โ€“2.3) extends this to animated GIFs, enabling AI models to "watch" GIFs as a contact-sheet grid.

---

## Features

### Core

- **Camera, video, or GIF source** โ€” live camera capture with recording, uploaded video files, or animated GIFs
- **Configurable sampling** โ€” FPS, frame dimensions, grid columns/rows, max grids
- **Label styles** โ€” minimal (F##), standard (F## | time), full (F## | time | fps), ROSA (F## | time | โ—ˆCR)
- **Download** โ€” PNG per grid with header bar showing grid number, frame range, and timestamps

### GIF Ingestion (v2.2โ€“2.3)

Native animated GIF support. Drop a GIF โ†’ get a contact-sheet grid of every frame, timestamped to the GIF's own timing. Designed so AI models can receive the full temporal content of an animated GIF as a single image.

- **Primary decoder**: browser-native `ImageDecoder` API (Chrome 94+, Safari 17+, Firefox 113+) โ€” handles all GIF compositing, disposal methods, interlace, and edge cases natively
- **Fallback decoder**: pure-JS GIF89a parser with LZW decompression, interlace support, and per-frame compositing for older browsers
- Animated preview via `<img>` element while frames are processed
- Frame timing labels use the GIF's native cumulative timestamps
- Dedup and ElasticTOK work identically on GIF frames as on video frames

### ElasticTOK (v2.0)

ROSA suffix automaton fingerprint per frame. Toggle in sidebar; `โ—ˆ ELASTICTOK` chip appears in header when active.

- 16ร—16 patch grid over the frame โ†’ RGB mean per patch โ†’ 768 quantized tokens
- Suffix automaton built on token sequence โ†’ compression ratio (CR) + state count
- b1.58 ternary packing of Float32[128] transition-density fingerprint โ†’ Uint8[32]
- CR displayed in frame label bar (ROSA label style)
- **JSON manifest download** per grid when ElasticTOK is on โ€” FPSS-compatible format:

```
{
  "tool": "FrameGrid v2.3",
  "grid": 1,
  "frames": [
    {
      "index": 0,
      "time": 0.000,
      "isDup": false,
      "cr": 2.34,
      "stateCount": 328,
      "packed": [0, 1, 2, ...]
    }
  ]
}
```

High CR = structurally repetitive frame (static shot, uniform background).
Low CR = structurally complex frame (busy scene, high detail).

### Frame Deduplication (v2.0)

Mean Absolute Difference comparison between consecutive kept frames. Configurable threshold (MAD 1โ€“30, default 8).

- **Skip mode** โ€” duplicate frames are dropped entirely; grid is denser with unique content
- **Mark mode** โ€” duplicates kept but highlighted with red label bar and `[DUP]` tag
- Session panel shows kept / duped / dup% stats

---

## Usage

**[Open Frame Grid โ†’](https://consciousnode.github.io/frame-grid)**

1. Select **Camera**, **Upload** (video), or **GIF**
2. Set FPS, frame size, and grid dimensions in Parameters
3. Enable **ElasticTOK** for ROSA fingerprinting (optional)
4. Enable **Dedup** to filter near-identical frames (optional)
5. Hit **Process** (or **Capture** โ†’ **Stop** for camera)
6. Download grids as PNG. Download JSON manifests if ElasticTOK is on.

Works offline. No data leaves your device.

---

## Stack integration

Frame Grid's JSON manifests are designed to flow into the ConsciousNode stack:

| Manifest field | Destination |
| --- | --- |
| `packed` (Uint8[32] fingerprint) | FPSS `.cns` image entry ยท SheafMemory ingestion |
| `cr` (ROSA compression ratio) | RAG Time corpus-driven embedding signal |
| `isDup`, `time` | ManosNowAware visual pipeline metadata |



---

## Architecture

```
Source (camera / video file / GIF)
  โ”œโ”€ Video path
  โ”‚    โ””โ”€ resolveDuration()          โ€” WebM Infinity fix (mobile Chrome)
  โ”‚    โ””โ”€ seekTo() ร— N               โ€” frame-accurate temporal sampling
  โ”‚    โ””โ”€ proc-canvas                โ€” single reusable extraction canvas
  โ””โ”€ GIF path
       โ””โ”€ gifDecode()                โ€” routes to native or pure-JS
            โ”œโ”€ gifDecodeNative()     โ€” ImageDecoder API (primary)
            โ””โ”€ gifDecodePureJS()     โ€” GIF89a parser + LZW (fallback)
                 โ””โ”€ gifLZW()         โ€” variable-width LZW decompressor
  โ””โ”€ frameMad()                      โ€” MAD dedup vs previous kept frame
  โ””โ”€ elasticTok()                    โ€” ROSA fingerprint (if enabled)
       โ””โ”€ 16ร—16 patch โ†’ tokens
       โ””โ”€ SuffixAutomaton
       โ””โ”€ CR + state count
       โ””โ”€ b1.58 pack โ†’ Uint8[32]
  โ””โ”€ scratch-canvas                  โ€” single reusable draw canvas
  โ””โ”€ Grid assembly                   โ€” label bars, header bar, border
  โ””โ”€ PNG download                    โ€” hdrCanvas.toDataURL()
  โ””โ”€ JSON manifest                   โ€” Blob โ†’ URL โ†’ <a download>
```

---

## Changelog

### v2.3 โ€” 2026-10-11 ยท Komorebi Interim

- **LZW bug fixed.** `dict.length > codeMask + 1` โ†’ `dict.length > codeMask`. The code-size growth check was off by one: the decoder read 9-bit codes when the bitstream had already switched to 10-bit codes, producing garbage indices that all failed the color table bounds check and silently rendered every frame black. Root cause of all-black output in v2.2.x.
- **`ImageDecoder` API as primary GIF decoder.** Native browser GIF decoding (Chrome 94+, Safari 17+, Firefox 113+). Handles compositing, disposal methods, interlace, and all edge cases automatically. Pure-JS decoder retained as fallback for older browsers.
- `gifDecode()` is now async and routes to native or fallback automatically. Log reports which path was taken.
- `index.html` updated to v2.3.
- Version string updated throughout.

### v2.2 โ€” 2026-10-11 ยท Komorebi Interim

- **GIF ingestion pipeline.** Animated GIFs can be loaded as a source alongside camera and video upload. Pure-JS GIF89a decoder with full LZW decompression, interlace support, and per-frame compositing respecting all three disposal methods (leave, restore-background, restore-previous).
- GIF source button (๐ŸŒ€) added to source panel.
- Animated preview via `<img>` element while frames are decoded and processed.
- Frame timing labels use GIF's native cumulative timestamps.
- `processSource()` router added โ€” PROCESS button works for both video and GIF.
- Note: v2.2.x builds produced all-black GIF grids due to the LZW bug fixed in v2.3.

### v2.1 โ€” 2026-06-07 ยท Kehai Interim

- **GIF export** โ€” pure JS GIF89a encoder, zero dependencies, Xinu-compliant. Toggle in Analysis panel.
  - LZW compression with numeric-keyed Map
  - 8ร—8ร—4 uniform 256-color palette, O(1) quantization per pixel
  - Frames sub-sampled evenly up to configurable max (default 60)
  - Configurable GIF width (160โ€“480px), frame delay (4โ€“50 centiseconds)
  - NETSCAPE2.0 loop extension for infinite loop
- Mobile Chrome WebM blob duration=Infinity splice fix (Kehai Interim, 2026-10-11).

### v2.0 โ€” 2026-06-07 ยท Kehai Interim

- **Xinu compliance** โ€” Google Fonts CDN import removed. System monospace stack. Zero external calls.
- **Viewport** โ€” `user-scalable=no` removed. Browser zoom restored.
- **ElasticTOK** โ€” `SuffixAutomaton` class inline. ROSA CR + state count + b1.58 packed fingerprint per frame.
- **Frame deduplication** โ€” `frameMad()` MAD comparison. Configurable threshold. Skip or mark mode.
- **Single scratch canvas** โ€” eliminates N canvas allocations per grid assembly pass.

### v1.3 โ€” Ed Interim

- Mobile Chrome WebM blob duration=Infinity fix. `resolveDuration()` force-seeks to 1e10 and waits for `durationchange` event.

### v1.0โ€“1.2 โ€” Kham / Ed Interim

- Initial implementation. Proof of concept for the ManosNowAware visual pipeline.

---

## License

MIT โ€” ConsciousNode SoftWorks
Khamubro259
๐ŸŸง echo.github โญFrame Grid v2.3: browser-native video/GIF contact-sheet generator with ElasticTOK frame fingerprinting (ROSA suffix automaton). Single HTML ConsciousNode (Khamubro)โ€”โ€”

Interpretation history

Decision trace