Commit 72be29144b6f4ba78cfae8920d4fb1dca76e4b17
1 parent
e303b2e4
Default the live player to sound-on instead of muted
Drops the muted attribute and tries an unmuted autoplay first; if the browser blocks unmuted autoplay (no prior user gesture on the page), falls back to muted playback and syncs the mute button label to match. Once a viewer unmutes once, later clip switches keep playing with sound. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0144MiJ2cLjMd9jWaeEpVfUJ
Showing
2 changed files
with
64 additions
and
53 deletions
library.json
| @@ -199,7 +199,7 @@ | @@ -199,7 +199,7 @@ | ||
| 199 | "likes": 0, | 199 | "likes": 0, |
| 200 | "createdAt": 1788192913244, | 200 | "createdAt": 1788192913244, |
| 201 | "promptEn": "scholar cornered but still defiant", | 201 | "promptEn": "scholar cornered but still defiant", |
| 202 | - "lastPlayedAt": 1788250669748 | 202 | + "lastPlayedAt": 1788253347544 |
| 203 | }, | 203 | }, |
| 204 | { | 204 | { |
| 205 | "id": "bbf7efb467e0", | 205 | "id": "bbf7efb467e0", |
| @@ -364,7 +364,7 @@ | @@ -364,7 +364,7 @@ | ||
| 364 | "likes": 0, | 364 | "likes": 0, |
| 365 | "createdAt": 1788185090875, | 365 | "createdAt": 1788185090875, |
| 366 | "promptEn": "woman in white cold and threatening", | 366 | "promptEn": "woman in white cold and threatening", |
| 367 | - "lastPlayedAt": 1788251808852 | 367 | + "lastPlayedAt": 1788253487611 |
| 368 | }, | 368 | }, |
| 369 | { | 369 | { |
| 370 | "id": "a46f1daa9ee0", | 370 | "id": "a46f1daa9ee0", |
| @@ -379,7 +379,7 @@ | @@ -379,7 +379,7 @@ | ||
| 379 | "likes": 0, | 379 | "likes": 0, |
| 380 | "createdAt": 1788181569491, | 380 | "createdAt": 1788181569491, |
| 381 | "promptEn": "a massive warship glides through the stars, the bridge suddenly shakes hard", | 381 | "promptEn": "a massive warship glides through the stars, the bridge suddenly shakes hard", |
| 382 | - "lastPlayedAt": 1788251214448 | 382 | + "lastPlayedAt": 1788253093423 |
| 383 | }, | 383 | }, |
| 384 | { | 384 | { |
| 385 | "id": "44bf5b969e94", | 385 | "id": "44bf5b969e94", |
| @@ -409,7 +409,7 @@ | @@ -409,7 +409,7 @@ | ||
| 409 | "likes": 0, | 409 | "likes": 0, |
| 410 | "createdAt": 1788160917846, | 410 | "createdAt": 1788160917846, |
| 411 | "promptEn": "woman in old chinese robe talking, gentle but wary, in an old room", | 411 | "promptEn": "woman in old chinese robe talking, gentle but wary, in an old room", |
| 412 | - "lastPlayedAt": 1788251177165 | 412 | + "lastPlayedAt": 1788253241500 |
| 413 | }, | 413 | }, |
| 414 | { | 414 | { |
| 415 | "id": "24e49e5ae069", | 415 | "id": "24e49e5ae069", |
| @@ -529,7 +529,7 @@ | @@ -529,7 +529,7 @@ | ||
| 529 | "likes": 0, | 529 | "likes": 0, |
| 530 | "createdAt": 1788120171725, | 530 | "createdAt": 1788120171725, |
| 531 | "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen", | 531 | "promptEn": "constable bursts in and blocks the door, talks to a pale woman behind the screen", |
| 532 | - "lastPlayedAt": 1788249899449 | 532 | + "lastPlayedAt": 1788253571659 |
| 533 | }, | 533 | }, |
| 534 | { | 534 | { |
| 535 | "id": "5c364152e54c", | 535 | "id": "5c364152e54c", |
| @@ -769,7 +769,7 @@ | @@ -769,7 +769,7 @@ | ||
| 769 | "likes": 0, | 769 | "likes": 0, |
| 770 | "createdAt": 1788026068497, | 770 | "createdAt": 1788026068497, |
| 771 | "promptEn": "black-haired prince in a red cloak, pressing down an execution order in the trial hall", | 771 | "promptEn": "black-haired prince in a red cloak, pressing down an execution order in the trial hall", |
| 772 | - "lastPlayedAt": 1788251740816 | 772 | + "lastPlayedAt": 1788253425586 |
| 773 | }, | 773 | }, |
| 774 | { | 774 | { |
| 775 | "id": "0a5e37bb328c", | 775 | "id": "0a5e37bb328c", |
| @@ -799,7 +799,7 @@ | @@ -799,7 +799,7 @@ | ||
| 799 | "likes": 0, | 799 | "likes": 0, |
| 800 | "createdAt": 1788025640972, | 800 | "createdAt": 1788025640972, |
| 801 | "promptEn": "Voldemort in a graveyard, wand raised, stepping closer", | 801 | "promptEn": "Voldemort in a graveyard, wand raised, stepping closer", |
| 802 | - "lastPlayedAt": 1788252161011 | 802 | + "lastPlayedAt": 1788253469603 |
| 803 | }, | 803 | }, |
| 804 | { | 804 | { |
| 805 | "id": "c3875fbd6cc4", | 805 | "id": "c3875fbd6cc4", |
| @@ -859,7 +859,7 @@ | @@ -859,7 +859,7 @@ | ||
| 859 | "likes": 0, | 859 | "likes": 0, |
| 860 | "createdAt": 1788025623833, | 860 | "createdAt": 1788025623833, |
| 861 | "promptEn": "cat-eared white-haired guard crouching in a ruined palace, purple aura around them", | 861 | "promptEn": "cat-eared white-haired guard crouching in a ruined palace, purple aura around them", |
| 862 | - "lastPlayedAt": 1788251424585 | 862 | + "lastPlayedAt": 1788253528965 |
| 863 | }, | 863 | }, |
| 864 | { | 864 | { |
| 865 | "id": "0d721acbc298", | 865 | "id": "0d721acbc298", |
| @@ -874,7 +874,7 @@ | @@ -874,7 +874,7 @@ | ||
| 874 | "likes": 0, | 874 | "likes": 0, |
| 875 | "createdAt": 1788025622363, | 875 | "createdAt": 1788025622363, |
| 876 | "promptEn": "detective in a surveillance room squinting at the monitors", | 876 | "promptEn": "detective in a surveillance room squinting at the monitors", |
| 877 | - "lastPlayedAt": 1788250159958 | 877 | + "lastPlayedAt": 1788253255505 |
| 878 | }, | 878 | }, |
| 879 | { | 879 | { |
| 880 | "id": "639069dea7c5", | 880 | "id": "639069dea7c5", |
| @@ -949,7 +949,7 @@ | @@ -949,7 +949,7 @@ | ||
| 949 | "likes": 0, | 949 | "likes": 0, |
| 950 | "createdAt": 1788024747209, | 950 | "createdAt": 1788024747209, |
| 951 | "promptEn": "wounded hunter leaning on a subway turnstile, ordering you into the tunnel", | 951 | "promptEn": "wounded hunter leaning on a subway turnstile, ordering you into the tunnel", |
| 952 | - "lastPlayedAt": 1788252002941 | 952 | + "lastPlayedAt": 1788253507622 |
| 953 | }, | 953 | }, |
| 954 | { | 954 | { |
| 955 | "id": "fdefca4e4980", | 955 | "id": "fdefca4e4980", |
| @@ -1114,7 +1114,7 @@ | @@ -1114,7 +1114,7 @@ | ||
| 1114 | "likes": 0, | 1114 | "likes": 0, |
| 1115 | "createdAt": 1788014790969, | 1115 | "createdAt": 1788014790969, |
| 1116 | "promptEn": "pirate negotiation, stayed passive and got cornered", | 1116 | "promptEn": "pirate negotiation, stayed passive and got cornered", |
| 1117 | - "lastPlayedAt": 1788251730808 | 1117 | + "lastPlayedAt": 1788253191467 |
| 1118 | }, | 1118 | }, |
| 1119 | { | 1119 | { |
| 1120 | "id": "e14fe7c3220e", | 1120 | "id": "e14fe7c3220e", |
| @@ -1144,7 +1144,7 @@ | @@ -1144,7 +1144,7 @@ | ||
| 1144 | "likes": 0, | 1144 | "likes": 0, |
| 1145 | "createdAt": 1788014336515, | 1145 | "createdAt": 1788014336515, |
| 1146 | "promptEn": "captain's cabin on the Black Pearl, surrounded by pirates, negotiation could turn into an execution", | 1146 | "promptEn": "captain's cabin on the Black Pearl, surrounded by pirates, negotiation could turn into an execution", |
| 1147 | - "lastPlayedAt": 1788250666207 | 1147 | + "lastPlayedAt": 1788253087383 |
| 1148 | }, | 1148 | }, |
| 1149 | { | 1149 | { |
| 1150 | "id": "eae105ee1204", | 1150 | "id": "eae105ee1204", |
| @@ -1564,7 +1564,7 @@ | @@ -1564,7 +1564,7 @@ | ||
| 1564 | "likes": 0, | 1564 | "likes": 0, |
| 1565 | "createdAt": 1788008632603, | 1565 | "createdAt": 1788008632603, |
| 1566 | "promptEn": "facing the Eternity Devil, went in head-on and got seen through", | 1566 | "promptEn": "facing the Eternity Devil, went in head-on and got seen through", |
| 1567 | - "lastPlayedAt": 1788250580165 | 1567 | + "lastPlayedAt": 1788253502782 |
| 1568 | }, | 1568 | }, |
| 1569 | { | 1569 | { |
| 1570 | "id": "361c80537652", | 1570 | "id": "361c80537652", |
| @@ -1669,7 +1669,7 @@ | @@ -1669,7 +1669,7 @@ | ||
| 1669 | "likes": 0, | 1669 | "likes": 0, |
| 1670 | "createdAt": 1788006964122, | 1670 | "createdAt": 1788006964122, |
| 1671 | "promptEn": "grabbing an evidence flaw to counter L", | 1671 | "promptEn": "grabbing an evidence flaw to counter L", |
| 1672 | - "lastPlayedAt": 1788251193178 | 1672 | + "lastPlayedAt": 1788253259502 |
| 1673 | }, | 1673 | }, |
| 1674 | { | 1674 | { |
| 1675 | "id": "0c6306b07f79", | 1675 | "id": "0c6306b07f79", |
| @@ -1699,7 +1699,7 @@ | @@ -1699,7 +1699,7 @@ | ||
| 1699 | "likes": 0, | 1699 | "likes": 0, |
| 1700 | "createdAt": 1788006252918, | 1700 | "createdAt": 1788006252918, |
| 1701 | "promptEn": "facing L, stayed passive and the evidence pressure maxed out", | 1701 | "promptEn": "facing L, stayed passive and the evidence pressure maxed out", |
| 1702 | - "lastPlayedAt": 1788251482641 | 1702 | + "lastPlayedAt": 1788253113430 |
| 1703 | }, | 1703 | }, |
| 1704 | { | 1704 | { |
| 1705 | "id": "0e28a7fecf03", | 1705 | "id": "0e28a7fecf03", |
| @@ -1984,7 +1984,7 @@ | @@ -1984,7 +1984,7 @@ | ||
| 1984 | "likes": 0, | 1984 | "likes": 0, |
| 1985 | "createdAt": 1788002217928, | 1985 | "createdAt": 1788002217928, |
| 1986 | "promptEn": "facing Reiner, stayed passive and got cornered", | 1986 | "promptEn": "facing Reiner, stayed passive and got cornered", |
| 1987 | - "lastPlayedAt": 1788251696779 | 1987 | + "lastPlayedAt": 1788253551648 |
| 1988 | }, | 1988 | }, |
| 1989 | { | 1989 | { |
| 1990 | "id": "3fedf5531999", | 1990 | "id": "3fedf5531999", |
| @@ -2029,7 +2029,7 @@ | @@ -2029,7 +2029,7 @@ | ||
| 2029 | "likes": 0, | 2029 | "likes": 0, |
| 2030 | "createdAt": 1788001428705, | 2030 | "createdAt": 1788001428705, |
| 2031 | "promptEn": "in the ruins of Konoha, exploiting a flaw to counter Pain", | 2031 | "promptEn": "in the ruins of Konoha, exploiting a flaw to counter Pain", |
| 2032 | - "lastPlayedAt": 1788251776833 | 2032 | + "lastPlayedAt": 1788253511622 |
| 2033 | }, | 2033 | }, |
| 2034 | { | 2034 | { |
| 2035 | "id": "e486fab4c24d", | 2035 | "id": "e486fab4c24d", |
| @@ -2044,7 +2044,7 @@ | @@ -2044,7 +2044,7 @@ | ||
| 2044 | "likes": 0, | 2044 | "likes": 0, |
| 2045 | "createdAt": 1788001285796, | 2045 | "createdAt": 1788001285796, |
| 2046 | "promptEn": "in the ruins of Konoha, exploiting a flaw to counter Pain", | 2046 | "promptEn": "in the ruins of Konoha, exploiting a flaw to counter Pain", |
| 2047 | - "lastPlayedAt": 1788252231046 | 2047 | + "lastPlayedAt": 1788253477606 |
| 2048 | }, | 2048 | }, |
| 2049 | { | 2049 | { |
| 2050 | "id": "808e89ca06a4", | 2050 | "id": "808e89ca06a4", |
| @@ -2104,7 +2104,7 @@ | @@ -2104,7 +2104,7 @@ | ||
| 2104 | "likes": 0, | 2104 | "likes": 0, |
| 2105 | "createdAt": 1788000341927, | 2105 | "createdAt": 1788000341927, |
| 2106 | "promptEn": "Konoha destroyed by Shinra Tensei, Pain declaring order in the ruins", | 2106 | "promptEn": "Konoha destroyed by Shinra Tensei, Pain declaring order in the ruins", |
| 2107 | - "lastPlayedAt": 1788251102395 | 2107 | + "lastPlayedAt": 1788253434714 |
| 2108 | }, | 2108 | }, |
| 2109 | { | 2109 | { |
| 2110 | "id": "e245dbcc6d36", | 2110 | "id": "e245dbcc6d36", |
| @@ -2254,7 +2254,7 @@ | @@ -2254,7 +2254,7 @@ | ||
| 2254 | "likes": 0, | 2254 | "likes": 0, |
| 2255 | "createdAt": 1787847447661, | 2255 | "createdAt": 1787847447661, |
| 2256 | "promptEn": "constable tells the woman behind the screen he'll trust her tonight", | 2256 | "promptEn": "constable tells the woman behind the screen he'll trust her tonight", |
| 2257 | - "lastPlayedAt": 1788250278003 | 2257 | + "lastPlayedAt": 1788253581662 |
| 2258 | }, | 2258 | }, |
| 2259 | { | 2259 | { |
| 2260 | "id": "8cb493338cb3", | 2260 | "id": "8cb493338cb3", |
| @@ -2314,7 +2314,7 @@ | @@ -2314,7 +2314,7 @@ | ||
| 2314 | "likes": 0, | 2314 | "likes": 0, |
| 2315 | "createdAt": 1787762311804, | 2315 | "createdAt": 1787762311804, |
| 2316 | "promptEn": "constable sits with a cup of water, slowly looking up at the woman behind the screen", | 2316 | "promptEn": "constable sits with a cup of water, slowly looking up at the woman behind the screen", |
| 2317 | - "lastPlayedAt": 1788251410573 | 2317 | + "lastPlayedAt": 1788253411575 |
| 2318 | }, | 2318 | }, |
| 2319 | { | 2319 | { |
| 2320 | "id": "850f13881576", | 2320 | "id": "850f13881576", |
| @@ -2374,7 +2374,7 @@ | @@ -2374,7 +2374,7 @@ | ||
| 2374 | "likes": 0, | 2374 | "likes": 0, |
| 2375 | "createdAt": 1787730413689, | 2375 | "createdAt": 1787730413689, |
| 2376 | "promptEn": "constable grabs the oil lamp and hurls it at the portrait, the scroll catches fire", | 2376 | "promptEn": "constable grabs the oil lamp and hurls it at the portrait, the scroll catches fire", |
| 2377 | - "lastPlayedAt": 1788251572712 | 2377 | + "lastPlayedAt": 1788253556971 |
| 2378 | }, | 2378 | }, |
| 2379 | { | 2379 | { |
| 2380 | "id": "e6c23c6adc42", | 2380 | "id": "e6c23c6adc42", |
| @@ -2509,7 +2509,7 @@ | @@ -2509,7 +2509,7 @@ | ||
| 2509 | "likes": 0, | 2509 | "likes": 0, |
| 2510 | "createdAt": 1787708663418, | 2510 | "createdAt": 1787708663418, |
| 2511 | "promptEn": "constable catches his breath, thanks her, and rests on the couch while she watches", | 2511 | "promptEn": "constable catches his breath, thanks her, and rests on the couch while she watches", |
| 2512 | - "lastPlayedAt": 1788250466114 | 2512 | + "lastPlayedAt": 1788253353548 |
| 2513 | }, | 2513 | }, |
| 2514 | { | 2514 | { |
| 2515 | "id": "cd22c2b491fc", | 2515 | "id": "cd22c2b491fc", |
| @@ -2584,7 +2584,7 @@ | @@ -2584,7 +2584,7 @@ | ||
| 2584 | "likes": 0, | 2584 | "likes": 0, |
| 2585 | "createdAt": 1787708626228, | 2585 | "createdAt": 1787708626228, |
| 2586 | "promptEn": "constable drinks some water first, thanks her, watching the screen warily as he drinks", | 2586 | "promptEn": "constable drinks some water first, thanks her, watching the screen warily as he drinks", |
| 2587 | - "lastPlayedAt": 1788251160420 | 2587 | + "lastPlayedAt": 1788253265514 |
| 2588 | }, | 2588 | }, |
| 2589 | { | 2589 | { |
| 2590 | "id": "e08f7f7e54dd", | 2590 | "id": "e08f7f7e54dd", |
| @@ -2689,7 +2689,7 @@ | @@ -2689,7 +2689,7 @@ | ||
| 2689 | "likes": 0, | 2689 | "likes": 0, |
| 2690 | "createdAt": 1787674737743, | 2690 | "createdAt": 1787674737743, |
| 2691 | "promptEn": "constable slowly looks around the room, discovers her watching him motionlessly through the screen", | 2691 | "promptEn": "constable slowly looks around the room, discovers her watching him motionlessly through the screen", |
| 2692 | - "lastPlayedAt": 1788249837798 | 2692 | + "lastPlayedAt": 1788253445593 |
| 2693 | }, | 2693 | }, |
| 2694 | { | 2694 | { |
| 2695 | "id": "c74118d0413f", | 2695 | "id": "c74118d0413f", |
| @@ -2824,7 +2824,7 @@ | @@ -2824,7 +2824,7 @@ | ||
| 2824 | "likes": 0, | 2824 | "likes": 0, |
| 2825 | "createdAt": 1787674623678, | 2825 | "createdAt": 1787674623678, |
| 2826 | "promptEn": "constable bows to the screen, thanking her for sheltering him", | 2826 | "promptEn": "constable bows to the screen, thanking her for sheltering him", |
| 2827 | - "lastPlayedAt": 1788251144418 | 2827 | + "lastPlayedAt": 1788253536965 |
| 2828 | }, | 2828 | }, |
| 2829 | { | 2829 | { |
| 2830 | "id": "d94991a1e21b", | 2830 | "id": "d94991a1e21b", |
| @@ -2929,7 +2929,7 @@ | @@ -2929,7 +2929,7 @@ | ||
| 2929 | "likes": 0, | 2929 | "likes": 0, |
| 2930 | "createdAt": 1787665100787, | 2930 | "createdAt": 1787665100787, |
| 2931 | "promptEn": "constable politely asks the woman behind the screen for tea", | 2931 | "promptEn": "constable politely asks the woman behind the screen for tea", |
| 2932 | - "lastPlayedAt": 1788250618187 | 2932 | + "lastPlayedAt": 1788253439598 |
| 2933 | }, | 2933 | }, |
| 2934 | { | 2934 | { |
| 2935 | "id": "d2c77b87b84b", | 2935 | "id": "d2c77b87b84b", |
| @@ -2959,7 +2959,7 @@ | @@ -2959,7 +2959,7 @@ | ||
| 2959 | "likes": 0, | 2959 | "likes": 0, |
| 2960 | "createdAt": 1787642579766, | 2960 | "createdAt": 1787642579766, |
| 2961 | "promptEn": "a summoner chants and calls a giant toad, which swallows the white-robed ghost whole", | 2961 | "promptEn": "a summoner chants and calls a giant toad, which swallows the white-robed ghost whole", |
| 2962 | - "lastPlayedAt": 1788248777237 | 2962 | + "lastPlayedAt": 1788253597668 |
| 2963 | }, | 2963 | }, |
| 2964 | { | 2964 | { |
| 2965 | "id": "22a666455198", | 2965 | "id": "22a666455198", |
| @@ -3079,7 +3079,7 @@ | @@ -3079,7 +3079,7 @@ | ||
| 3079 | "likes": 0, | 3079 | "likes": 0, |
| 3080 | "createdAt": 1787615241814, | 3080 | "createdAt": 1787615241814, |
| 3081 | "promptEn": "xianxia character turning, only back and side profile shown", | 3081 | "promptEn": "xianxia character turning, only back and side profile shown", |
| 3082 | - "lastPlayedAt": 1788250526137 | 3082 | + "lastPlayedAt": 1788253329541 |
| 3083 | }, | 3083 | }, |
| 3084 | { | 3084 | { |
| 3085 | "id": "1a398591663e", | 3085 | "id": "1a398591663e", |
| @@ -3289,7 +3289,7 @@ | @@ -3289,7 +3289,7 @@ | ||
| 3289 | "likes": 0, | 3289 | "likes": 0, |
| 3290 | "createdAt": 1787588540567, | 3290 | "createdAt": 1787588540567, |
| 3291 | "promptEn": "telescope view searching for a MiniMax device", | 3291 | "promptEn": "telescope view searching for a MiniMax device", |
| 3292 | - "lastPlayedAt": 1788248302814 | 3292 | + "lastPlayedAt": 1788253197469 |
| 3293 | }, | 3293 | }, |
| 3294 | { | 3294 | { |
| 3295 | "id": "ba8c0758e5b4", | 3295 | "id": "ba8c0758e5b4", |
| @@ -3304,7 +3304,7 @@ | @@ -3304,7 +3304,7 @@ | ||
| 3304 | "likes": 0, | 3304 | "likes": 0, |
| 3305 | "createdAt": 1787588114381, | 3305 | "createdAt": 1787588114381, |
| 3306 | "promptEn": "underground rap duo freestyling at the camera", | 3306 | "promptEn": "underground rap duo freestyling at the camera", |
| 3307 | - "lastPlayedAt": 1788251744817 | 3307 | + "lastPlayedAt": 1788253391568 |
| 3308 | }, | 3308 | }, |
| 3309 | { | 3309 | { |
| 3310 | "id": "58a439a93c02", | 3310 | "id": "58a439a93c02", |
| @@ -3349,7 +3349,7 @@ | @@ -3349,7 +3349,7 @@ | ||
| 3349 | "likes": 0, | 3349 | "likes": 0, |
| 3350 | "createdAt": 1787577088778, | 3350 | "createdAt": 1787577088778, |
| 3351 | "promptEn": "man thanks the woman for taking him in", | 3351 | "promptEn": "man thanks the woman for taking him in", |
| 3352 | - "lastPlayedAt": 1788252149006 | 3352 | + "lastPlayedAt": 1788253473612 |
| 3353 | }, | 3353 | }, |
| 3354 | { | 3354 | { |
| 3355 | "id": "8d0270466c35", | 3355 | "id": "8d0270466c35", |
| @@ -3364,7 +3364,7 @@ | @@ -3364,7 +3364,7 @@ | ||
| 3364 | "likes": 0, | 3364 | "likes": 0, |
| 3365 | "createdAt": 1787576943673, | 3365 | "createdAt": 1787576943673, |
| 3366 | "promptEn": "man lowers his voice like she said, checks the door, window and lamp", | 3366 | "promptEn": "man lowers his voice like she said, checks the door, window and lamp", |
| 3367 | - "lastPlayedAt": 1788251202953 | 3367 | + "lastPlayedAt": 1788253482789 |
| 3368 | }, | 3368 | }, |
| 3369 | { | 3369 | { |
| 3370 | "id": "396de15c1439", | 3370 | "id": "396de15c1439", |
| @@ -3379,7 +3379,7 @@ | @@ -3379,7 +3379,7 @@ | ||
| 3379 | "likes": 0, | 3379 | "likes": 0, |
| 3380 | "createdAt": 1787576943608, | 3380 | "createdAt": 1787576943608, |
| 3381 | "promptEn": "man lowers his voice like she said, checks the door, window and lamp", | 3381 | "promptEn": "man lowers his voice like she said, checks the door, window and lamp", |
| 3382 | - "lastPlayedAt": 1788249343532 | 3382 | + "lastPlayedAt": 1788253343544 |
| 3383 | }, | 3383 | }, |
| 3384 | { | 3384 | { |
| 3385 | "id": "cde82791f726", | 3385 | "id": "cde82791f726", |
| @@ -3454,7 +3454,7 @@ | @@ -3454,7 +3454,7 @@ | ||
| 3454 | "likes": 0, | 3454 | "likes": 0, |
| 3455 | "createdAt": 1787576013870, | 3455 | "createdAt": 1787576013870, |
| 3456 | "promptEn": "man apologizes, says something outside was chasing him", | 3456 | "promptEn": "man apologizes, says something outside was chasing him", |
| 3457 | - "lastPlayedAt": 1788241611137 | 3457 | + "lastPlayedAt": 1788253385557 |
| 3458 | }, | 3458 | }, |
| 3459 | { | 3459 | { |
| 3460 | "id": "7d425d2d35fb", | 3460 | "id": "7d425d2d35fb", |
| @@ -3739,7 +3739,7 @@ | @@ -3739,7 +3739,7 @@ | ||
| 3739 | "likes": 0, | 3739 | "likes": 0, |
| 3740 | "createdAt": 1787470099635, | 3740 | "createdAt": 1787470099635, |
| 3741 | "promptEn": "pointing at things at a beach market, they turn into hand-drawn animation", | 3741 | "promptEn": "pointing at things at a beach market, they turn into hand-drawn animation", |
| 3742 | - "lastPlayedAt": 1788251368535 | 3742 | + "lastPlayedAt": 1788253516965 |
| 3743 | }, | 3743 | }, |
| 3744 | { | 3744 | { |
| 3745 | "id": "0fe0f2101c44", | 3745 | "id": "0fe0f2101c44", |
| @@ -3844,7 +3844,7 @@ | @@ -3844,7 +3844,7 @@ | ||
| 3844 | "likes": 0, | 3844 | "likes": 0, |
| 3845 | "createdAt": 1787452521817, | 3845 | "createdAt": 1787452521817, |
| 3846 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 3846 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3847 | - "lastPlayedAt": 1788249657655 | 3847 | + "lastPlayedAt": 1788253117433 |
| 3848 | }, | 3848 | }, |
| 3849 | { | 3849 | { |
| 3850 | "id": "f36cdd73ff1b", | 3850 | "id": "f36cdd73ff1b", |
| @@ -3859,7 +3859,7 @@ | @@ -3859,7 +3859,7 @@ | ||
| 3859 | "likes": 0, | 3859 | "likes": 0, |
| 3860 | "createdAt": 1787450754171, | 3860 | "createdAt": 1787450754171, |
| 3861 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 3861 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3862 | - "lastPlayedAt": 1788249973852 | 3862 | + "lastPlayedAt": 1788253279519 |
| 3863 | }, | 3863 | }, |
| 3864 | { | 3864 | { |
| 3865 | "id": "fd0183c54763", | 3865 | "id": "fd0183c54763", |
| @@ -3979,7 +3979,7 @@ | @@ -3979,7 +3979,7 @@ | ||
| 3979 | "likes": 0, | 3979 | "likes": 0, |
| 3980 | "createdAt": 1787426955312, | 3980 | "createdAt": 1787426955312, |
| 3981 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 3981 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 3982 | - "lastPlayedAt": 1788248098632 | 3982 | + "lastPlayedAt": 1788253219489 |
| 3983 | }, | 3983 | }, |
| 3984 | { | 3984 | { |
| 3985 | "id": "734d28c52670", | 3985 | "id": "734d28c52670", |
| @@ -4069,7 +4069,7 @@ | @@ -4069,7 +4069,7 @@ | ||
| 4069 | "likes": 0, | 4069 | "likes": 0, |
| 4070 | "createdAt": 1787412952086, | 4070 | "createdAt": 1787412952086, |
| 4071 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4071 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4072 | - "lastPlayedAt": 1788251143150 | 4072 | + "lastPlayedAt": 1788253367553 |
| 4073 | }, | 4073 | }, |
| 4074 | { | 4074 | { |
| 4075 | "id": "59fd7a087f5b", | 4075 | "id": "59fd7a087f5b", |
| @@ -4084,7 +4084,7 @@ | @@ -4084,7 +4084,7 @@ | ||
| 4084 | "likes": 0, | 4084 | "likes": 0, |
| 4085 | "createdAt": 1787412606465, | 4085 | "createdAt": 1787412606465, |
| 4086 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4086 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4087 | - "lastPlayedAt": 1788251848870 | 4087 | + "lastPlayedAt": 1788253459597 |
| 4088 | }, | 4088 | }, |
| 4089 | { | 4089 | { |
| 4090 | "id": "29a99dc412b2", | 4090 | "id": "29a99dc412b2", |
| @@ -4174,7 +4174,7 @@ | @@ -4174,7 +4174,7 @@ | ||
| 4174 | "likes": 0, | 4174 | "likes": 0, |
| 4175 | "createdAt": 1787384417941, | 4175 | "createdAt": 1787384417941, |
| 4176 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", | 4176 | "promptEn": "protagonist leaps across rooftops fleeing pursuers", |
| 4177 | - "lastPlayedAt": 1788248669135 | 4177 | + "lastPlayedAt": 1788253405570 |
| 4178 | }, | 4178 | }, |
| 4179 | { | 4179 | { |
| 4180 | "id": "2cf5c8e67510", | 4180 | "id": "2cf5c8e67510", |
| @@ -4219,7 +4219,7 @@ | @@ -4219,7 +4219,7 @@ | ||
| 4219 | "likes": 0, | 4219 | "likes": 0, |
| 4220 | "createdAt": 1787375413623, | 4220 | "createdAt": 1787375413623, |
| 4221 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", | 4221 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", |
| 4222 | - "lastPlayedAt": 1788250362064 | 4222 | + "lastPlayedAt": 1788253532966 |
| 4223 | }, | 4223 | }, |
| 4224 | { | 4224 | { |
| 4225 | "id": "78e698c924b1", | 4225 | "id": "78e698c924b1", |
| @@ -4339,7 +4339,7 @@ | @@ -4339,7 +4339,7 @@ | ||
| 4339 | "likes": 0, | 4339 | "likes": 0, |
| 4340 | "createdAt": 1787332047061, | 4340 | "createdAt": 1787332047061, |
| 4341 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", | 4341 | "promptEn": "golden portal opens, man in green jacket throws a glowing spear", |
| 4342 | - "lastPlayedAt": 1788251350521 | 4342 | + "lastPlayedAt": 1788253407577 |
| 4343 | }, | 4343 | }, |
| 4344 | { | 4344 | { |
| 4345 | "id": "a5688d8f5db3", | 4345 | "id": "a5688d8f5db3", |
| @@ -4354,7 +4354,7 @@ | @@ -4354,7 +4354,7 @@ | ||
| 4354 | "likes": 0, | 4354 | "likes": 0, |
| 4355 | "createdAt": 1787330101793, | 4355 | "createdAt": 1787330101793, |
| 4356 | "promptEn": "a red apple on a wooden table, cinematic lighting", | 4356 | "promptEn": "a red apple on a wooden table, cinematic lighting", |
| 4357 | - "lastPlayedAt": 1788252205039 | 4357 | + "lastPlayedAt": 1788253473602 |
| 4358 | }, | 4358 | }, |
| 4359 | { | 4359 | { |
| 4360 | "id": "0024d3c2d4cb", | 4360 | "id": "0024d3c2d4cb", |
| @@ -4414,7 +4414,7 @@ | @@ -4414,7 +4414,7 @@ | ||
| 4414 | "likes": 0, | 4414 | "likes": 0, |
| 4415 | "createdAt": 1787305544815, | 4415 | "createdAt": 1787305544815, |
| 4416 | "promptEn": "transparent gaming mouse product film, blue and orange lighting", | 4416 | "promptEn": "transparent gaming mouse product film, blue and orange lighting", |
| 4417 | - "lastPlayedAt": 1788251648757 | 4417 | + "lastPlayedAt": 1788253209480 |
| 4418 | }, | 4418 | }, |
| 4419 | { | 4419 | { |
| 4420 | "id": "e23b04ac2c78", | 4420 | "id": "e23b04ac2c78", |
| @@ -4489,7 +4489,7 @@ | @@ -4489,7 +4489,7 @@ | ||
| 4489 | "likes": 0, | 4489 | "likes": 0, |
| 4490 | "createdAt": 1787290119114, | 4490 | "createdAt": 1787290119114, |
| 4491 | "promptEn": "misty Jiangnan old town at dawn, woman walking with an oil-paper umbrella", | 4491 | "promptEn": "misty Jiangnan old town at dawn, woman walking with an oil-paper umbrella", |
| 4492 | - "lastPlayedAt": 1788248170701 | 4492 | + "lastPlayedAt": 1788253429580 |
| 4493 | }, | 4493 | }, |
| 4494 | { | 4494 | { |
| 4495 | "id": "0f22388f7847", | 4495 | "id": "0f22388f7847", |
| @@ -4549,7 +4549,7 @@ | @@ -4549,7 +4549,7 @@ | ||
| 4549 | "likes": 0, | 4549 | "likes": 0, |
| 4550 | "createdAt": 1787225897650, | 4550 | "createdAt": 1787225897650, |
| 4551 | "promptEn": "constable burns the beauty portrait with the lamp, the door opens on its own", | 4551 | "promptEn": "constable burns the beauty portrait with the lamp, the door opens on its own", |
| 4552 | - "lastPlayedAt": 1788247380017 | 4552 | + "lastPlayedAt": 1788253107430 |
| 4553 | }, | 4553 | }, |
| 4554 | { | 4554 | { |
| 4555 | "id": "ed3663dcda7f", | 4555 | "id": "ed3663dcda7f", |
| @@ -4594,6 +4594,6 @@ | @@ -4594,6 +4594,6 @@ | ||
| 4594 | "likes": 0, | 4594 | "likes": 0, |
| 4595 | "createdAt": 1787220579189, | 4595 | "createdAt": 1787220579189, |
| 4596 | "promptEn": "gothic castle at night, vampire noble carries a princess, rose petals falling", | 4596 | "promptEn": "gothic castle at night, vampire noble carries a princess, rose petals falling", |
| 4597 | - "lastPlayedAt": 1788252092980 | 4597 | + "lastPlayedAt": 1788253381560 |
| 4598 | } | 4598 | } |
| 4599 | ] | 4599 | ] |
| 4600 | \ No newline at end of file | 4600 | \ No newline at end of file |
live.html
| @@ -21,7 +21,7 @@ | @@ -21,7 +21,7 @@ | ||
| 21 | <div class="spacer"></div> | 21 | <div class="spacer"></div> |
| 22 | <div class="watching" id="watchingCount" hidden></div> | 22 | <div class="watching" id="watchingCount" hidden></div> |
| 23 | <button class="topbar-pill" id="chatToggleBtn">✕ 聊天</button> | 23 | <button class="topbar-pill" id="chatToggleBtn">✕ 聊天</button> |
| 24 | - <button class="topbar-pill" id="muteBtn">🔇 静音</button> | 24 | + <button class="topbar-pill" id="muteBtn">🔈 有声</button> |
| 25 | </header> | 25 | </header> |
| 26 | 26 | ||
| 27 | <div class="body" id="body"> | 27 | <div class="body" id="body"> |
| @@ -38,7 +38,7 @@ | @@ -38,7 +38,7 @@ | ||
| 38 | <span class="np-time" id="nowPlayingTime"></span> | 38 | <span class="np-time" id="nowPlayingTime"></span> |
| 39 | <div class="np-text" id="nowPlayingText">加载中…</div> | 39 | <div class="np-text" id="nowPlayingText">加载中…</div> |
| 40 | </div> | 40 | </div> |
| 41 | - <video id="player" autoplay muted playsinline></video> | 41 | + <video id="player" autoplay playsinline></video> |
| 42 | </div> | 42 | </div> |
| 43 | </div> | 43 | </div> |
| 44 | 44 | ||
| @@ -114,6 +114,17 @@ muteBtn.addEventListener("click", () => { | @@ -114,6 +114,17 @@ muteBtn.addEventListener("click", () => { | ||
| 114 | muteBtn.textContent = player.muted ? "🔇 静音" : "🔈 有声"; | 114 | muteBtn.textContent = player.muted ? "🔇 静音" : "🔈 有声"; |
| 115 | }); | 115 | }); |
| 116 | 116 | ||
| 117 | +// Default to sound on. Chrome/Safari block unmuted autoplay without a prior | ||
| 118 | +// user gesture on the site, so if the unmuted play() rejects, fall back to | ||
| 119 | +// muted autoplay (always allowed) and let the button reflect the real state. | ||
| 120 | +function tryPlay() { | ||
| 121 | + player.play().catch(() => { | ||
| 122 | + player.muted = true; | ||
| 123 | + muteBtn.textContent = "🔇 静音"; | ||
| 124 | + player.play().catch(() => {}); | ||
| 125 | + }); | ||
| 126 | +} | ||
| 127 | + | ||
| 117 | let chatClosed = false; | 128 | let chatClosed = false; |
| 118 | chatToggleBtn.addEventListener("click", () => { | 129 | chatToggleBtn.addEventListener("click", () => { |
| 119 | chatClosed = !chatClosed; | 130 | chatClosed = !chatClosed; |
| @@ -253,7 +264,7 @@ function playBrowse(index) { | @@ -253,7 +264,7 @@ function playBrowse(index) { | ||
| 253 | currentIndex = index; | 264 | currentIndex = index; |
| 254 | const c = clips[index]; | 265 | const c = clips[index]; |
| 255 | player.src = `/lib/video/${c.id}`; | 266 | player.src = `/lib/video/${c.id}`; |
| 256 | - player.play().catch(() => {}); | 267 | + tryPlay(); |
| 257 | setNowPlaying(null, null, c.prompt); | 268 | setNowPlaying(null, null, c.prompt); |
| 258 | renderBrowseList(); | 269 | renderBrowseList(); |
| 259 | } | 270 | } |
| @@ -360,7 +371,7 @@ function switchToClip(clip, offsetSec, requestedBy) { | @@ -360,7 +371,7 @@ function switchToClip(clip, offsetSec, requestedBy) { | ||
| 360 | { once: true } | 371 | { once: true } |
| 361 | ); | 372 | ); |
| 362 | } | 373 | } |
| 363 | - player.play().catch(() => {}); | 374 | + tryPlay(); |
| 364 | setNowPlaying(requestedBy, fmtClock(Date.now()), clip.prompt); | 375 | setNowPlaying(requestedBy, fmtClock(Date.now()), clip.prompt); |
| 365 | } | 376 | } |
| 366 | 377 |