Commit Graph

42 Commits

Author SHA1 Message Date
Xiaohan-Tian 247c76237d feat: implement scale-of-fifth based key signature picker 2026-05-23 13:36:59 -07:00
Xiaohan-Tian 4cf474be7e feat: added split notes function 2026-05-18 19:00:21 -07:00
Xiaohan-Tian d10965066f feat: added shortcut for split and merge regions 2026-05-18 18:39:42 -07:00
Xiaohan-Tian 892e154a0f fix: minor UI adjustments 2026-05-14 22:35:04 -07:00
Xiaohan-Tian 64dda5bb01 fix: few minor UI and behavior adjustments 2026-05-11 23:23:11 -07:00
Xiaohan-Tian d32dc35b6d feat: added local separator implementation 2026-05-11 22:27:22 -07:00
Xiaohan-Tian 8fa2c16395 feat: added save as option when renaming the project 2026-05-10 13:25:12 -07:00
Xiaohan-Tian 894c3b116f feat: added track level event list tab; rename List Event to Event List. 2026-05-09 17:10:03 -07:00
Xiaohan-Tian 490cd19f68 feat: added audio recording feature 2026-05-09 15:57:46 -07:00
Xiaohan-Tian eead27dbd8 fix: misc UI updates and fixes 2026-05-07 23:54:08 -07:00
Xiaohan-Tian 738628fc76 feat: added pitch bend automation (linear interpolation) 2026-05-06 18:25:14 -07:00
Xiaohan-Tian 3743f9cab2 feat: added v1 read-only version list event panel 2026-05-05 17:17:08 -07:00
Xiaohan-Tian 6928416f78 fix: show loading spinner instead of hanging in open project dialog when user click open button 2026-05-04 21:44:25 -07:00
Xiaohan-Tian 213a4ee552 feat: added a warning pop-up when openning projects. 2026-05-04 20:17:05 -07:00
Xiaohan-Tian 066946ea64 feat: added merge MIDI regions feature 2026-05-04 18:58:51 -07:00
Xiaohan-Tian 6d952b5b0b feat: allow user to multi-select regions. 2026-05-04 17:59:35 -07:00
Xiaohan-Tian bc7db712aa feat: updated toolbar button style 2026-05-04 17:27:31 -07:00
Xiaohan-Tian 769d70ccb4 fix: "back to beginning" button should also shift viewport to the beginning of the song 2026-05-04 17:02:39 -07:00
Xiaohan-Tian 7a6e7558ce fix: pause button while recording should stop recoding 2026-05-02 23:02:37 -07:00
Xiaohan-Tian cd90dc1c99 fix: linter errors 2026-05-01 14:36:56 -07:00
Xiaohan-Tian 77885c8e2e feat: added recording MIDI device feature. 2026-05-01 10:59:36 -07:00
Xiaohan-Tian 778c0236b6 fix: added a special treatment for time signature input; fixed text selection in pop-up and release the mouse outside the pop-up will close the pop-up issue. 2026-04-20 00:02:47 -07:00
Xiaohan-Tian 1828dbbc63 feat: replace browser built-in alert/confirm/prompt pop-up with new DialogProvider 2026-04-19 23:54:26 -07:00
Xiaohan-Tian 0ac39068b2 feat: added metronome feature 2026-04-19 17:00:10 -07:00
Xiaohan-Tian ebcebb5d3b feat: added split region feature 2026-04-16 22:36:31 -07:00
Xiaohan-Tian 24ffaa76f6 fix: reserve Untitled Project name; rename project will trigger save immidiatly. 2026-04-16 20:24:43 -07:00
Xiaohan-Tian cadd51c3a4 feat: integrate K.G.One music generation panel
- ConfigManager: add `general.kgone` config block (enabled toggle +
base URL); add `setKGOneManagedByServer()` / `isKGOneServerManaged()`
for managed deployments that supply a `kgone-server.txt` override
- App.tsx: probe for `kgone-server.txt` on startup (Content-Type guard
to avoid Vite SPA fallback false-positive)
- GeneralSettings: new K.G.One section with enable toggle + base URL
input; fields disabled when server-managed
- Toolbar: magic wand button (FaWandMagicSparkles) that toggles the
panel; disabled with reduced opacity when K.G.One is turned off;
mutually exclusive with the Chat panel
- projectStore: add `showKGOnePanel` state + `toggleKGOnePanel` action
- KGOnePanel (new): three-tab panel (Clip / Full Song / Separator)
- Clip: prompt + advanced params → POST /v1/clip/generate → poll
    /v1/clip/result → download WAV → AudioPlayer preview
