diff --git a/navsea_full_aoi_visual_audit.py b/navsea_full_aoi_visual_audit.py
index 75cfbe6..6d48e90 100644
--- a/navsea_full_aoi_visual_audit.py
+++ b/navsea_full_aoi_visual_audit.py
@@ -27,6 +27,7 @@ def parse_args() -> argparse.Namespace:
parser.add_argument("--bottom-trim", type=int, default=30)
parser.add_argument("--timeout-sec", type=int, default=120)
parser.add_argument("--virtual-time-budget-ms", type=int, default=30000)
+ parser.add_argument("--variant", action="append", choices=("full", "semantic"), help="只跑指定 variant,可重复传入")
return parser.parse_args()
@@ -153,7 +154,8 @@ def main() -> None:
aois = json.loads(args.aoi_json.read_text(encoding="utf-8"))
cases: list[dict[str, Any]] = []
- for variant in ("full", "semantic"):
+ variants = args.variant or ["full", "semantic"]
+ for variant in variants:
for aoi in aois:
for zoom in aoi["zoom_levels"]:
case_id = f"{aoi['id']}_{variant}_z{zoom}"
diff --git a/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/full_aoi_visual_audit.json b/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/full_aoi_visual_audit.json
new file mode 100644
index 0000000..9dbd3a9
--- /dev/null
+++ b/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/full_aoi_visual_audit.json
@@ -0,0 +1,73 @@
+{
+ "compare_url": "http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf",
+ "cases": [
+ {
+ "id": "karatsu_5nm_full_z12",
+ "label": "唐津 5 海里",
+ "variant": "full",
+ "zoom": 12,
+ "center": [
+ 129.9697,
+ 33.4425
+ ],
+ "radius_nm": 5,
+ "compare_url": "http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf&variant=full&audit=1¢er=129.9697%2C33.4425&zoom=12",
+ "changed_pixels": 276326,
+ "total_pixels": 364800,
+ "changed_ratio": 0.757473,
+ "mean_abs_rgb": [
+ 28.6339,
+ 29.7368,
+ 58.0848
+ ],
+ "rms_rgb": [
+ 48.2024,
+ 47.0653,
+ 75.8149
+ ],
+ "diff_bbox": [
+ 0,
+ 0,
+ 640,
+ 513
+ ],
+ "left_image": "/root/sourceserver/pbf/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/karatsu_5nm_full_z12/compare_left.png",
+ "right_image": "/root/sourceserver/pbf/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/karatsu_5nm_full_z12/compare_right.png",
+ "diff_image": "/root/sourceserver/pbf/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/karatsu_5nm_full_z12/compare_diff.png"
+ },
+ {
+ "id": "hakata_10nm_full_z12",
+ "label": "博多港中心 10 海里",
+ "variant": "full",
+ "zoom": 12,
+ "center": [
+ 130.335,
+ 33.6385
+ ],
+ "radius_nm": 10,
+ "compare_url": "http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf&variant=full&audit=1¢er=130.335%2C33.6385&zoom=12",
+ "changed_pixels": 193301,
+ "total_pixels": 364800,
+ "changed_ratio": 0.529882,
+ "mean_abs_rgb": [
+ 20.6516,
+ 21.4763,
+ 26.4402
+ ],
+ "rms_rgb": [
+ 45.2293,
+ 45.5602,
+ 50.335
+ ],
+ "diff_bbox": [
+ 0,
+ 0,
+ 640,
+ 513
+ ],
+ "left_image": "/root/sourceserver/pbf/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/hakata_10nm_full_z12/compare_left.png",
+ "right_image": "/root/sourceserver/pbf/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/hakata_10nm_full_z12/compare_right.png",
+ "diff_image": "/root/sourceserver/pbf/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/hakata_10nm_full_z12/compare_diff.png"
+ }
+ ]
+}
diff --git a/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/full_aoi_visual_audit.md b/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/full_aoi_visual_audit.md
new file mode 100644
index 0000000..5c70e15
--- /dev/null
+++ b/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/full_aoi_visual_audit.md
@@ -0,0 +1,29 @@
+# 全国 AOI 截图对比审计
+
+## 总览
+
+- compare page: `http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf`
+- cases: `2`
+
+## 差异排序
+
+### 唐津 5 海里 · full · z12
+
+- changed ratio: `0.757473`
+- changed pixels: `276326` / `364800`
+- mean abs rgb: `[28.6339, 29.7368, 58.0848]`
+- compare url: `http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf&variant=full&audit=1¢er=129.9697%2C33.4425&zoom=12`
+- left image: `/root/sourceserver/pbf/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/karatsu_5nm_full_z12/compare_left.png`
+- right image: `/root/sourceserver/pbf/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/karatsu_5nm_full_z12/compare_right.png`
+- diff image: `/root/sourceserver/pbf/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/karatsu_5nm_full_z12/compare_diff.png`
+
+### 博多港中心 10 海里 · full · z12
+
+- changed ratio: `0.529882`
+- changed pixels: `193301` / `364800`
+- mean abs rgb: `[20.6516, 21.4763, 26.4402]`
+- compare url: `http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf&variant=full&audit=1¢er=130.335%2C33.6385&zoom=12`
+- left image: `/root/sourceserver/pbf/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/hakata_10nm_full_z12/compare_left.png`
+- right image: `/root/sourceserver/pbf/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/hakata_10nm_full_z12/compare_right.png`
+- diff image: `/root/sourceserver/pbf/report/full_rebuild_staging_hakata_karatsu_z12_2026-04-18/hakata_10nm_full_z12/compare_diff.png`
+
diff --git a/report/full_rebuild_staging_okinawa_z12_2026-04-18/full_aoi_visual_audit.json b/report/full_rebuild_staging_okinawa_z12_2026-04-18/full_aoi_visual_audit.json
new file mode 100644
index 0000000..50a0d9d
--- /dev/null
+++ b/report/full_rebuild_staging_okinawa_z12_2026-04-18/full_aoi_visual_audit.json
@@ -0,0 +1,39 @@
+{
+ "compare_url": "http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf",
+ "cases": [
+ {
+ "id": "okinawa_10nm_full_z12",
+ "label": "冲绳 10 海里",
+ "variant": "full",
+ "zoom": 12,
+ "center": [
+ 127.67,
+ 26.21
+ ],
+ "radius_nm": 10,
+ "compare_url": "http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf&variant=full&audit=1¢er=127.67%2C26.21&zoom=12",
+ "changed_pixels": 286800,
+ "total_pixels": 364800,
+ "changed_ratio": 0.786184,
+ "mean_abs_rgb": [
+ 35.1541,
+ 37.5348,
+ 57.2885
+ ],
+ "rms_rgb": [
+ 57.997,
+ 59.3287,
+ 80.8913
+ ],
+ "diff_bbox": [
+ 0,
+ 0,
+ 640,
+ 513
+ ],
+ "left_image": "/root/sourceserver/pbf/report/full_rebuild_staging_okinawa_z12_2026-04-18/okinawa_10nm_full_z12/compare_left.png",
+ "right_image": "/root/sourceserver/pbf/report/full_rebuild_staging_okinawa_z12_2026-04-18/okinawa_10nm_full_z12/compare_right.png",
+ "diff_image": "/root/sourceserver/pbf/report/full_rebuild_staging_okinawa_z12_2026-04-18/okinawa_10nm_full_z12/compare_diff.png"
+ }
+ ]
+}
diff --git a/report/full_rebuild_staging_okinawa_z12_2026-04-18/full_aoi_visual_audit.md b/report/full_rebuild_staging_okinawa_z12_2026-04-18/full_aoi_visual_audit.md
new file mode 100644
index 0000000..638de7b
--- /dev/null
+++ b/report/full_rebuild_staging_okinawa_z12_2026-04-18/full_aoi_visual_audit.md
@@ -0,0 +1,19 @@
+# 全国 AOI 截图对比审计
+
+## 总览
+
+- compare page: `http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf`
+- cases: `1`
+
+## 差异排序
+
+### 冲绳 10 海里 · full · z12
+
+- changed ratio: `0.786184`
+- changed pixels: `286800` / `364800`
+- mean abs rgb: `[35.1541, 37.5348, 57.2885]`
+- compare url: `http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf&variant=full&audit=1¢er=127.67%2C26.21&zoom=12`
+- left image: `/root/sourceserver/pbf/report/full_rebuild_staging_okinawa_z12_2026-04-18/okinawa_10nm_full_z12/compare_left.png`
+- right image: `/root/sourceserver/pbf/report/full_rebuild_staging_okinawa_z12_2026-04-18/okinawa_10nm_full_z12/compare_right.png`
+- diff image: `/root/sourceserver/pbf/report/full_rebuild_staging_okinawa_z12_2026-04-18/okinawa_10nm_full_z12/compare_diff.png`
+
diff --git a/report/full_rebuild_staging_okinawa_z12_r2_2026-04-18/full_aoi_visual_audit.json b/report/full_rebuild_staging_okinawa_z12_r2_2026-04-18/full_aoi_visual_audit.json
new file mode 100644
index 0000000..f04d0d2
--- /dev/null
+++ b/report/full_rebuild_staging_okinawa_z12_r2_2026-04-18/full_aoi_visual_audit.json
@@ -0,0 +1,39 @@
+{
+ "compare_url": "http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf",
+ "cases": [
+ {
+ "id": "okinawa_10nm_full_z12",
+ "label": "冲绳 10 海里",
+ "variant": "full",
+ "zoom": 12,
+ "center": [
+ 127.67,
+ 26.21
+ ],
+ "radius_nm": 10,
+ "compare_url": "http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf&variant=full&audit=1¢er=127.67%2C26.21&zoom=12",
+ "changed_pixels": 286800,
+ "total_pixels": 364800,
+ "changed_ratio": 0.786184,
+ "mean_abs_rgb": [
+ 35.1541,
+ 37.5348,
+ 57.2885
+ ],
+ "rms_rgb": [
+ 57.997,
+ 59.3287,
+ 80.8913
+ ],
+ "diff_bbox": [
+ 0,
+ 0,
+ 640,
+ 513
+ ],
+ "left_image": "/root/sourceserver/pbf/report/full_rebuild_staging_okinawa_z12_r2_2026-04-18/okinawa_10nm_full_z12/compare_left.png",
+ "right_image": "/root/sourceserver/pbf/report/full_rebuild_staging_okinawa_z12_r2_2026-04-18/okinawa_10nm_full_z12/compare_right.png",
+ "diff_image": "/root/sourceserver/pbf/report/full_rebuild_staging_okinawa_z12_r2_2026-04-18/okinawa_10nm_full_z12/compare_diff.png"
+ }
+ ]
+}
diff --git a/report/full_rebuild_staging_okinawa_z12_r2_2026-04-18/full_aoi_visual_audit.md b/report/full_rebuild_staging_okinawa_z12_r2_2026-04-18/full_aoi_visual_audit.md
new file mode 100644
index 0000000..1cde73d
--- /dev/null
+++ b/report/full_rebuild_staging_okinawa_z12_r2_2026-04-18/full_aoi_visual_audit.md
@@ -0,0 +1,19 @@
+# 全国 AOI 截图对比审计
+
+## 总览
+
+- compare page: `http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf`
+- cases: `1`
+
+## 差异排序
+
+### 冲绳 10 海里 · full · z12
+
+- changed ratio: `0.786184`
+- changed pixels: `286800` / `364800`
+- mean abs rgb: `[35.1541, 37.5348, 57.2885]`
+- compare url: `http://192.168.200.184/newpec/navsea-compare-full-audit.html?deliveryTileUrl=http%3A%2F%2F192.168.200.184%2Fpbf-delivery-full-20260418-staging-z12%2F%7Bz%7D%2F%7Bx%7D%2F%7By%7D.pbf&variant=full&audit=1¢er=127.67%2C26.21&zoom=12`
+- left image: `/root/sourceserver/pbf/report/full_rebuild_staging_okinawa_z12_r2_2026-04-18/okinawa_10nm_full_z12/compare_left.png`
+- right image: `/root/sourceserver/pbf/report/full_rebuild_staging_okinawa_z12_r2_2026-04-18/okinawa_10nm_full_z12/compare_right.png`
+- diff image: `/root/sourceserver/pbf/report/full_rebuild_staging_okinawa_z12_r2_2026-04-18/okinawa_10nm_full_z12/compare_diff.png`
+
diff --git a/src/pbf/navsea-compare-full-audit.html b/src/pbf/navsea-compare-full-audit.html
index de50e1f..cd19e56 100644
--- a/src/pbf/navsea-compare-full-audit.html
+++ b/src/pbf/navsea-compare-full-audit.html
@@ -317,12 +317,13 @@