Skip to content

feat: note-to-html — Notability 筆記轉互動式 HTML 播放器 #64

@kiki830621

Description

@kiki830621

概述

新增 .note(Notability)→ .html 轉換路由,產出自包含的互動式 HTML 播放器,支援音檔同步手寫筆跡回放。

動機

Notability 的 .note 檔是 ZIP 格式,內含手寫筆跡(bezier curves + 時間戳)、錄音(m4a)、圖片等。目前沒有跨平台的方式回放這些筆記。將其轉為自包含 HTML,可用於:

  • 個人複習(瀏覽器直接開)
  • 教學平台嵌入(iframe)
  • Portfolio 展示(手寫動畫 timelapse)

.note 檔案結構(已驗證)

筆記.note (ZIP)
├── Session.plist          # 手寫筆跡資料(curvespoints, curvescolors, curveswidth)
│                          # + NBCPEventManager(3918 個時間同步事件)
├── metadata.plist         # 筆記 metadata
├── Recordings/
│   ├── library.plist      # 錄音 metadata(duration, identifier)
│   ├── 錄音 1.m4a         # 音檔(base64 嵌入 HTML)
│   └── ...
├── Images/
│   ├── Image .png         # 嵌入圖片
│   └── ...
├── HandwritingIndex/
│   └── index.plist        # 手寫辨識索引(搜尋用)
├── PDFs/                  # 背景 PDF(如有)
└── thumb12x.png           # 縮圖

關鍵資料結構

NBCPEventManager 包含:

  • SOATimestampsKey — 每個筆劃事件的時間戳
  • SOADurationsKey — 每個事件的持續時間
  • SOARecordingIDsKey — 事件對應的錄音 ID
  • SOAEventUUIDsKey — 事件對應的 stroke UUID
  • SOANumEventsKey — 總事件數

預期 CLI

macdoc convert --to html 筆記.note --full
macdoc convert --to html 筆記.note --full --css dark

功能範圍

  • 播放/暫停、進度條拖動
  • 播放速度(0.5x/1x/1.5x/2x)
  • 筆跡同步回放(音檔播放時筆跡跟著出現)
  • 點擊筆跡跳到對應音檔位置
  • 頁面切換
  • 縮放/平移
  • 筆跡文字搜尋(HandwritingIndex)
  • 全螢幕
  • dark/light 主題

技術方向

  • Layer 3 package: note-to-html-swift
  • 純 Swift 解析(PropertyListSerialization + ZIPFoundation)
  • 產出 Vanilla JS + Canvas 播放器(無外部依賴)
  • 所有資源 base64 內嵌

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions