u/Low-Desk-4290

▲ 6 r/webgl+1 crossposts

Chroma — an open-source WebGL genome browser as an IGV.js alternative (looking for testers + feedback)

Live demo: https://chroma-delta.vercel.app
(no signup, no upload — boots into a chr20:10M window with five demo tracks pre-loaded from public S3 / UCSC / Ensembl)

What it is

Chroma is a browser-based genome viewer aimed at being a faster, more keyboard-friendly alternative to IGV.js. The whole render path is WebGL2 (hand-written, no Three/Pixi); state lives in Solid.js signals; parsing runs in a Comlink-managed worker pool.

I've been driving the whole project through Claude Code — solo dev plus agents — and after ~50 commits, I've hit the wall on knowing what to ask it to build next, hence this post.

What works today

  • 5 demo tracks:
    • hg19 reference FASTA (IGV/Broad mirror)
    • Ensembl gene annotations
    • UCSC phyloP100way conservation BigWig
    • HG00096 1000G BAM
    • HG002 GIAB 300× BAM (hidden by default — too slow to load for the default boot)
  • Two-level navigator:
    • top bar = whole chromosome with Mb-scale ticks (click to jump, drag to pan, drag empty to drag-create)
    • bottom bar = local context with drag-create / move / edge-resize / Esc-cancel
  • Reference renderer with two modes:
    • colored 1-bp quads at any zoom
    • actual A/C/G/T/N letters via a Canvas2D-baked atlas when basePixelWidth ≥ 12 px
  • Gene name labels rendered on a Canvas2D overlay, shrink-wrapped with ellipses at narrow blocks, strand-aware alignment (5' anchors to the leading edge)
  • Single-fetch viewport mode at pileup tier (≤50 kb spans): one HTTP Range per nav instead of N tile fetches — 6× speedup on the 1-track B1 cold load (4.7 s → 774 ms)
  • Sticky URL → worker dispatch (FNV-1a hash on the file URL) so the per-worker u/gmod parser caches (BAI 8.7 MB) actually get reused instead of scatter-loaded N times
  • 64-bit bigint coordinates throughout, with a single sanctioned conversion to Float32 for shader uniforms
  • 60 fps pan / zoom on a 1 Mb BAM viewport, p95 fps locked
  • 250 unit tests, TypeScript strict + noUncheckedIndexedAccess, ~88 kB main JS gzipped

Tech stack

  • Solid.js for the reactive shell (picked over React for fine-grained signals + smaller bundle — the eventual goal is clinical-report embed)
  • WebGL2 hand-written, instanced rectangles for everything geometric; Canvas2D overlay only for text labels
  • u/gmod**/{bam, bbi, indexedfasta}** for the format parsers
  • u/chenglou**/pretext** for unicode-correct text measurement and shrink-wrap on the label overlay
  • Comlink worker pool + Cache API for HTTP range coalescing
  • Vite + pnpm + Vitest

Honest gaps (what's still broken/missing)

  • B1 cold gate target is 300 ms, currently ~3 s for the default 5-track demo — dominated by one-time BAI parse (~3.7 s for HG00096, ~6.6 s for the 300×). Needs either a streamed BAI parse or a cap-at-N read fetch in the worker.
  • No CIGAR support — reads render as plain rectangles, no insertions/deletions/mismatches shown
  • No VCF track (parser stubbed)
  • No hover/select tooltip yet
  • Pileup row collisions across tile boundaries are accepted (cross-tile merge is a carry-forward)
  • HG002 300× BAM works but takes ~10 s on first nav — that's why it's visible: false in the default seed

What I'm asking the community for

1. Hit it in your browser and try to break it.

Bug reports welcome — please include the locus/zoom level when reporting.

2. Prompt suggestions for what I should build next.

I've been stuck between these and would love opinions:

  • VCF track (parser stubbed already)
  • CIGAR-aware read rendering with mismatch coloring
  • Per-base read sequence letters at deep zoom (would need to extend the SoA ReadTile with packed SEQ)
  • Splitview (two viewports side-by-side, IGV style)
  • Click-to-pin tooltip with full feature info
  • Cap-at-N read fetch for high-coverage BAM (so the 300× track stops being a footgun)
  • Label color is reactive to the dark theme
  • BED track for arbitrary user regions

Thanks in advance for any feedback.

u/Low-Desk-4290 — 5 days ago

I made a Chinese guide site for Fatal Frame II: Crimson Butterfly Remake (零 ~红蝶~ REMAKE 中文全流程攻略索引:章节路线、收集、Boss 与射影机)

Hi everyone,

I made a Chinese guide site for Fatal Frame II: Crimson Butterfly Remake:

https://crimsonbutterflyzero.com

It is an unofficial fan-made guide project mainly for Chinese-speaking players, but I wanted to share it here in case it is useful to anyone playing with Chinese resources or helping Chinese-speaking friends.

The site currently includes:

  • Full walkthrough index by chapter
  • Separate route pages for each chapter
  • Endings and New Game Plus unlocks
  • Camera Obscura mechanics, Fatal Frame / Fatal Time, Shutter Chance and enemy behavior notes
  • Combat ghost index
  • Floating ghost and bound ghost photo checklist
  • Twin doll collectible guide
  • Spirit beads, Blood Cleansing, Type-Zero Film and spirit stone collection pages
  • DLC, demo save transfer and platform/version notes

I recently did a large update to the site: the collectibles database is now split into cleaner sections, and many pages have image-based tables so players can check locations more easily while playing.

The site is still being updated as more player notes and corrections come in. If you notice any mistakes or have better information, feedback is very welcome.

This is not an official site. Game title, trademarks and official assets belong to KOEI TECMO.

Hope it helps some Chinese-speaking Fatal Frame fans.
Thanks!

steamcommunity.com
u/Low-Desk-4290 — 6 days ago
▲ 14 r/comfyui

One-click workflow JSON extraction from any ComfyUI PNG (local, no upload)

Drag a ComfyUI-generated PNG into the page, and you get:

- The executable prompt graph parsed into a flat summary (model, sampler, seed, positive/negative prompt, LoRAs)
- A one-click download of the original workflow JSON, ready to drop back into ComfyUI

Everything runs in your browser. The PNG never leaves your machine.
Live: https://ai-metadata-viewer-theta.vercel.app/en/comfyui-workflow-extractor
Source: https://github.com/GChenSi-2/ai-metadata-viewer

Caveats:
- It only knows the standard nodes (KSampler, CheckpointLoaderSimple, CLIPTextEncode, LoraLoader, EmptyLatentImage / EmptySD3LatentImage). Custom nodes won't have their inputs surfaced in the flat summary, but the workflow JSON download still works because that's just the raw chunk.

- If your image went through Discord / Twitter, the tEXt chunk is almost certainly stripped — true for any PNG info tool, not specific to this one.

Why I made it: I had a workflow I actually liked, but after a refactor, I lost the canvas state. The PNG still had the workflow embedded, but every tool I tried either dumped raw JSON in my face or made me upload the file. I wanted "drag in, get JSON out, done."

MIT licensed. The only analytics is an anonymous "workflow_downloaded" / "image_parsed" event with the platform name — no prompt text, no node contents, no filenames. PRs and issues welcome, especially if you have a custom-node workflow that doesn't parse cleanly — attaching the PNG to a GitHub issue is the fastest way for me to fix it.

u/Low-Desk-4290 — 10 days ago