Commit Graph

702 Commits

Author SHA1 Message Date
rpone 448397cc59 fix: initialize document animations after browser layout 2026-10-13 15:33:38 +08:00
rpone bf471064eb fix: initialize HTML document scripts in browser order 2026-10-13 00:01:28 +08:00
rpone a33874c328 refactor: remove execution worker idle retention 2026-10-12 23:54:05 +08:00
rpone c01aa2b44a refactor: separate document output from shared HTML playback 2026-10-12 23:47:46 +08:00
rpone 40b74b7fc1 feat: add HTML document output and reusable runtime workers 2026-10-12 23:11:22 +08:00
rpone 8260cdc17d docs: clarify optional component and partner provider installation 2026-10-10 02:02:32 +08:00
kashorin 4400f3363f chore(packages): record initial ecosystem releases 2026-10-10 01:51:27 +08:00
kashorin 68f1693645 refactor: publish video-domain packages independently for 0.3.1 2026-10-09 18:13:50 +08:00
kashorin ff7582a3ff test(provider): follow package version in user agent 2026-10-09 04:13:49 +08:00
kashorin 8bac90166a fix(release): identify package provenance 2026-10-09 04:05:46 +08:00
kashorin e81c3762fc fix(release): exclude Python interpreter caches 2026-10-09 03:53:40 +08:00
kashorin 4bcda61494 fix: preserve cross-platform release diagnostics 2026-10-09 01:44:00 +08:00
kashorin 6314a9e79e merge: absorb SVS closing-text fix into recipe 2026-10-09 01:36:24 +08:00
Chi-Wei Lee ef62b07e15 fix: allow sheet closing text in SVS recipes (#377)
* fix: cover SVS text template rendering

* fix: detect the SVS sheet close between recipes

parseSvs searched the raw text for </sheet> before parsing, so a quoted
recipe value containing that text was either taken as the close or, with
lastIndexOf, guessed at. Check for the close tag only between recipes
instead, since closingBrace already skips quoted text. A missing close now
reports SVS_ROOT_UNCLOSED and a second close SVS_TRAILING, as on main.

Co-authored-by: Sharky Wang <65097782+rponeawa@users.noreply.github.com>

---------

Co-authored-by: Sharky Wang <65097782+rponeawa@users.noreply.github.com>
2026-10-09 01:33:14 +08:00
kashorin 5885c00b70 fix(timeline): preflight exact authored frame boundaries 2026-10-09 01:16:09 +08:00
kashorin f946760a3f docs: finish the 0.3 public documentation audit 2026-10-09 01:07:26 +08:00
kashorin 91d98a1b2d refactor: unify Studio items and temporal inverses 2026-10-09 00:35:10 +08:00
kashorin d7b38b7094 refactor: make caption cues authored content 2026-10-09 00:34:14 +08:00
Flandern e0f26d189a fix(timeline): preflight exact-frame placements (#355) 2026-10-08 23:15:45 +08:00
牵强 d56b5281e6 fix: report Producer failures that no request carries in plan (#348)
evaluateProducerPlan records every Producer failure keyed by its step, but
build-planning.ts read that map only inside the plannedNeeds loop. A Producer
that failed in a step carrying no request, such as assemble-timeline, had its
failure recorded and never surfaced: plan reported "Build plan is valid" and
exited 0 for builds that deterministically fail at Build.

Keep the failures no planned need reports, count them into the verdict and the
exit code, and print each failing step with its message.
2026-10-08 22:28:19 +08:00
HEOJUNFO 31c358d4f0 fix: encode still-video clips with BT.709 and tag the output (#363)
render-still-video converted authored sRGB pictures to yuv420p with
FFmpeg's default BT.601 matrix and wrote no color metadata. Players and
Chromium decode untagged HD video as BT.709, so an HD still clip shifted
color, e.g. #20C040 came back as (20,169,62) in a Chrome <video>, which
is also how HyperFrames composites these clips.

Use the same encode tail as the HyperFrames local renderer (#342) for
the single-picture and the multi-picture paths, and add a test that
checks the stream tags and the decoded color of both paths.

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-08 22:28:13 +08:00
Zhihuang Lin 3a561a9425 fix: keep frame animations of later Presents off HyperFrames' adapters (#373)
Since 089c39a01 the frame animation runtime kept each CSS animation live
and paused, and set its currentTime to Present-relative time on hf-seek.
HyperFrames' own css and waapi adapters also seek every live document
animation, to absolute composition time, and the last writer wins. A
Present that starts after frame 0 therefore rendered the pose at absolute
time: a media-track Item with a fade disappeared for most of its window.

Read the authored keyframes and timing once, then cancel the CSS animation
and set animation-name to none, as 0.2.13 did, so the engine never
discovers it. On each seek, evaluate the active poses with transient
Animations built from the constructor, which the waapi adapter does not
patch, read the computed values, cancel them and write the pose inline.
This still avoids tabulating every Present frame.

Fixes #372

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 22:28:06 +08:00
Sharky Wang 06daf6f760 perf(media): encode lossless alpha Normalize at libvpx's fastest speed (#383)
Lossless VP9 decodes to the same pixels at every speed setting, so the
alpha encode now passes -row-mt 1 -deadline realtime -cpu-used 8. On a
2 s 1080x1920 alpha clip this takes the encode from 7.65 s to 0.88 s
with identical decoded frames.

Reported in #382.
2026-10-08 22:04:18 +08:00
kashorin a4c25ea76b refactor: make narrative projection an explicit author relation 2026-10-08 15:42:44 +08:00
kashorin 91fd9328f5 docs: align production guidance with the 0.3 model 2026-10-08 14:38:45 +08:00
kashorin 682b221c81 refactor: require named temporal values at component boundaries 2026-10-08 14:38:26 +08:00
kashorin 9559574f74 refactor: make caption timing a complete unit table 2026-10-08 14:13:14 +08:00
kashorin 43a8250b0b refactor: give models and kits independent package ownership 2026-10-07 20:45:22 +08:00
kashorin 5c96c3812c refactor: return optional components to their package owners 2026-10-07 20:45:22 +08:00
kashorin 25520fecdf refactor: compose CLI and Studio from owned capabilities 2026-10-07 20:45:22 +08:00
kashorin 52942f9c1a refactor: collapse execution onto a single local runtime 2026-10-07 20:45:22 +08:00
kashorin cc03502862 refactor: consolidate media and image execution owners 2026-10-07 20:44:29 +08:00
kashorin 589062efaf refactor: own HTML programs and local frame rasterization 2026-10-07 20:44:29 +08:00
kashorin 836349e8e8 refactor: separate temporal anchors from audiovisual composition 2026-10-07 20:44:29 +08:00
kashorin db4e545d1e refactor: rebuild the domain-neutral language host 2026-10-07 20:44:28 +08:00
kashorin 190c54c435 refactor: close temporal domain ownership 2026-10-07 20:44:28 +08:00
kashorin 205bfeb98d refactor: establish the adaptive composition model 2026-10-07 20:44:28 +08:00
Sharky Wang adc0c5fcbf fix: include the network cause in transport errors (#376)
Node's fetch reports every network failure as "fetch failed" and keeps
the reason on error.cause, which transport() dropped. Users reporting a
failed HypiHub catalogue check could not tell DNS, TLS, a reset or a
timeout apart.
2026-10-01 11:23:51 +08:00
Sharky Wang 32baae6dfd fix(cli): resolve packages status the way a Build resolves (#361)
`packages status <name>@<version>` read the machine package home and nothing
else, while the loader finds an external package in two places: the
node_modules chain above whoever requires it, and the machine home addressed by
the version that requirer declares. A package installed where the first half
looks — a pnpm workspace's own node_modules, or the global node_modules a
`npm i -g @hypit/hypit` shares with a `npm i -g @hyperframes/engine` — was
reported `Ready false` and exited 1, and `hypit doctor` then loaded the provider
from it on the next line.

Measured on a global install with an empty machine home, before and after:

  @hyperframes/engine@0.7.101   Ready false, exit 1
  @hyperframes/engine@0.7.101   Ready true,  exit 0
                                Required by   .../packages/provider-hyperframes-local
                                Installation  .../lib/node_modules/@hyperframes/engine

Status now locates the Distribution package that declares the specifier and
asks `locateNodePackage` once, from there — one call covering both places
rather than a second opinion beside the loader, which is how the two came to
disagree. The version is still exact: `distributionPackageDeclaring` matches the
declared range byte for byte, so the requirer is found only at the version asked
for, and the resolved manifest's version is compared again afterwards.

A specifier no Distribution package declares now says so, rather than reporting
a bare `Ready false`, and `install` keeps its own path untouched.

Reading only the machine home remains the answer when there is no Distribution
on disk, because then there is no requirer to resolve from.
2026-09-26 19:51:55 +08:00
kashorin 089c39a012 perf: localize build and render working sets
Preserve forwarded Result values without eager materialization, advance live Builds from disposable indexes, and bound HyperFrames resource, source-frame, and output work.
2026-09-26 06:38:25 +08:00
Sharky Wang 9ac471d108 feat(studio): add a light theme that follows the browser (#353)
Studio opens in the browser's color scheme and a top-bar button switches
between light and dark. A choice that differs from the browser is kept in
localStorage; choosing the browser's own scheme returns to following it.

Each theme-dependent color is written as light-dark(light, dark), with the
dark value unchanged, and data-theme on <html> sets color-scheme. The light
palette uses hypit.ai's warm neutrals. Timeline items tint their track hue
over white, with text and audio waveforms in a deep shade of the same hue.
2026-09-24 15:00:46 +08:00
rpone 78d7436071 fix(oauth): answer the callback preflight for Chrome Private Network Access
The hosted callback page fetches the loopback from a public page, and
Chrome preflights that with OPTIONS under Private Network Access. Without
the CORS and PNA headers the auto-forward breaks once Chrome sends the
preflight. Answer OPTIONS and add the allow-origin header to the GET and
error responses.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-23 18:43:41 +08:00
Sharky Wang 66a35294ad fix(oauth): return sign-in through the hosted callback page (#349)
fix(oauth): return sign-in through the hosted callback page (#349)
2026-09-23 17:09:46 +08:00
kape 59d5e2967d fix: round mux duration to the PCM sample boundary (#339) 2026-09-23 12:30:36 +08:00
zhangfeite 465bef7efd fix: encode HyperFrames renders with BT.709 and tag the output (#342)
The local provider converted sRGB PNG frames to yuv420p without choosing a
matrix or writing color metadata, so FFmpeg used BT.601 while players decode
untagged HD video as BT.709. Convert with BT.709 and tag the stream.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 12:30:27 +08:00
wanchenxing 7e03b01a61 fix: include bundled packages in vocabulary listings (#345) 2026-09-23 12:30:23 +08:00
Haokai Ding ecf69e4c85 fix: ignore album artwork in media probes (#347) 2026-09-23 12:30:18 +08:00
Sharky Wang ec6f2083ef fix(endpoint-kit): share the poll error decision across asynchronous Providers (#337)
endpoint-kit now defines the error classes a Provider transport throws
(EndpointTransportError, EndpointHttpError with status and retryAfterMs,
EndpointResponseError, EndpointServiceError) and one decision,
pollAgainOrFail: transport errors and HTTP 429/5xx keep the job pending
for the next poll, honouring Retry-After when given; every other error,
including missing credentials and unusable responses, fails the job.

The six asynchronous Providers (hypihub, beatapi, hiapi, pollo, monid,
tokendance) throw those classes from their request code and route their
poll catch through pollAgainOrFail, replacing the per-Provider status
check that failed on 429 and retried configuration errors until the
operation deadline.
2026-09-21 17:30:27 +08:00
Sharky Wang 636270fe70 fix(providers): keep async jobs pending when a progress poll hits a transport error (#336)
A single failed status request (5xx such as 522, connection failure, or
request timeout) in poll() was returned as a failed operation, so the
driver stopped polling while the remote job continued to run and settle.
The job is now kept pending and polled again after pollIntervalMs; 4xx
responses still fail the operation, and operationTimeoutMs remains the
upper bound.

Applies to hypihub, beatapi, hiapi, pollo, monid and tokendance.
2026-09-21 14:42:42 +08:00
rpone 56057fd0c1 fix(pixverse): render at 540p or 720p
The two models' quality band is now 540p and 720p. The port table holds the
band, so the Surface vocabulary, its notes and the README follow from it.
2026-09-20 16:22:42 +08:00