Recently Written · git

subread-extension

Show your own .srt over a YouTube video, in time with it. Chrome and Firefox.

git clone https://github.com/equwal/subread-extension

Log | Files | Refs


commit fdfcb91b6ab428414aa63fbf33409f143929efd4
equwal <truex@equwal.com>
2026-09-24 17:05:42 -0700

Use five store screenshots in five languages, with the fixed fonts and the transcript panel

Chrome allows five screenshots. The set shows Japanese with the transcript panel, English, Spanish, Portuguese and Russian. The marquee tile now reads its base frame from store/demo/marquee-frame.png.

 store/demo/iracema-acronicos.srt                  |  55 ++++++++++++++++++
 store/demo/karamazov-audiobook.srt                |  47 +++++++++++++++
 store/demo/marquee-frame.png                      | Bin 0 -> 853457 bytes
 store/demo/quijote-librivox.srt                   |  67 ++++++++++++++++++++++
 store/graphics/marquee-1400x560.png               | Bin 374680 -> 445785 bytes
 store/graphics/screenshot-1-kokoro-transcript.png | Bin 0 -> 491401 bytes
 store/graphics/screenshot-1-moby-dick.png         | Bin 651428 -> 0 bytes
 store/graphics/screenshot-2-moby-dick-panel.png   | Bin 666116 -> 833156 bytes
 store/graphics/screenshot-3-kokoro.png            | Bin 517450 -> 0 bytes
 store/graphics/screenshot-3-quijote.png           | Bin 0 -> 516154 bytes
 store/graphics/screenshot-4-iracema-panel.png     | Bin 0 -> 503853 bytes
 store/graphics/screenshot-4-kokoro-panel.png      | Bin 541591 -> 0 bytes
 store/graphics/screenshot-5-karamazov.png         | Bin 0 -> 384107 bytes
 tools/graphics.py                                 |   6 +-
 14 files changed, 172 insertions(+), 3 deletions(-)
