- I build software and developer tools: file viewers, editors, converters and CLIs
- I work a lot with Spine skeletal animation and Live2D / VTuber models
- I make offline-first web tools that run entirely in your browser, so nothing you paste leaves your machine
- I am available for freelance work. See obayang.com for services and pricing
|
Preview, debug and export Spine 2D animations in the browser: mix lab, skins, debug overlays, atlas unpacking, PNG / sprite sheet / WebM export.
|
Hand an AI agent a few sample files and get back the format: a specification, a Kaitai Struct definition, a parser and tests, each backed by evidence.
|
|
Finds Simplified characters, Mainland terms and encoding problems in code, docs and AI agent replies. CLI, GitHub Action and agent hooks.
|
One offline tab for JSON, Regex, JWT, Diff, encoder pipelines and WebSocket debugging.
|
|
Drop in CSV, Excel, Parquet, SQLite or a MySQL / SQL Server dump and query it with SQL, offline in the browser on DuckDB-WASM.
|
Mock any API in your browser with a Service Worker, synthesize JSON Schema from samples, turn cURL into mock rules.
|
|
Open a PSD in the browser, move, scale, rotate and group its layers, save it back. Includes a rigging check for Live2D and Spine.
|
- EasyLive2D/live2d-py#149 (merged): fix a silent crash when a Live2D model's texture is missing (OpenGL backend)
- CherryHQ/cherry-studio#21954 (merged): stop CJK text files from being detected as binary
- dexie/Dexie.js#2353 (merged): ignore errors from aborted liveQuery runs after unsubscribe
- Kitware/vtk-js#3687 (merged): fix errors in the KeyboardCameraManipulator example
- holistics/dbml#1009 (merged): keep the written order of index columns when parsing
- ThatOpen/engine_components#835 (merged): type FragmentsManager.init options correctly
- ormar-orm/ormar#1865 (merged): make get() after exclude() report multiple matches
- greggman/twgl.js#246 (merged): emit declare namespace for v3, m4 and primitives in the TypeScript definitions
- pycollada/pycollada#166 (merged): drop XML comments and processing instructions when parsing COLLADA files with lxml
- dcmjs-org/dcmjs#610 (merged): format DS numbers to 16 characters instead of cutting off the exponent
- 開發軟體與開發者工具:檔案檢視器、編輯器、轉檔工具與命令列工具
- 常和 Spine 骨架動畫、Live2D/VTuber 模型打交道
- 做離線優先的網頁工具:全部在瀏覽器裡執行,貼進去的東西不會離開你的電腦
- 開放接案,服務與價格請見 obayang.com
| 專案 | 說明 |
|---|---|
| Spine Asset Inspector | 在瀏覽器檢視、除錯、匯出 Spine 動畫:混合測試、Skin 組合、除錯疊圖、圖集拆解、PNG/序列幀/WebM 匯出(線上試用) |
| hexsleuth | 讓 AI 從樣本檔推導二進位檔案格式,產出規格書、Kaitai Struct 定義、解析程式與測試(npm) |
| zhtw-guard | 找出程式碼、文件與 AI 回覆中混入的簡體字、大陸用語與編碼問題(npm) |
| Dev Workbench | 一個分頁搞定 JSON、正規表達式、JWT、文字比對、編碼轉換與 WebSocket 除錯(線上試用) |
| sqlpane | 拖進 CSV、Excel、Parquet、SQLite 或 MySQL/SQL Server 匯出檔,直接用 SQL 查詢,離線在瀏覽器執行(線上試用) |
| layerdesk | 在瀏覽器打開 PSD,拖曳、縮放、旋轉、整理圖層後存回 PSD,並檢查匯入 Live2D/Spine 前的拆件問題(線上試用) |
| Web Mock Studio | 在瀏覽器裡模擬 API、從範例反推 JSON Schema、cURL 轉模擬規則(線上試用) |
- EasyLive2D/live2d-py#149(已合併):修正 Live2D 模型缺少貼圖時無聲閃退的問題
- CherryHQ/cherry-studio#21954(已合併):修正中日韓文字檔被誤判為二進位檔的問題
- dexie/Dexie.js#2353(已合併):修正 liveQuery 取消訂閱後,被中止的查詢仍丟出錯誤
- Kitware/vtk-js#3687(已合併):修正鍵盤控制 3D 相機範例執行時報錯
- holistics/dbml#1009(已合併):修正解析資料庫索引時欄位順序被打亂
- ThatOpen/engine_components#835(已合併):修正 BIM 3D 引擎初始化參數的型別定義
- ormar-orm/ormar#1865(已合併):修正 Python ORM 用排除條件查詢時,多筆結果沒有回報錯誤
- greggman/twgl.js#246(已合併):修正 WebGL 函式庫的 TypeScript 型別定義,讓 v3、m4 等模組可以正常引用
- pycollada/pycollada#166(已合併):修正 3D 模型格式 COLLADA 檔案含註解時讀取失敗
- dcmjs-org/dcmjs#610(已合併):修正醫療影像 DICOM 檔案寫入小數時,科學記號的指數被截掉

