Skip to content
View ttomohisa's full-sized avatar

Block or report ttomohisa

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
ttomohisa/README.md

Hi, I'm Tomohisa πŸ‘‹

I work in cloud architecture and data engineering, mainly with Azure and Databricks.

Outside of that, I build practical browser tools and experiment with how far the browser can go as a local application runtime.

Many of my projects are distributed as a single self-contained HTML file. Files, images, videos, databases, camera frames, sensor readings, and other user data are processed locally whenever possible, without requiring an application backend.

I'm also interested in using HTML not only as a web page, but as a portable application and container format β€” a file that can carry both content and the specialized viewer needed to work with it.

🌐 Browser Kitty β€” a growing collection of my browser-based tools.

🐱 Browser tools

Depending on the problem, these projects use browser-native APIs, WebAssembly, Web Workers, WebCodecs, Canvas, Web Audio, cameras, microphones, sensors, WebRTC, SQLite, DuckDB, FFmpeg, OpenCV, and on-device machine learning.

Most recent projects share a few principles:

  • Local-first processing
  • Single-HTML distribution
  • No account required
  • Minimal runtime network access
  • Japanese / English UI
  • Desktop and smartphone UX where appropriate
  • Pinned dependencies and reproducible builds
  • Automated verification and real-browser testing where practical

πŸ“„ Documents, images & publishing

Project What it does
OneFile Album Package images, chapters, comments, and a responsive viewer into one portable HTML album that can later be reopened and edited.
Submission PDF Scanner Turn photos of paper documents into submission-ready PDFs with perspective correction, page organization, A4/B&W presets, and file-size targets.
PDF Organizer Reorder, rotate, remove, merge, preview, and export PDF pages locally in the browser.
PDF Compare Compare two PDF revisions and review inserted, removed, visual, and text differences.
PPTX Diff Compare two PowerPoint files with slide matching, semantic change detection, and high-fidelity visual comparison.
Max Text Print Fit text to the largest practical size on A4, split it across sheets when needed, and print directly from the browser.
Image Compressor & Converter Compress, resize, convert, compare, and export PNG, JPEG, and WebP images, including batch and target-size workflows.
Image Counter Manually count objects in photos with point or rectangle markers and export annotated results or a portable HTML viewer.
Smart Image Sorter Sort batches of images into predefined categories with local TinyCLIP-based AI and review uncertain results before export.
Face Redactor Detect faces locally and hide them with pixelation, blur, fills, eye bars, emoji, or custom images.
Photo Privacy Inspector Inspect GPS, timestamps, device information, creator fields, and other hidden photo metadata before sharing an image.
Same Spot Diff Align Before / After photos taken from slightly different positions and highlight the places that actually changed.
Photo Re-Enactor Recreate an earlier photo composition using a live-camera reference overlay and compare the resulting Before / After images.
Handwriting Font Maker Draw characters directly in the browser and turn the vector strokes into a downloadable TrueType font.
Office Image Extractor Extract embedded images from Word, Excel, and PowerPoint files in bulk.
Image to WebP / Base64 Convert images to WebP and generate Base64 data URIs.

🎬 Video, audio & presentations

Project What it does
Local Video Compressor Compress video locally with purpose-built FFmpeg WebAssembly, including H.264/AAC MP4 and VP9/Opus WebM workflows.
Lossless Video Cutter Cut video without re-encoding by remuxing the original compressed streams in the browser.
Video Speed Changer Change video speed from 0.25Γ— to 4Γ—, control audio behavior, preview the result, and export MP4 locally.
Video Face Redactor Detect faces in videos locally, review masks frame by frame, and export a redacted H.264 MP4.
Media Inspector Inspect containers, codecs, bitrate, FPS, HDR/color information, audio, subtitles, chapters, rotation, and metadata.
Video Contact Sheet Sample frames across an entire video and combine them into one zoomable PNG/JPEG overview image.
Video to GIF / WebP Trim and crop a video and convert the selected range into an animated GIF or WebP.
One Second Montage Turn mixed photos and videos into an MP4 montage using one second from each item, with optional music and year dividers.
Audio Cutter & Joiner Trim, split, reorder, join, preview, and export multiple audio clips locally.
Presentation Remote Open a local PPTX or PDF on a computer and control it from a phone over direct WebRTC, including Presenter View.
Presentation Video Maker Turn a PPTX deck into a narrated MP4 using speaker notes, local speech, recordings, audio files, subtitles, and BGM.
Gesture Presentation Present PDFs or images and move between pages with local hand-gesture recognition or a direct WebRTC phone remote.
FFmpeg Filter Builder Build FFmpeg video/audio/text filter graphs as editable nodes, preview them locally, render video, and generate desktop FFmpeg commands.
Music Practice Kit Combine a tuner, metronome, TAP BPM, drone tone, practice timer, recorder, and spectrum analyzer in one app.