- Full Song: caption + lyrics + advanced params → POST
    /v1/fullsong/generate → poll /v1/fullsong/result (live progress %
    from nested JSON string) → download MP3 → AudioPlayer preview
- Separator: reads selected audio region from OPFS via
    KGAudioFileStorage → POST /v1/separator/separate (multipart) →
    poll /v1/separator/result → parallel-download all stem files →
    multiple labeled AudioPlayer instances rendered vertically
- Shared: custom AudioPlayer (play/pause, clickable seek bar),
    spinner + hint text, error card, AbortController cleanup,
    DEBUG_MODE.KGONE-gated REQ/RES console logging
2026-04-15 19:51:16 -07:00
Xiaohan-Tian d16553e659 feat: added bouncing to MP3 feature 2026-04-11 12:30:15 -07:00
Xiaohan-Tian d4864426e3 feat: add bounce-to-WAV export with offline rendering via Tone.Offline 2026-04-11 12:18:30 -07:00
Xiaohan-Tian d94b53dcf5 feat: add snap-to-grid toggle for track grid regions and playhead 2026-04-10 20:57:34 -07:00
Xiaohan-Tian 139684b413 feat: add bar width multiplier (1x–8x horizontal zoom) for track grid 2026-04-10 18:17:36 -07:00
Xiaohan-Tian 1ff9bfcac4 feat: add Open Project modal with project browser, soft delete, and duplicate
Replace the prompt-based project loading with a full modal UI:
- Draggable/resizable panel with overlay and backdrop blur
- Filterable project list with incremental fuzzy matching
- Sortable columns (name, created, updated) with asc/desc toggle
- Duplicate project with auto-rename on name conflict
- Soft delete with trash view, restore, and permanent delete
- Auto-purge trash after 30 days
- Orphan media file cleanup on project open
- Skip folders without valid meta.json in project listing
2026-04-10 13:28:01 -07:00
Xiaohan-Tian 83f4bfe47f fix: missing media files when renaming + saving the project 2026-04-10 12:14:20 -07:00
Xiaohan-Tian 2d3ea33ce6 refactor: migrate project storage from IndexedDB to OPFS with folder-based structure
- Replace monolithic KGStorage with KGProjectStorage (OPFS) and KGConfigStorage (IndexedDB)
- Each project stored as folder: project.json + meta.json + media/
- Add KGConfigUpgrader with V1 upgrader to auto-migrate existing IndexedDB projects to OPFS
- Request persistent storage via navigator.storage.persist() to prevent browser eviction
- Show loading spinner during one-time migration
- Enforce safe project name characters (letters, numbers, space, hyphen, underscore, period, parens)
- Export projects as .kgstudio zip bundles instead of raw JSON
- Import supports .kgstudio bundles (with meta.json validation) and legacy JSON files
- Auto-deduplicate project names on import with (1), (2), etc. suffix
- Add OPFS shell debugger (pwd, ls, cd, cat, dl) accessible via KGDebugger.opfs()
- Add ESLint semi rule for consistent semicolons
- Delete KGStorage.ts — all logic absorbed by new storage classes
- Add jszip dependency for zip export/import
2026-04-09 19:25:08 -07:00
Xiaohan-Tian 17610f12f3 refactor: split monolithic App.css into feature-based co-located CSS files 2026-04-09 17:31:49 -07:00
Xiaohan-Tian 1c8361d45b feat: implemented playback looping; fixed an linter error in Toolbar.tsx 2026-01-23 15:34:26 -08:00
Xiaohan-Tian 78b798e138 feat: added a hotkey for loop button 2026-01-22 19:05:22 -08:00
Xiaohan-Tian b80e7e84b8 feat: implemented change loop setting command 2026-01-22 18:50:09 -08:00
Xiaohan-Tian f367c84ee8 feat: implemented UI of looping feature 2026-01-22 18:36:25 -08:00
Xiaohan-Tian 2bf5328af7 feat: added unit tests for KGMidiRegion and abcNotationUtil; update all deprecated method plainToClass to plainToInstance. 2025-09-03 23:05:13 -07:00
Xiaohan-Tian bf085dacf2 introduce BASE_URL to the app and set it to /kgstudio/. 2025-08-11 22:35:51 -07:00
Xiaohan-Tian de51967b49 initial public release. 2025-08-11 18:37:21 -07:00