diff --git a/assets/kiku-integration.gif b/assets/kiku-integration.gif
deleted file mode 100644
index c92f3de..0000000
Binary files a/assets/kiku-integration.gif and /dev/null differ
diff --git a/assets/minecard.gif b/assets/minecard.gif
index 4d45c78..989212b 100644
Binary files a/assets/minecard.gif and b/assets/minecard.gif differ
diff --git a/assets/minecard.png b/assets/minecard.png
deleted file mode 100644
index 3d8c767..0000000
Binary files a/assets/minecard.png and /dev/null differ
diff --git a/assets/minecard.webm b/assets/minecard.webm
index 4aa05d8..da30d0f 100644
Binary files a/assets/minecard.webm and b/assets/minecard.webm differ
diff --git a/assets/minecard.webp b/assets/minecard.webp
new file mode 100644
index 0000000..4d100f3
Binary files /dev/null and b/assets/minecard.webp differ
diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts
index 4200410..9410544 100644
--- a/docs/.vitepress/config.ts
+++ b/docs/.vitepress/config.ts
@@ -69,6 +69,7 @@ export default {
{ text: 'Launcher Script', link: '/launcher-script' },
{ text: 'Usage', link: '/usage' },
{ text: 'Mining Workflow', link: '/mining-workflow' },
+ // { text: 'Feature Demos', link: '/demos' },
],
},
{
diff --git a/docs/demos.md b/docs/demos.md
new file mode 100644
index 0000000..b0cd34c
--- /dev/null
+++ b/docs/demos.md
@@ -0,0 +1,72 @@
+# Feature Demos
+
+Short recordings of SubMiner's key features and integrations from real playback sessions.
+
+
+
+## Anki Card Mining & Enrichment
+
+Mine vocabulary cards from Yomitan or directly from subtitle lines. SubMiner automatically attaches the sentence, a timing-accurate audio clip, a screenshot, and a translation.
+
+
+
+::: info VIDEO COMING SOON
+:::
+
+## Subtitle Download & Sync
+
+Search and download subtitles from Jimaku, then automatically synchronize them with alass or ffsubsync — all from within SubMiner.
+
+
+
+::: info VIDEO COMING SOON
+:::
+
+## Jellyfin Integration
+
+Browse your Jellyfin library, cast to devices, and launch playback directly from SubMiner. Watch progress syncs back to your Jellyfin server.
+
+
+
+::: info VIDEO COMING SOON
+:::
+
+## Texthooker
+
+Open subtitles in an external texthooker page for use with browser-based tools and extensions alongside the overlay.
+
+
+
+::: info VIDEO COMING SOON
+:::
+
+
diff --git a/docs/index.assets.test.ts b/docs/index.assets.test.ts
index 4aa2505..0c876b0 100644
--- a/docs/index.assets.test.ts
+++ b/docs/index.assets.test.ts
@@ -19,6 +19,6 @@ test('docs demo media uses shared cache-busting asset version token', () => {
'',
);
expect(docsIndexContents).toContain(
- '
',
+ '
',
);
});
diff --git a/docs/index.md b/docs/index.md
index f4f9586..ef47a02 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -95,7 +95,7 @@ const demoAssetVersion = '20260223-2';
-
+
diff --git a/docs/public/assets/kiku-integration.gif b/docs/public/assets/kiku-integration.gif
deleted file mode 100644
index c92f3de..0000000
Binary files a/docs/public/assets/kiku-integration.gif and /dev/null differ
diff --git a/docs/public/assets/minecard.gif b/docs/public/assets/minecard.gif
index 4d45c78..989212b 100644
Binary files a/docs/public/assets/minecard.gif and b/docs/public/assets/minecard.gif differ
diff --git a/docs/public/assets/minecard.webm b/docs/public/assets/minecard.webm
index 4aa05d8..da30d0f 100644
Binary files a/docs/public/assets/minecard.webm and b/docs/public/assets/minecard.webm differ
diff --git a/docs/public/assets/minecard.webp b/docs/public/assets/minecard.webp
new file mode 100644
index 0000000..4d100f3
Binary files /dev/null and b/docs/public/assets/minecard.webp differ
diff --git a/docs/public/config.example.jsonc b/docs/public/config.example.jsonc
index 91849f8..c770adc 100644
--- a/docs/public/config.example.jsonc
+++ b/docs/public/config.example.jsonc
@@ -141,7 +141,7 @@
"bandedColors": ["#ed8796", "#f5a97f", "#f9e2af", "#a6e3a1", "#8aadf4"], // Five colors used for rank bands when mode is `banded` (from most common to least within topX).
}, // Frequency dictionary setting.
"secondary": {
- "fontFamily": "Manrope, Inter", // Font family setting.
+ "fontFamily": "Inter, Noto Sans, Helvetica Neue, sans-serif", // Font family setting.
"fontSize": 24, // Font size setting.
"fontColor": "#cad3f5", // Font color setting.
"lineHeight": 1.35, // Line height setting.
diff --git a/scripts/mkv-to-readme-video.sh b/scripts/mkv-to-readme-video.sh
index 2f24908..17769b7 100755
--- a/scripts/mkv-to-readme-video.sh
+++ b/scripts/mkv-to-readme-video.sh
@@ -11,11 +11,12 @@ Description:
Generates two browser-friendly files next to the input file:
- .mp4 (H.264 + AAC, prefers NVIDIA GPU if available)
- .webm (AV1/VP9 + Opus, prefers NVIDIA GPU if available)
- - .gif (palette-optimised, 15 fps)
- -poster.jpg (single frame for video poster fallback)
+ - .webp (animated, only when --webp is provided)
Options:
-f, --force Overwrite existing output files
+ -w, --webp Generate animated WebP preview
Encoding profile:
- Crop: 1920x1080 at x=760 y=200
@@ -25,6 +26,7 @@ USAGE
}
force=0
+generate_webp=0
input=""
while [[ $# -gt 0 ]]; do
@@ -36,6 +38,9 @@ while [[ $# -gt 0 ]]; do
-f | --force)
force=1
;;
+ -w | --webp)
+ generate_webp=1
+ ;;
-*)
echo "Error: unknown option: $1" >&2
usage
@@ -74,7 +79,7 @@ base="${filename%.*}"
mp4_out="$dir/$base.mp4"
webm_out="$dir/$base.webm"
-gif_out="$dir/$base.gif"
+webp_out="$dir/$base.webp"
poster_out="$dir/$base-poster.jpg"
overwrite_flag="-n"
@@ -83,7 +88,11 @@ if [[ "$force" -eq 1 ]]; then
fi
if [[ "$force" -eq 0 ]]; then
- for output in "$mp4_out" "$webm_out" "$gif_out" "$poster_out"; do
+ outputs=("$mp4_out" "$webm_out" "$poster_out")
+ if [[ "$generate_webp" -eq 1 ]]; then
+ outputs+=("$webp_out")
+ fi
+ for output in "${outputs[@]}"; do
if [[ -e "$output" ]]; then
echo "Error: output exists: $output (use --force to overwrite)" >&2
exit 1
@@ -98,7 +107,6 @@ has_encoder() {
crop_vf="crop=1920:1080:760:205"
webm_vf="${crop_vf},fps=30"
-gif_vf="${crop_vf},fps=15,scale=960:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=128[p];[s1][p]paletteuse=dither=bayer:bayer_scale=3"
echo "Generating MP4: $mp4_out"
if has_encoder "h264_nvenc"; then
@@ -159,10 +167,20 @@ else
"$webm_out"
fi
-echo "Generating GIF: $gif_out"
-ffmpeg "$overwrite_flag" -i "$input" \
- -vf "$gif_vf" \
- "$gif_out"
+if [[ "$generate_webp" -eq 1 ]]; then
+ if ! has_encoder "libwebp"; then
+ echo "Error: encoder not found: libwebp" >&2
+ exit 1
+ fi
+ echo "Generating animated WebP: $webp_out"
+ ffmpeg "$overwrite_flag" -i "$input" \
+ -vf "${crop_vf},fps=24,scale=960:-1:flags=lanczos" \
+ -c:v libwebp \
+ -q:v 80 \
+ -loop 0 \
+ -an \
+ "$webp_out"
+fi
echo "Generating poster: $poster_out"
ffmpeg "$overwrite_flag" -ss 00:00:05 -i "$input" \
@@ -174,5 +192,7 @@ ffmpeg "$overwrite_flag" -ss 00:00:05 -i "$input" \
echo "Done."
echo "MP4: $mp4_out"
echo "WebM: $webm_out"
-echo "GIF: $gif_out"
+if [[ "$generate_webp" -eq 1 ]]; then
+ echo "WebP: $webp_out"
+fi
echo "Poster: $poster_out"