πŸ—ƒοΈ Data, databases & developer tools

Project What it does
SQLite Explorer Explore SQLite databases with table browsing, schema and relationship views, profiling, read-only SQL, and query-plan analysis.
Database Explorer for DuckDB Explore local DuckDB databases with schema inspection, paged data, column profiling, guarded SQL, data dictionaries, and structural comparison.
JSON / YAML / CSV Viewer Inspect, search, profile, check, and convert JSON, YAML, CSV, TSV, and JSON Lines locally.
JSONL Viewer Inspect JSONL / NDJSON files, find malformed lines, review field/type consistency, and page through records without materializing everything.
HTML Parquet Viewer Inspect Parquet schemas and browse data as a table without uploading the file.
ORC Viewer Inspect Apache ORC schema, stripes, statistics, metadata, compression, and paged data.
Arrow Viewer Inspect Apache Arrow IPC File / Stream schema, metadata, record batches, dictionaries, and paged data.
Avro Viewer Inspect Avro Object Container Files, including schema, metadata, block layout, logical types, codecs, and records.
DBF Viewer Inspect DBF structures and records, switch legacy text encodings, and read DBT/FPT memo data.
Archive Explorer Explore, preview, analyze, and extract files from ZIP, 7z, RAR5, TAR, GZIP, CAB, ISO, and LZH/LHA archives.
Schema Diff Compare schemas across Parquet, CSV, TSV, JSONL, and NDJSON files and flag potentially breaking changes.
Test Data Generator Generate reproducible normal, missing, boundary, and invalid test data at large scale from a configurable schema and seed.
Developer Toolbox / original repo Put Base64, JSON, JWT, cron, regex, hashes, timestamps, text conversion, and dozens of developer utilities into one HTML file.
Engineering Calculator Provide mechanical, manufacturing, fluid, thermal, electrical, tolerance, and unit-conversion calculations with parameter sweeps and graphing.
Text Inspector Go beyond character counting with composition analysis, frequent words, long-sentence detection, writing checks, and an X-Ray view.
Markdown Preview Lab Write Markdown locally and compare GitHub-, Qiita-, and Zenn-inspired previews and compatibility hints.
Handy Convert Handle everyday date differences, date arithmetic, time zones, Japanese eras, kana conversion, and full-/half-width text conversion.
Temporary Links Keep a disposable local work queue of web links, file:/// URLs, Windows paths, and UNC paths.

πŸ“± Device, field & everyday utilities

Project What it does
Wireless Sensor Connect up to four smartphones as synchronized wireless motion sensors over direct WebRTC, with FFT, impact timing, experiments, and reports.
Device Check Check camera, microphone, speakers, display, keyboard, pointer/touch input, gamepads, and motion sensors in one place.
QR Reader Scan QR codes from a live camera or existing images, with smartphone-first controls and local history.
Wi-Fi Share Share Wi-Fi details by QR code and related methods, create an A4 Wi-Fi sign, and optionally write NFC tags on supported devices.
Pocket Level Turn a smartphone into a spirit level / inclinometer with zeroing, hold, averaging, and two-point calibration.
Way Back Save a location and find your way back using a direction arrow and straight-line distance without requiring a map.
Pocket Teleprompter Use a phone as an installation-free teleprompter with automatic scrolling and local script saving.
Signal Screen Turn a phone or computer display into a highly visible sign using large text, arrows, colors, and QR codes.
Tap Counter A smartphone-friendly tally counter for people, inventory, laps, repetitions, and multiple categories.
Pomodoro Timer A local-first focus timer with Picture-in-Picture, distraction counting, flow overtime, and local session history.

