diff --git a/docs/index.md b/docs/index.md
index 4186db39..3779a1c2 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -9,6 +9,7 @@ hero:
+- [东非最发达的城市现在怎么样了?揭秘肯尼亚不为人知的一面](./东非最发达的城市现在怎么样了?揭秘肯尼亚不为人知的一面.md)
- [一次性搞清楚北方四岛 | 毛泽东日本代表团谈话 | 中苏交恶](./一次性搞清楚北方四岛_|_毛泽东日本代表团谈话_|_中苏交恶.md)
- [对非零关税:补齐中国资源短板,带动中非共同发展](./对非零关税:补齐中国资源短板,带动中非共同发展.md)
- [馬來西亞為何力挺伊朗?當宗教之外的現實利益,讓遜尼派國家站在什葉派這邊](./馬來西亞為何力挺伊朗?當宗教之外的現實利益,讓遜尼派國家站在什葉派這邊.md)
diff --git a/docs/东非最发达的城市现在怎么样了?揭秘肯尼亚不为人知的一面.md b/docs/东非最发达的城市现在怎么样了?揭秘肯尼亚不为人知的一面.md
new file mode 100644
index 00000000..35343510
--- /dev/null
+++ b/docs/东非最发达的城市现在怎么样了?揭秘肯尼亚不为人知的一面.md
@@ -0,0 +1,1885 @@
+---
+interval: 2
+dedup: 0.03
+video: '/东非最发达的城市现在怎么样了?揭秘肯尼亚不为人知的一面 [lWg9GRXltaI].webm'
+---
+
+
+0:00
+
+
+
+0:02
+
+
+
+0:04
+
+
+
+0:06
+
+
+
+0:08
+
+
+
+0:10
+
+
+
+0:12
+
+
+
+0:14
+
+
+
+0:16
+
+
+
+0:18
+
+
+
+0:20
+
+
+
+0:22
+
+
+
+0:24
+
+
+
+0:26
+
+
+
+0:28
+
+
+
+0:30
+
+
+
+0:30
+
+
+
+
+0:32
+
+
+
+0:34
+
+
+
+0:36
+
+
+
+0:38
+
+
+
+0:40
+
+
+
+0:42
+
+
+
+0:42
+
+
+0:44
+
+
+
+
+
+0:46
+
+
+
+0:48
+
+
+
+0:50
+
+
+
+0:50
+
+
+
+
+0:52
+
+
+
+0:54
+
+
+
+0:54
+
+
+0:56
+
+
+
+
+
+0:58
+
+
+
+1:00
+
+
+
+1:02
+
+
+
+1:04
+
+
+
+1:06
+
+
+
+1:08
+
+
+
+1:10
+
+
+
+1:12
+
+
+
+1:14
+
+
+
+1:16
+
+
+
+1:18
+
+
+
+1:20
+
+
+
+1:22
+
+
+
+1:22
+
+
+
+
+1:24
+
+
+
+1:26
+
+
+
+1:26
+
+
+1:28
+
+
+
+
+
+1:30
+
+
+
+1:32
+
+
+
+1:32
+
+
+1:34
+
+
+
+
+
+1:36
+
+
+
+1:38
+
+
+
+1:40
+
+
+
+1:42
+
+
+
+1:44
+
+
+
+1:46
+
+
+
+1:48
+
+
+
+1:50
+
+
+
+1:52
+
+
+
+1:54
+
+
+
+1:56
+
+
+
+1:58
+
+
+
+2:00
+
+
+
+2:00
+
+
+2:02
+
+
+
+
+
+2:04
+
+
+
+2:06
+
+
+
+2:06
+
+
+2:08
+
+
+
+2:10
+
+
+
+
+
+2:12
+
+
+
+2:14
+
+
+
+2:14
+
+
+
+
+2:16
+
+
+
+2:18
+
+
+
+2:20
+
+
+
+2:22
+
+
+
+2:22
+
+
+
+
+2:24
+
+
+
+2:26
+
+
+
+2:28
+
+
+
+2:28
+
+
+
+
+2:30
+
+
+
+2:32
+
+
+
+2:34
+
+
+
+2:36
+
+
+
+2:38
+
+
+
+2:40
+
+
+
+2:42
+
+
+
+2:44
+
+
+
+2:46
+
+
+
+2:48
+
+
+
+2:48
+
+
+
+
+2:50
+
+
+
+2:52
+
+
+
+2:54
+
+
+
+2:56
+
+
+
+2:58
+
+
+
+2:58
+
+
+
+
+3:00
+
+
+
+3:02
+
+
+
+3:04
+
+
+
+3:06
+
+
+
+3:08
+
+
+
+3:10
+
+
+
+3:12
+
+
+
+3:12
+
+
+
+
+3:14
+
+
+
+3:16
+
+
+
+3:16
+
+
+
+
+3:18
+
+
+
+3:20
+
+
+
+3:20
+
+
+
+
+3:22
+
+
+
+3:24
+
+
+
+3:26
+
+
+
+3:28
+
+
+
+3:30
+
+
+
+3:30
+
+
+3:32
+
+
+
+3:34
+
+
+
+
+
+3:36
+
+
+
+3:38
+
+
+
+3:40
+
+
+
+3:40
+
+
+3:42
+
+
+
+3:44
+
+
+
+3:46
+
+
+
+
+
+3:48
+
+
+
+3:50
+
+
+
+3:52
+
+
+
+3:54
+
+
+
+3:56
+
+
+
+3:56
+
+
+
+
+3:58
+
+
+
+4:00
+
+
+
+4:02
+
+
+
+4:04
+
+
+
+4:06
+
+
+
+4:08
+
+
+
+4:10
+
+
+
+4:10
+
+
+4:12
+
+
+
+
+
+4:14
+
+
+
+4:16
+
+
+
+4:18
+
+
+
+4:20
+
+
+
+4:22
+
+
+
+4:24
+
+
+
+4:26
+
+
+
+4:28
+
+
+
+4:30
+
+
+
+4:32
+
+
+
+4:34
+
+
+
+4:36
+
+
+
+4:38
+
+
+
+4:40
+
+
+
+4:40
+
+
+4:42
+
+
+
+
+
+4:44
+
+
+
+4:46
+
+
+
+4:48
+
+
+
+4:48
+
+
+
+
+4:50
+
+
+
+4:52
+
+
+
+4:54
+
+
+
+4:54
+
+
+4:56
+
+
+
+4:58
+
+
+
+5:00
+
+
+
+
+
+5:02
+
+
+
+5:04
+
+
+
+5:06
+
+
+
+5:06
+
+
+5:08
+
+
+
+5:10
+
+
+
+
+
+5:12
+
+
+
+5:14
+
+
+
+5:14
+
+
+
+
+5:16
+
+
+
+5:18
+
+
+
+5:18
+
+
+5:20
+
+
+
+
+
+5:22
+
+
+
+5:24
+
+
+
+5:24
+
+
+
+
+5:26
+
+
+
+5:28
+
+
+
+5:30
+
+
+
+5:32
+
+
+
+5:34
+
+
+
+5:36
+
+
+
+5:38
+
+
+
+5:40
+
+
+
+5:42
+
+
+
+5:44
+
+
+
+5:46
+
+
+
+5:48
+
+
+
+5:50
+
+
+
+5:52
+
+
+
+5:54
+
+
+
+5:54
+
+
+
+
+5:56
+
+
+
+5:58
+
+
+
+5:58
+
+
+
+
+6:00
+
+
+
+6:02
+
+
+
+6:04
+
+
+
+6:06
+
+
+
+6:08
+
+
+
+6:10
+
+
+
+6:12
+
+
+
+6:12
+
+
+6:14
+
+
+
+6:16
+
+
+
+
+
+6:18
+
+
+
+6:20
+
+
+
+6:22
+
+
+
+6:24
+
+
+
+6:26
+
+
+
+6:26
+
+
+6:28
+
+
+
+
+
+6:30
+
+
+
+6:32
+
+
+
+6:34
+
+
+
+6:34
+
+
+
+
+6:36
+
+
+
+6:38
+
+
+
+6:38
+
+
+6:40
+
+
+
+
+
+6:42
+
+
+
+6:44
+
+
+
+6:44
+
+
+
+
+6:46
+
+
+
+6:48
+
+
+
+6:50
+
+
+
+6:50
+
+
+
+
+6:52
+
+
+
+6:54
+
+
+
+6:56
+
+
+
+6:58
+
+
+
+7:00
+
+
+
+7:00
+
+
+
+
+7:02
+
+
+
+7:04
+
+
+
+7:04
+
+
+7:06
+
+
+
+7:08
+
+
+
+7:10
+
+
+
+
+
+7:12
+
+
+
+7:14
+
+
+
+7:16
+
+
+
+7:16
+
+
+
+
+7:18
+
+
+
+7:20
+
+
+
+7:20
+
+
+
+
+7:22
+
+
+
+7:24
+
+
+
+7:24
+
+
+
+
+7:26
+
+
+
+7:28
+
+
+
+7:30
+
+
+
+7:32
+
+
+
+7:34
+
+
+
+7:36
+
+
+
+7:38
+
+
+
+7:40
+
+
+
+7:42
+
+
+
+7:44
+
+
+
+7:46
+
+
+
+7:48
+
+
+
+7:48
+
+
+
+
+7:50
+
+
+
+7:52
+
+
+
+7:52
+
+
+
+
+7:54
+
+
+
+7:56
+
+
+
+7:58
+
+
+
+8:00
+
+
+
+8:02
+
+
+
+8:04
+
+
+
+8:06
+
+
+
+8:06
+
+
+
+
+8:08
+
+
+
+8:10
+
+
+
+8:12
+
+
+
+8:14
+
+
+
+8:16
+
+
+
+8:18
+
+
+
+8:20
+
+
+
+8:20
+
+
+8:22
+
+
+
+
+
+8:24
+
+
+
+8:26
+
+
+
+8:28
+
+
+
+8:28
+
+
+
+
+8:30
+
+
+
+8:32
+
+
+
+8:34
+
+
+
+8:36
+
+
+
+8:38
+
+
+
+8:40
+
+
+
+8:42
+
+
+
+8:44
+
+
+
+8:44
+
+
+
+
+8:46
+
+
+
+8:48
+
+
+
+8:50
+
+
+
+8:52
+
+
+
+8:54
+
+
+
+8:56
+
+
+
+8:58
+
+
+
+8:58
+
+
+
+
+9:00
+
+
+
+9:02
+
+
+
+9:04
+
+
+
+9:06
+
+
+
+9:08
+
+
+
+9:10
+
+
+
+9:12
+
+
+
+9:14
+
+
+
+9:16
+
+
+
+9:18
+
+
+
+9:18
+
+
+
+
+9:20
+
+
+
+9:22
+
+
+
+9:24
+
+
+
+9:24
+
+
+9:26
+
+
+
+9:28
+
+
+
+
+
+9:30
+
+
+
+9:32
+
+
+
+9:34
+
+
+
+9:34
+
+
+
+
+9:36
+
+
+
+9:38
+
+
+
+9:40
+
+
+
+9:40
+
+
+9:42
+
+
+
+
+
+9:44
+
+
+
+9:46
+
+
+
+9:48
+
+
+
+9:50
+
+
+
+9:52
+
+
+
+9:54
+
+
+
+9:54
+
+
+9:56
+
+
+
+9:58
+
+
+
+
+
+10:00
+
+
+
+10:02
+
+
+
+10:04
+
+
+
+10:04
+
+
+
+
+10:06
+
+
+
+10:08
+
+
+
+10:10
+
+
+
+10:10
+
+
+
+
+10:12
+
+
+
+10:14
+
+
+
+10:16
+
+
+
+10:16
+
+
+10:18
+
+
+
+10:20
+
+
+
+10:22
+
+
+
+10:24
+
+
+
+
+
+10:26
+
+
+
+10:28
+
+
+
+10:30
+
+
+
+10:32
+
+
+
+10:34
+
+
+
+10:36
+
+
+
+10:38
+
+
+
+10:40
+
+
+
+10:42
+
+
+
+10:44
+
+
+
+10:46
+
+
+
+10:48
+
+
+
+10:50
+
+
+
+10:50
+
+
+
+
+10:52
+
+
+
+10:54
+
+
+
+10:54
+
+
+
+
+10:56
+
+
+
+10:58
+
+
+
+11:00
+
+
+
+11:00
+
+
+11:02
+
+
+
+11:04
+
+
+
+11:06
+
+
+
+
+
+11:08
+
+
+
+11:10
+
+
+
+11:10
+
+
+
+
+11:12
+
+
+
+11:14
+
+
+
+11:16
+
+
+
+11:18
+
+
+
+11:20
+
+
+
+11:22
+
+
+
+11:22
+
+
+11:24
+
+
+
+
+
+11:26
+
+
+
+11:28
+
+
+
+11:30
+
+
+
+11:32
+
+
+
+11:34
+
+
+
+11:36
+
+
+
+11:38
+
+
+
+11:38
+
+
+
+
+11:40
+
+
+
+11:42
+
+
+
+11:44
+
+
+
+11:44
+
+
+11:46
+
+
+
+
+
+11:48
+
+
+
+11:50
+
+
+
+11:52
+
+
+
+11:52
+
+
+
+
+11:54
+
+
+
+11:56
+
+
+
+11:56
+
+
+11:58
+
+
+
+
+
+12:00
+
+
+
+12:02
+
+
+
+12:02
+
+
+
+
+12:04
+
+
+
+12:06
+
+
+
+12:08
+
+
+
+12:08
+
+
+
+
+12:10
+
+
+
+12:12
+
+
+
+12:14
+
+
+
+12:16
+
+
+
+12:16
+
+
+
+
+12:18
+
+
+
+12:20
+
+
+
+12:20
+
+
+12:22
+
+
+
+12:24
+
+
+
+12:26
+
+
+
+
+
+12:28
+
+
+
+12:30
+
+
+
+12:30
+
+
+12:32
+
+
+
+12:34
+
+
+
+
+
+12:36
+
+
+
+12:38
+
+
+
+12:38
+
+
+
+
+12:40
+
+
diff --git a/group-similar.js b/group-similar.js
index 132e9bae..9800b4da 100644
--- a/group-similar.js
+++ b/group-similar.js
@@ -25,6 +25,7 @@
import { readFileSync, writeFileSync } from "node:fs";
import { resolve, dirname } from "node:path";
import { fileURLToPath } from "node:url";
+import matter from "gray-matter";
// @ts-ignore - sharp ships no bundled .d.ts; types are not needed at runtime
import sharp from "sharp";
@@ -267,17 +268,22 @@ export async function renderFile(inputPath, outputPath, threshold = 0.005) {
const baseDir = dirname(resolvedInput);
console.log(`Reading : ${resolvedInput}`);
- console.log(`Threshold : ${threshold}`);
- const raw = readFileSync(resolvedInput, "utf8");
+ const { data, content: raw } = matter(readFileSync(resolvedInput, "utf8"));
const lines = raw.split("\n").map(parseLine);
+ threshold =
+ typeof data["dedup"] === "number" && data["dedup"] > 0
+ ? data["dedup"]
+ : threshold;
+ console.log(`Threshold : ${threshold}`);
+
/** @type {Stats} */
const stats = { comparisons: 0, grouped: 0 };
const grouped = await groupImages(lines, baseDir, threshold, stats);
const output = render(grouped);
- writeFileSync(resolvedOutput, output, "utf8");
+ writeFileSync(resolvedOutput, matter.stringify(output, data), "utf8");
console.log(
`Comparisons: ${stats.comparisons} | grouped: ${stats.grouped}`,