Commit Graph
218 Commits
Author SHA1 Message Date
Miguel Ángel ed87fd57ec chore: release v0.6.0-alpha.4 2026-05-09 20:07:00 +00:00
Miguel Ángel 4730f1db4b chore: merge next into feat/studio-inspector-selection-ux 2026-05-09 20:06:25 +00:00
Miguel ÁngelandClaude Opus 4.6 45adf4805f fix(studio): prevent read-only property crash in manual edit wrappers
The seek/play/applyAfter wrapper functions in manualEdits.ts crashed
with "Cannot set property X which has only a getter" when the player
or timeline objects define seek/play as getter-only properties. This
prevented ALL manual edits (position, rotation, size) from persisting
to disk — the error thrown during applyCurrentStudioManualEditsToPreview
aborted the save queue.

Wrapped all three property assignments in try/catch so wrapping
gracefully degrades when the target object is non-configurable.

Verified: position edit (X=42px) now persists to
.hyperframes/studio-manual-edits.json and survives page refresh.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-09 20:01:43 +00:00
Miguel ÁngelandClaude Opus 4.6 75bc3b4925 fix(studio): revert motion panel default to false
Motion panel stays opt-in via env var per product direction. Only
the Design panel is enabled by default.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-09 19:44:52 +00:00
Miguel ÁngelandClaude Opus 4.6 c5dd7cae39 fix(studio): prevent browser launch timeout from crashing dev server
The shared Puppeteer browser pool in getSharedBrowser() could throw a
30s TimeoutError during launch. This error propagated as an uncaught
rejection and killed the vite process, even though generateThumbnail
had its own try/catch — the browser launch promise rejected outside
that scope. Now getSharedBrowser itself catches launch failures and
returns null, so thumbnails degrade gracefully instead of crashing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-09 18:45:11 +00:00
Miguel ÁngelandClaude Opus 4.6 f3e2caf687 fix(studio): stale selection, rotation control, design panel polish
Fixes and improvements based on power-user testing feedback:

1. Fix stale selection after style edits — handleDomStyleCommit now
   calls refreshDomEditSelectionFromPreview after persisting, matching
   every other commit handler. Without this, the PropertyPanel showed
   frozen computedStyles after color/radius/shadow edits, making it
   look like editing "didn't work." Also adds error handling around
   the persist call.

2. Add rotation field to the Design panel Layout section — reads the
   current rotation angle from the manual edit manifest and commits
   via the existing handleDomRotationCommit handler.

3. Enable motion panel by default — STUDIO_MOTION_PANEL_ENABLED now
   defaults to true so the Motion tab is discoverable without env vars.

4. Color controls only when element has color — fill color section now
   only shows when the element has an explicit non-transparent
   background-color. Text color shows only when the element has a
   color style. Prevents showing color pickers on elements where
   color edits have no visible effect.

5. Exclude canvas from selection — added "canvas" to
   DOM_LAYER_IGNORED_TAGS so canvas elements are not selectable in the
   preview or listed in the layer panel.

6. Multi-selection feedback — shows "N elements selected" with
   guidance instead of the generic empty state when multiple elements
   are selected.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-09 18:41:58 +00:00
Miguel ÁngelandClaude Opus 4.6 1e0ca35fd6 fix(studio): thumbnail crash, feature defaults, multi-select UX, fps selector
Power-user audit fixes for the alpha studio:

- vite.config.ts: wrap thumbnail generation in try/catch so Puppeteer
  TimeoutError doesn't crash the entire vite dev server as an uncaught
  rejection. Close the page on error to prevent browser session leaks.

- manualEditingAvailability.ts: enable motion panel and manual canvas
  drag editing by default (were both false, undiscoverable without
  knowing the env vars).

- PropertyPanel.tsx: show "N elements selected" feedback when multiple
  elements are selected instead of the generic "Select an element"
  empty state.

- RenderQueue.tsx + App.tsx: add FPS selector (24/30/60) to the render
  export bar instead of hardcoding 30fps. Pass the user's choice
  through to startRender.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-09 18:08:45 +00:00