βœ… Workflow, events & group tools

Project What it does
Check-in Desk Maintain a reusable roster, run check-in or entry/exit sessions, review attendance history, and export CSV/JSON locally.
Pop-up Face Check-in Run temporary event reception with local face matching, manual fallback, attendance history, and encrypted portable registration files.
Pass-the-Phone Vote Pass one phone around a group for private voting and reveal only aggregate results after everyone has voted.
Task Packing Give tasks a physical size and fit only what actually fits onto a finite-capacity visual board.
Restock List Manage recurring household purchases with simple In stock / Low / Out states that automatically build the shopping list.
Random Picker Pick candidates, randomize order, create balanced teams, or run an animated wheel from a simple list.

πŸ§ͺ Experiments

Project What it does
Optical File Turn a small file into an Animated QR WebP and reconstruct it by camera scanning or direct WebP decoding.
Jargon Bingo Create customizable offline meeting-jargon bingo cards, including a floating Document Picture-in-Picture mode.
Mine Window Play Minesweeper in a normal page or floating Document Picture-in-Picture window.

🧩 WebAssembly & build infrastructure

The applications are only one side of the work.

I'm also building infrastructure to compile native software for browsers, reduce WebAssembly runtimes for specific applications, verify the resulting binaries, and distribute them reproducibly.

Project What it does
Single HTML App Template A reusable repository template for building, verifying, packaging, and publishing self-contained browser applications.
FFmpeg WASM Builder Build application-specific FFmpeg WebAssembly cores from pinned sources, including video compression, cutting, inspection, speed changes, animation export, and filter-graph processing.
OpenCV WASM Builder Compose logical OpenCV components into purpose-specific OpenCV.js / WASM profiles for browser applications.
DuckDB WASM Builder Build and validate pinned DuckDB-Wasm bundles tailored to DuckDB Explorer while measuring size reductions against upstream-equivalent builds.
WASM Zoo Build and distribute current upstream native software for WebAssembly with reproducible recipes, browser smoke tests, capability metadata, checksums, provenance, SBOMs, corresponding source, and npm packages.

Purpose-specific WASM

For application runtimes, I prefer to include only the native functionality the tool actually needs.

FFmpeg WASM Builder currently covers profiles for:

  • Video compression
  • Video speed changes
  • Lossless cutting
  • Media inspection
  • Video contact sheets
  • Animated GIF / WebP generation
  • Visual FFmpeg filter graphs

Most profiles are deliberately single-threaded so they remain usable in ordinary single-HTML applications without requiring SharedArrayBuffer or cross-origin isolation. The Filter Builder also has a multi-thread variant for environments where cross-origin isolation is available.

OpenCV WASM Builder follows a component model around capabilities such as image processing, feature matching, geometry, calibration, optical flow, markers, face processing, and stitching.

DuckDB WASM Builder keeps the DuckDB browser runtime internally consistent by producing the JavaScript wrapper, Worker, and WASM from the same pinned source build rather than swapping a WASM binary in isolation.

WASM Zoo

WASM Zoo takes the opposite approach.

Purpose-specific builders intentionally remove unnecessary functionality. WASM Zoo instead aims to preserve a broad, recognizable upstream program/API shape when a reusable distribution is more useful.

Current package families include:

Package Distribution focus
FFmpeg Broad browser FFmpeg CLI builds
libarchive bsdtar, bsdcpio, bsdcat, and bsdunzip
ImageMagick Browser build of the upstream magick CLI
libvips Browser-oriented libvips builds
Ghostscript Browser build for PostScript/PDF processing
jq Browser build of the jq command-line JSON processor

