Skip to content

feat(dashboard): sixel timeseries via shared pixel-core renderer - #1410

Draft
jared-outpost[bot] wants to merge 1 commit into
mainfrom
feat/sixel-shared-renderer
Draft

feat(dashboard): sixel timeseries via shared pixel-core renderer#1410
jared-outpost[bot] wants to merge 1 commit into
mainfrom
feat/sixel-shared-renderer

Conversation

@jared-outpost

@jared-outpost jared-outpost Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Reworks the opt-in sixel timeseries rendering to use a single shared pixel core, per review feedback on #1409 (that PR is closed; this supersedes it).

Instead of a standalone sixel-only renderer duplicating the palette and bar-geometry that the ASCII renderer already had, there's now one resolution-independent chart core:

  • chart-core.tsbuildChartModel(TimeseriesResult) produces a resolution-independent ChartModel (buckets, maxVal, stacked); rasterizeChart(model, {width, height}) draws it into an RGBA canvas at a caller-chosen resolution. The output target picks the resolution upfront.
  • sixel-timeseries.ts — now a thin wrapper: build model → rasterize at pixel resolution → encodeImageToSixel.
  • dashboard.ts — the ASCII renderer shares the same SERIES_PALETTE from the core, so sixel and ASCII agree on hue and stacking.

Opt-in unchanged: --sixel (alias -s) / SENTRY_DASHBOARD_SIXEL=1 / widget displayType: timeseries_sixel. Falls back to text rendering when the terminal doesn't support sixel.

Testing

  • tsc --noEmit clean
  • vitest run test/lib/formatters/ — 1012 passing (includes new chart-core.test.ts, plus the existing sixel + dashboard-sixel integration tests)
  • biome check clean on changed files

Closes #1231

cc @BYK — this is the shared-renderer v2 you asked for.

Rework the opt-in sixel timeseries rendering (#1231) around a single
resolution-independent chart core instead of a standalone sixel-only
renderer.

chart-core.ts builds a ChartModel from a TimeseriesResult and rasterizes
it into an RGBA canvas at a caller-chosen resolution. The sixel path
(pixel resolution) is now a thin wrapper over the core, and the ASCII
renderer shares the same categorical palette, so both outputs agree on
hue and stacking. Output target picks the resolution upfront.

Opt-in via --sixel / SENTRY_DASHBOARD_SIXEL=1 / displayType
timeseries_sixel; falls back to text when the terminal lacks support.

Closes #1231
@vercel

vercel Bot commented Aug 11, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cli Ready Ready Preview Aug 11, 2026 10:45am

Request Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Explore sixel for dashboard rendering

0 participants