diff --git a/store/demo/iracema-acronicos.srt b/store/demo/iracema-acronicos.srt
new file mode 100644
index 0000000..db605cd
--- /dev/null
+++ b/store/demo/iracema-acronicos.srt
@@ -0,0 +1,55 @@
+1
+00:00:01,500 --> 00:00:10,000
+Verdes mares bravios de minha terra natal, onde canta a jandaia nas frondes da carnaúba;
+
+2
+00:00:10,000 --> 00:00:16,500
+Verdes mares, que brilhaes como liquida esmeralda aos raios do sol nascente,
+
+3
+00:00:16,500 --> 00:00:20,000
+perlongando as alvas praias ensombradas de coqueiros;
+
+4
+00:00:20,000 --> 00:00:26,000
+Serenai, verdes mares, e alisai docemente a vaga impetuosa
+
+5
+00:00:26,000 --> 00:00:30,000
+para que o barco aventureiro manso resvalle á flor das aguas.
+
+6
+00:00:30,000 --> 00:00:38,000
+Onde vai a affouta jangada, que deixa rapida a costa cearense, aberta ao fresco terral a grande vella?
+
+7
+00:00:38,000 --> 00:00:46,000
+Onde vae como branca alcyone buscando o rochedo patrio nas solidões do oceano?
+
+8
+00:00:46,000 --> 00:00:52,500
+Tres entes respirão sobre o fragil lenho que vai singrando veloce, mar em fora:
+
+9
+00:00:52,500 --> 00:00:58,500
+Um jovem guerreiro cuja tez branca não cora o sangue americano;
+
+10
+00:00:58,500 --> 00:01:03,000
+uma creança e um rafeiro que virão a luz no berço das florestas,
+
+11
+00:01:03,000 --> 00:01:07,000
+e brincão irmãos, filhos ambos da mesma terra selvagem.
+
+12
+00:01:07,000 --> 00:01:14,500
+A lufada intermittente traz da praia um echo vibrante, que resoa entre o marulho das vagas:
+
+13
+00:01:14,500 --> 00:01:17,000
+— Iracema!...
+
+14
+00:01:17,000 --> 00:01:23,000
+O moço guerreiro, encostado ao mastro, leva os olhos presos na sombra fugitiva da terra:
diff --git a/store/demo/karamazov-audiobook.srt b/store/demo/karamazov-audiobook.srt
new file mode 100644
index 0000000..8c72541
--- /dev/null
+++ b/store/demo/karamazov-audiobook.srt
@@ -0,0 +1,47 @@
+1
+00:00:33,000 --> 00:00:42,000
+Братья Карамазовы. Роман в четырех частях с эпилогом
+
+2
+00:00:42,000 --> 00:00:44,500
+От автора
+
+3
+00:00:44,500 --> 00:00:54,000
+Начиная жизнеописание героя моего, Алексея Федоровича Карамазова, нахожусь в некотором недоумении.
+
+4
+00:00:54,000 --> 00:01:00,000
+А именно: хотя я и называю Алексея Федоровича моим героем, но, однако, сам знаю,
+
+5
+00:01:00,000 --> 00:01:07,500
+что человек он отнюдь не великий, а посему и предвижу неизбежные вопросы вроде таковых:
+
+6
+00:01:07,500 --> 00:01:12,000
+чем же замечателен ваш Алексей Федорович, что вы выбрали его своим героем?
+
+7
+00:01:12,000 --> 00:01:16,000
+Что сделал он такого? Кому и чем известен?
+
+8
+00:01:16,000 --> 00:01:23,000
+Почему я, читатель, должен тратить время на изучение фактов его жизни?
+
+9
+00:01:23,000 --> 00:01:31,000
+Последний вопрос самый роковой, ибо на него могу лишь ответить: «Может быть, увидите сами из романа».
+
+10
+00:01:31,000 --> 00:01:39,000
+Ну а коль прочтут роман и не увидят, не согласятся с примечательностью моего Алексея Федоровича?
+
+11
+00:01:39,000 --> 00:01:43,000
+Говорю так, потому что с прискорбием это предвижу.
+
+12
+00:01:43,000 --> 00:01:51,000
+Для меня он примечателен, но решительно сомневаюсь, успею ли это доказать читателю.
diff --git a/store/demo/marquee-frame.png b/store/demo/marquee-frame.png
new file mode 100644
index 0000000..4b296e8
Binary files /dev/null and b/store/demo/marquee-frame.png differ
diff --git a/store/demo/quijote-librivox.srt b/store/demo/quijote-librivox.srt
new file mode 100644
index 0000000..475cd6f
--- /dev/null
+++ b/store/demo/quijote-librivox.srt
@@ -0,0 +1,67 @@
+1
+00:00:20,000 --> 00:00:29,000
+El ingenioso hidalgo Don Quijote de la Mancha. Miguel de Cervantes Saavedra.
+
+2
+00:00:29,000 --> 00:00:37,000
+Desocupado lector: sin juramento me podrás creer que quisiera que este libro, como hijo del entendimiento,
+
+3
+00:00:37,000 --> 00:00:42,000
+fuera el más hermoso, el más gallardo y más discreto que pudiera imaginarse.
+
+4
+00:00:42,000 --> 00:00:49,000
+Pero no he podido yo contravenir al orden de naturaleza; que en ella cada cosa engendra su semejante.
+
+5
+00:00:49,000 --> 00:00:53,500
+Y así, ¿qué podrá engendrar el estéril y mal cultivado ingenio mío,
+
+6
+00:00:53,500 --> 00:00:58,500
+sino la historia de un hijo seco, avellanado, antojadizo
+
+7
+00:00:58,500 --> 00:01:03,000
+y lleno de pensamientos varios y nunca imaginados de otro alguno,
+
+8
+00:01:03,000 --> 00:01:06,500
+bien como quien se engendró en una cárcel,
+
+9
+00:01:06,500 --> 00:01:14,000
+donde toda incomodidad tiene su asiento y donde todo triste ruido hace su habitación?
+
+10
+00:01:14,000 --> 00:01:18,000
+El sosiego, el lugar apacible, la amenidad de los campos,
+
+11
+00:01:18,000 --> 00:01:22,000
+la serenidad de los cielos, el murmurar de las fuentes,
+
+12
+00:01:22,000 --> 00:01:29,000
+la quietud del espíritu son grande parte para que las musas más estériles se muestren fecundas
+
+13
+00:01:29,000 --> 00:01:36,000
+y ofrezcan partos al mundo que le colmen de maravilla y de contento.
+
+14
+00:01:36,000 --> 00:01:40,000
+Acontece tener un padre un hijo feo y sin gracia alguna,
+
+15
+00:01:40,000 --> 00:01:47,000
+y el amor que le tiene le pone una venda en los ojos para que no vea sus faltas,
+
+16
+00:01:47,000 --> 00:01:55,000
+antes las juzga por discreciones y lindezas y las cuenta a sus amigos por agudezas y donaires.
+
+17
+00:01:55,000 --> 00:02:00,000
+Pero yo, que, aunque parezco padre, soy padrastro de Don Quijote,
diff --git a/store/graphics/marquee-1400x560.png b/store/graphics/marquee-1400x560.png
index cb9c9d5..96f2dfe 100644
Binary files a/store/graphics/marquee-1400x560.png and b/store/graphics/marquee-1400x560.png differ
diff --git a/store/graphics/screenshot-1-kokoro-transcript.png b/store/graphics/screenshot-1-kokoro-transcript.png
new file mode 100644
index 0000000..a302abb
Binary files /dev/null and b/store/graphics/screenshot-1-kokoro-transcript.png differ
diff --git a/store/graphics/screenshot-1-moby-dick.png b/store/graphics/screenshot-1-moby-dick.png
deleted file mode 100644
index ed2cd87..0000000
Binary files a/store/graphics/screenshot-1-moby-dick.png and /dev/null differ
diff --git a/store/graphics/screenshot-2-moby-dick-panel.png b/store/graphics/screenshot-2-moby-dick-panel.png
index 17fed09..f8954b2 100644
Binary files a/store/graphics/screenshot-2-moby-dick-panel.png and b/store/graphics/screenshot-2-moby-dick-panel.png differ
diff --git a/store/graphics/screenshot-3-kokoro.png b/store/graphics/screenshot-3-kokoro.png
deleted file mode 100644
index 390afe5..0000000
Binary files a/store/graphics/screenshot-3-kokoro.png and /dev/null differ
diff --git a/store/graphics/screenshot-3-quijote.png b/store/graphics/screenshot-3-quijote.png
new file mode 100644
index 0000000..c4710d1
Binary files /dev/null and b/store/graphics/screenshot-3-quijote.png differ
diff --git a/store/graphics/screenshot-4-iracema-panel.png b/store/graphics/screenshot-4-iracema-panel.png
new file mode 100644
index 0000000..c7a5cd1
Binary files /dev/null and b/store/graphics/screenshot-4-iracema-panel.png differ
diff --git a/store/graphics/screenshot-4-kokoro-panel.png b/store/graphics/screenshot-4-kokoro-panel.png
deleted file mode 100644
index b12cadf..0000000
Binary files a/store/graphics/screenshot-4-kokoro-panel.png and /dev/null differ
diff --git a/store/graphics/screenshot-5-karamazov.png b/store/graphics/screenshot-5-karamazov.png
new file mode 100644
index 0000000..df25499
Binary files /dev/null and b/store/graphics/screenshot-5-karamazov.png differ
diff --git a/tools/graphics.py b/tools/graphics.py
index 1e45c4a..32af1dd 100644
--- a/tools/graphics.py
+++ b/tools/graphics.py
@@ -37,12 +37,12 @@ def promo() -> None:
 
 def marquee() -> None:
     canvas = Image.new("RGB", (1400, 560), BG)
-    # The right side: the video area of screenshot 1. Screenshot 2 has the same frame, but its
+    # The right side: the video area of store/demo/marquee-frame.png. Screenshot 2 has the same frame, but its
     # line is "He loved to dust his old grammars…" and its panel is open. Paste only the strip
-    # with that line over the line of screenshot 1.
+    # with that line over the line of that frame.
     box = (110, 56, 1155, 686)
     strip = (box[0], 570, box[2], 616)
-    shot = Image.open(OUT / "screenshot-1-moby-dick.png").convert("RGB").crop(box)
+    shot = Image.open(ROOT / "store" / "demo" / "marquee-frame.png").convert("RGB").crop(box)
     line = Image.open(OUT / "screenshot-2-moby-dick-panel.png").convert("RGB").crop(strip)
     shot.paste(line, (0, strip[1] - box[1]))
     shot = shot.resize((round(shot.width * 440 / shot.height), 440), Image.LANCZOS)