All six package families are also being distributed through the @wasm-zoo npm scope.

A Zoo package is expected to provide more than a .wasm binary:

  • Exact upstream source and toolchain revisions
  • Reproducible build scripts
  • Real browser runtime smoke tests
  • Machine-readable manifests and capability information
  • Upstream freshness tracking
  • Release-health monitoring
  • SHA-256 checksums
  • License notices
  • Corresponding source archives
  • in-toto / SLSA provenance
  • CycloneDX SBOMs
  • Interactive browser playgrounds

πŸ’‘ Development approach

  • Local-first processing Keep user-selected files, media, database contents, camera frames, sensor readings, and application data on the device whenever the browser platform allows it.

  • Self-contained delivery Prefer downloadable artifacts that remain useful independently of a permanently hosted application stack.

  • HTML can be more than a page A single HTML file can act as an application, viewer, report, album, or specialized container carrying both content and the software needed to inspect it.

  • Use the browser as an application runtime Take advantage of WebAssembly, Web Workers, WebCodecs, File APIs, Canvas, IndexedDB, Web Audio, camera / microphone / sensor APIs, WebRTC, Document Picture-in-Picture, and other browser capabilities when they provide practical value.

  • Build locally useful AI Small vision and recognition models can be useful when they solve a focused task without requiring image or video uploads.

  • Build small when the application needs small For video, database, and computer-vision tools, purpose-built WebAssembly can reduce unnecessary runtime code and dependencies.

  • Preserve upstream shape when generality matters Projects such as WASM Zoo deliberately take the opposite approach and expose broad upstream functionality when a reusable distribution is more useful.

  • Reproducible builds Pin third-party versions and source revisions, publish corresponding source where appropriate, and record hashes and licensing information.

  • Minimal runtime network use Avoid runtime CDNs, remote APIs, analytics, telemetry, and cloud processing where practical.

  • Test the real runtime Compilation is not enough for WebAssembly. Build pipelines should exercise meaningful functionality in an actual browser.

  • Simple maintenance Favor readable source, Windows-friendly PowerShell / .bat workflows, automated checks, and GitHub Pages deployment.

πŸ›  Skills & interests

  • Cloud & data engineering: Azure, Databricks, Parquet, ORC, Arrow, Avro, DuckDB, SQLite
  • Browser applications: HTML, CSS, JavaScript, WebAssembly, Web Workers, WebCodecs
  • Local processing: PDFs, Office files, images, video, audio, archives, databases, structured data
  • Computer vision & local AI: OpenCV, ONNX Runtime Web, YuNet, SFace, TinyCLIP
  • Browser APIs: File APIs, Canvas, Web Audio, Media Capture, sensors, WebRTC, IndexedDB, Picture-in-Picture
  • WebAssembly: FFmpeg, OpenCV, DuckDB, Emscripten, libarchive, ImageMagick, libvips, Ghostscript, jq
  • Build & automation: PowerShell, Docker, GitHub Actions, GitHub Pages, reproducible builds, browser smoke testing

πŸ“« Contact

Bug reports, feature ideas, and pull requests are welcome in the relevant repository.

Popular repositories Loading

  1. html-parquet-viewer html-parquet-viewer Public

    A self-contained, offline Parquet file viewer delivered as one HTML file.

    HTML 1

  2. image-to-webp-base64 image-to-webp-base64 Public

    HTML

  3. htmlapps-office-image-extractor htmlapps-office-image-extractor Public

    Extract original images from Word, Excel, and PowerPoint files directly in your browser β€” no uploads required.

    HTML

  4. ttomohisa ttomohisa Public

  5. htmlapps-temporary-links htmlapps-temporary-links Public

    Keep short-lived web links and local file paths in a lightweight temporary work queue.

    HTML

  6. htmlapps-jargon-bingo htmlapps-jargon-bingo Public

    Turn meeting buzzwords into a floating, always-on-top bingo game β€” private, offline, and slightly unnecessary.

    HTML