Miguel Ángel d34a5ed2cf fix(studio): handle raster inspector clicks 2026-05-09 02:24:35 -07:00
Miguel Ángel de876a4fcc fix(studio): keep notion preview playback moving 2026-05-09 00:34:43 -07:00
Miguel Ángel 5ddf0285f5 feat(studio): simplify inspector selection ux 2026-05-08 21:40:12 -07:00
Miguel Ángel 1781f6bf1f chore: release v0.6.0-alpha.3 2026-05-09 02:56:37 +00:00
Miguel Ángel c29c159a1e chore: merge main into next 2026-05-09 02:56:24 +00:00
Miguel Ángel e47dad0dbf Merge pull request #687 from heygen-com/feat/studio-shader-loading-state
feat: show composition loading in Studio
2026-05-09 04:51:02 +02:00
Miguel Ángel ef79a2b14d feat: disable Studio timeline while composition loads 2026-05-08 19:40:49 -07:00
Miguel Ángel ba29781c56 feat: auto-open timeline clip layers 2026-05-08 18:23:49 -07:00
Miguel Ángel 48341aa776 feat: show composition loading in studio 2026-05-08 17:59:50 -07:00
Miguel Ángel c2738364aa chore: release v0.6.0-alpha.2 2026-05-08 17:34:24 -07:00
Miguel Ángel 7c9648a143 fix(studio): keep motion panel opt-in 2026-05-08 17:30:21 -07:00
Miguel Ángel 6eee626980 feat(studio): enable inspector panels by default 2026-05-08 17:27:08 -07:00
Miguel Ángel d6db60c26a chore: release v0.6.0-alpha.1 2026-05-08 16:37:50 -07:00
Miguel Ángel e51c11c6f9 feat(studio): add alpha editor layer inspector 2026-05-08 23:24:25 +00:00
Miguel ÁngelandClaude Opus 4.6 ae343bfdc8 chore: release v0.5.5
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-08 15:00:29 +00:00
Miguel Ángel 8de7ad7f61 chore: release v0.5.4 2026-05-07 23:22:15 -07:00
James 2b2281d490 refactor: dedupe resolution presets and clean up 4k stack 2026-05-07 16:58:26 +00:00
James bc02b8810c fix(studio): exhaustively type RESOLUTION_OPTIONS and document layout coupling 2026-05-07 16:58:26 +00:00
James 0c026bb0f6 fix(studio): forward outputResolution from vite dev adapter to producer 2026-05-07 16:58:26 +00:00
James 25edba803a feat(studio): add resolution selector to render export bar 2026-05-07 16:58:26 +00:00
Miguel Ángel aa524f43c9 chore: release v0.5.3 2026-05-06 11:45:59 -07:00
Miguel Ángel 7174c4cdcd chore: release v0.5.2 2026-05-06 10:27:07 -07:00
Miguel Ángel 64f3a4ed5f chore: release v0.5.1 2026-05-06 10:14:00 -07:00
James 94b8acf3b0 chore: release v0.5.0 2026-05-06 16:12:18 +00:00
Vance Ingalls a7b308b667 feat: cache shader transition preview frames (#634)
* feat: cache shader transition preview frames

* fix: move shader transition loading to player
2026-05-06 01:25:09 -07:00
Rames JussoandClaude Opus 4.7 dfca302d37 fix(bundler): runtime mode opt-in, ASI-safe joinJsChunks, prune dead subs
Per @vai-bot's review on hf#641:

Important #1: dead `src=""` substitution sites
=============================================

Now that `bundleToSingleHtml` inlines the runtime IIFE by default, the empty
`src=""` placeholder is never emitted in the no-env-var path — the 5 downstream
substitution sites that grep for `src=""` were dead.

Two of them (studio dev server + studio vite preview) genuinely WANT the
placeholder so they can hot-reload a local /api/runtime.js endpoint without
re-inlining ~150 KB on every composition edit. Three of them (CLI validate,
snapshot, layout) were just doing the same inlining the bundler already does.

Resolution:
- Add a `runtime: "inline" | "placeholder"` option to `BundleOptions`. Default
  is "inline" (matches the self-contained-bundle promise the function name
  makes). The two studio surfaces explicitly pass `{ runtime: "placeholder" }`
  to opt in.
- studioServer.ts + studio/vite.config.ts: pass the option, keep their
  existing string-replace logic unchanged.
- validate.ts + snapshot.ts + layout.ts: delete the now-redundant runtime
  substitution code (regex never matches the new inlined-runtime shape).

Important #2: joinJsChunks ASI hazard
======================================

The new helper appended `;` to chunks not already ending in `;` and joined
on `\n`. If a chunk ended with a `// line comment`, the appended semicolon
was eaten by the comment, leaving the next chunk's first statement attached
to the previous chunk's last expression — exactly the ASI hazard the helper
exists to prevent.

Fix: append `\n;` instead of `;` for chunks not already terminated. The
newline closes the line comment, the standalone `;` becomes the statement
separator. For typical chunks (already ending in `;`), output is unchanged
— still clean `\n`-joined chunks with no bare-semicolon lines.

Also added a trailing `;` to `wrapScopedCompositionScript`'s IIFE close
(`})()` → `})();`) so composition scripts join cleanly without falling
through to the `\n;` fallback.

New test: regression guard at the chunk boundary verifies every inline
script body in the bundle parses cleanly via esbuild even when a source JS
file ends with a line comment.

Verification
============

- `bun run --filter @hyperframes/core test` — 653/653 pass
- `bun run --filter @hyperframes/cli test` — 243/243 pass
- `bun run --filter @hyperframes/{core,cli,studio} typecheck` — clean
- `bunx oxfmt --check` + `bunx oxlint` on all touched files — clean

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-06 04:37:04 +00:00
James 584627546a chore: release v0.4.45 2026-05-05 04:41:23 +00:00
Miguel Ángel 17a0d1d8aa chore: release v0.5.0-alpha.15 2026-05-04 14:48:10 -07:00
Vance Ingalls 296d3d1980 fix: share manual edit render runtime 2026-05-04 14:46:05 -07:00
Vance Ingalls 7cc2067c71 fix: harden manual edit refresh apply 2026-05-04 14:44:31 -07:00
Vance Ingalls 381d00fe14 fix: persist manual preview edits on refresh 2026-05-04 14:44:31 -07:00
Vance Ingalls e3158c2388 fix: commit drag offsets from gesture math 2026-05-04 14:44:31 -07:00
Vance Ingalls 74df11cc0c fix: apply nested manual edits in drilled previews 2026-05-04 14:44:31 -07:00
Vance Ingalls ec4ed0bcbc fix: address studio manual edit review feedback 2026-05-04 14:44:31 -07:00
Vance Ingalls 2e11dd9a4f fix: harden studio group overlay events 2026-05-04 14:44:31 -07:00
Vance Ingalls 31a45065cc fix: select studio groups on pointerdown 2026-05-04 14:44:31 -07:00
Vance Ingalls 7f275f76f9 fix: seed additive studio selection groups 2026-05-04 14:44:30 -07:00
Vance Ingalls fa501b4830 fix: preserve studio group selections 2026-05-04 14:44:30 -07:00
Vance Ingalls e2b2885a03 feat: add studio group repositioning 2026-05-04 14:44:30 -07:00
Vance Ingalls 62b83a0e2b fix(studio): route inspector geometry through manual edits 2026-05-04 14:44:30 -07:00
Vance Ingalls d17288fc70 feat(studio): reset selected manual edits 2026-05-04 14:44:30 -07:00
Vance Ingalls d76d067f2e fix(studio): connect rotate handle line to selection 2026-05-04 14:44:30 -07:00
Vance Ingalls 259824e94f fix(studio): match rotate handle size to resize handle 2026-05-04 14:44:30 -07:00