{
  "schema": "proca.pilot.single_video_geometry.v1",
  "generated_at_local": "2026-08-09T19:25:41-06:00",
  "scope": {
    "source_count": 1,
    "source_isolation": "Sólo se analizó el primer video indicado; no se usaron fotos, otros videos ni el modelo previo para derivar geometría.",
    "model_or_site_modified": false,
    "purpose": "Evaluar cuánto aporta un video comprimido a una reconstrucción económica antes de integrar resultados."
  },
  "source": {
    "path": "C:\\Users\\sodpi\\Downloads\\WhatsApp Video 2026-08-09 at 12.46.52 PM.mp4",
    "file_name": "WhatsApp Video 2026-08-09 at 12.46.52 PM.mp4",
    "size_bytes": 23454632,
    "sha256": "6265617a543d93a125ac864790dccf6ecfbbbe7012c2f881e263575cf8489aa7",
    "container_average_bitrate_mbps_includes_audio_and_overhead": 1.476,
    "decoded_codec_fourcc": "h264",
    "width_px": 478,
    "height_px": 850,
    "orientation": "vertical",
    "fps_reported": 29.889788,
    "frame_count_reported": 3800,
    "duration_s": 127.134,
    "capture_intrinsics": "no_disponibles",
    "lens_distortion_calibration": "no_disponible",
    "absolute_scale_reference": "no_disponible"
  },
  "method": {
    "temporal_sampling_for_aggregate_metrics": "1 fotograma por segundo",
    "keyframe_selection": "14 fotogramas estratificados por cambio de recinto, transición y cobertura visual; no equivale a segmentación automática.",
    "image_metrics": [
      "varianza de Laplaciano como indicador relativo de nitidez",
      "luminancia, sombras y altas luces",
      "densidad de bordes"
    ],
    "line_extraction": "CLAHE + Canny + HoughLinesP; supresión de segmentos casi duplicados.",
    "vanishing_points": "Hipótesis RANSAC por intersección de rectas; sólo se etiqueta confiable una convergencia con siete o más soportes espacialmente distribuidos, abanico direccional acotado y residuo angular bajo.",
    "critical_note": "Una dirección proyectiva confiable no entrega por sí sola dimensiones métricas ni convierte el video en levantamiento arquitectónico."
  },
  "aggregate_quality": {
    "sample_count": 128,
    "laplacian_variance": {
      "p10": 28.9,
      "p25": 47.53,
      "median": 94.83,
      "p75": 146.31,
      "p90": 206.43
    },
    "luminance_mean_0_255": {
      "minimum": 74.8,
      "median": 123.38,
      "maximum": 156.37
    },
    "frames_with_mean_luminance_below_55_pct": 0.0,
    "frames_with_shadow_area_above_20pct": 0.78,
    "frames_with_highlight_area_above_5pct": 4.69,
    "interpretation": [
      "La resolución vertical permite reconocer recintos, pasos y mobiliario grande, pero ofrece poco detalle transversal para herrajes o perfiles finos.",
      "El movimiento, la compresión y los cambios bruscos de exposición producen tramos con evidencia geométrica débil.",
      "La nitidez se interpreta sólo de forma relativa dentro del mismo archivo; no es una medición física de precisión."
    ]
  },
  "keyframes": [
    {
      "id": "kf-01",
      "timestamp_s": 1.5,
      "source_frame_index": 45,
      "scene_label": "umbral del baño",
      "evidence_status": "observado",
      "image": "keyframes/kf-01-001.5s.jpg",
      "overlay": "overlays/kf-01-001.5s-lines.jpg",
      "metrics": {
        "laplacian_variance": 211.32,
        "luminance_mean_0_255": 117.98,
        "luminance_std": 48.68,
        "shadow_pixels_pct": 4.36,
        "highlight_pixels_pct": 1.45,
        "edge_density_pct": 6.38,
        "sharpness_percentile_within_video": 90.6,
        "sharpness_label": "alta_relativa",
        "histogram_difference_from_previous_keyframe_0_1": null,
        "structural_line_count": 42,
        "reliable_vanishing_point_count": 0
      },
      "vanishing_points_reliable": [],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            104.1,
            9139.7
          ],
          "point_normalized": [
            0.2177,
            10.7525
          ],
          "supporting_line_count": 16,
          "support_ratio": 0.381,
          "median_angular_residual_deg": 0.614,
          "support_angle_span_deg": 3.51,
          "midpoint_span_normalized": 0.527,
          "off_frame_distance_diagonals": 8.937,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            37.3,
            18.0
          ],
          "point_normalized": [
            0.078,
            0.0212
          ],
          "supporting_line_count": 6,
          "support_ratio": 0.231,
          "median_angular_residual_deg": 0.22,
          "support_angle_span_deg": 7.46,
          "midpoint_span_normalized": 0.187,
          "off_frame_distance_diagonals": 0.466,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            100.6,
            490.8
          ],
          "point_normalized": [
            0.2104,
            0.5774
          ],
          "supporting_line_count": 4,
          "support_ratio": 0.2,
          "median_angular_residual_deg": 0.004,
          "support_angle_span_deg": 97.97,
          "midpoint_span_normalized": 0.364,
          "off_frame_distance_diagonals": 0.157,
          "status": "hipotesis_no_confiable"
        }
      ]
    },
    {
      "id": "kf-02",
      "timestamp_s": 7.0,
      "source_frame_index": 209,
      "scene_label": "interior del baño",
      "evidence_status": "observado",
      "image": "keyframes/kf-02-007.0s.jpg",
      "overlay": "overlays/kf-02-007.0s-lines.jpg",
      "metrics": {
        "laplacian_variance": 51.2,
        "luminance_mean_0_255": 145.07,
        "luminance_std": 35.65,
        "shadow_pixels_pct": 0.37,
        "highlight_pixels_pct": 3.11,
        "edge_density_pct": 1.39,
        "sharpness_percentile_within_video": 28.1,
        "sharpness_label": "media_relativa",
        "histogram_difference_from_previous_keyframe_0_1": 0.578,
        "structural_line_count": 37,
        "reliable_vanishing_point_count": 1
      },
      "vanishing_points_reliable": [
        {
          "point_px": [
            3105.1,
            597.9
          ],
          "point_normalized": [
            6.496,
            0.7034
          ],
          "supporting_line_count": 9,
          "support_ratio": 0.243,
          "median_angular_residual_deg": 0.092,
          "support_angle_span_deg": 4.75,
          "midpoint_span_normalized": 0.288,
          "off_frame_distance_diagonals": 2.944,
          "status": "confiable_para_direccion_proyectiva"
        }
      ],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            3105.1,
            597.9
          ],
          "point_normalized": [
            6.496,
            0.7034
          ],
          "supporting_line_count": 9,
          "support_ratio": 0.243,
          "median_angular_residual_deg": 0.092,
          "support_angle_span_deg": 4.75,
          "midpoint_span_normalized": 0.288,
          "off_frame_distance_diagonals": 2.944,
          "status": "confiable_para_direccion_proyectiva"
        },
        {
          "point_px": [
            462.3,
            131.2
          ],
          "point_normalized": [
            0.9671,
            0.1543
          ],
          "supporting_line_count": 5,
          "support_ratio": 0.179,
          "median_angular_residual_deg": 0.053,
          "support_angle_span_deg": 10.23,
          "midpoint_span_normalized": 0.285,
          "off_frame_distance_diagonals": 0.378,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            410.3,
            552.8
          ],
          "point_normalized": [
            0.8583,
            0.6503
          ],
          "supporting_line_count": 5,
          "support_ratio": 0.217,
          "median_angular_residual_deg": 0.307,
          "support_angle_span_deg": 95.94,
          "midpoint_span_normalized": 0.227,
          "off_frame_distance_diagonals": 0.219,
          "status": "hipotesis_no_confiable"
        }
      ]
    },
    {
      "id": "kf-03",
      "timestamp_s": 14.0,
      "source_frame_index": 418,
      "scene_label": "salida del baño hacia recibidor",
      "evidence_status": "observado_por_cruce",
      "image": "keyframes/kf-03-014.0s.jpg",
      "overlay": "overlays/kf-03-014.0s-lines.jpg",
      "metrics": {
        "laplacian_variance": 90.66,
        "luminance_mean_0_255": 137.76,
        "luminance_std": 42.17,
        "shadow_pixels_pct": 0.25,
        "highlight_pixels_pct": 1.06,
        "edge_density_pct": 1.97,
        "sharpness_percentile_within_video": 47.7,
        "sharpness_label": "media_relativa",
        "histogram_difference_from_previous_keyframe_0_1": 0.058,
        "structural_line_count": 42,
        "reliable_vanishing_point_count": 2
      },
      "vanishing_points_reliable": [
        {
          "point_px": [
            -93.8,
            2856.7
          ],
          "point_normalized": [
            -0.1963,
            3.3608
          ],
          "supporting_line_count": 11,
          "support_ratio": 0.262,
          "median_angular_residual_deg": 0.435,
          "support_angle_span_deg": 5.51,
          "midpoint_span_normalized": 0.62,
          "off_frame_distance_diagonals": 2.517,
          "status": "confiable_para_direccion_proyectiva"
        },
        {
          "point_px": [
            116.1,
            -352.5
          ],
          "point_normalized": [
            0.2428,
            -0.4147
          ],
          "supporting_line_count": 7,
          "support_ratio": 0.28,
          "median_angular_residual_deg": 0.208,
          "support_angle_span_deg": 11.44,
          "midpoint_span_normalized": 0.488,
          "off_frame_distance_diagonals": 0.807,
          "status": "confiable_para_direccion_proyectiva"
        }
      ],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            -93.8,
            2856.7
          ],
          "point_normalized": [
            -0.1963,
            3.3608
          ],
          "supporting_line_count": 11,
          "support_ratio": 0.262,
          "median_angular_residual_deg": 0.435,
          "support_angle_span_deg": 5.51,
          "midpoint_span_normalized": 0.62,
          "off_frame_distance_diagonals": 2.517,
          "status": "confiable_para_direccion_proyectiva"
        },
        {
          "point_px": [
            154.9,
            439.7
          ],
          "point_normalized": [
            0.3242,
            0.5173
          ],
          "supporting_line_count": 6,
          "support_ratio": 0.194,
          "median_angular_residual_deg": 0.258,
          "support_angle_span_deg": 55.16,
          "midpoint_span_normalized": 0.147,
          "off_frame_distance_diagonals": 0.088,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            116.1,
            -352.5
          ],
          "point_normalized": [
            0.2428,
            -0.4147
          ],
          "supporting_line_count": 7,
          "support_ratio": 0.28,
          "median_angular_residual_deg": 0.208,
          "support_angle_span_deg": 11.44,
          "midpoint_span_normalized": 0.488,
          "off_frame_distance_diagonals": 0.807,
          "status": "confiable_para_direccion_proyectiva"
        }
      ]
    },
    {
      "id": "kf-04",
      "timestamp_s": 21.0,
      "source_frame_index": 628,
      "scene_label": "recibidor/vestíbulo",
      "evidence_status": "observado",
      "image": "keyframes/kf-04-021.0s.jpg",
      "overlay": "overlays/kf-04-021.0s-lines.jpg",
      "metrics": {
        "laplacian_variance": 183.08,
        "luminance_mean_0_255": 130.36,
        "luminance_std": 53.3,
        "shadow_pixels_pct": 2.16,
        "highlight_pixels_pct": 1.18,
        "edge_density_pct": 4.09,
        "sharpness_percentile_within_video": 87.5,
        "sharpness_label": "alta_relativa",
        "histogram_difference_from_previous_keyframe_0_1": 0.929,
        "structural_line_count": 42,
        "reliable_vanishing_point_count": 0
      },
      "vanishing_points_reliable": [],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            422.0,
            7032.2
          ],
          "point_normalized": [
            0.8829,
            8.2731
          ],
          "supporting_line_count": 16,
          "support_ratio": 0.381,
          "median_angular_residual_deg": 0.697,
          "support_angle_span_deg": 5.55,
          "midpoint_span_normalized": 0.509,
          "off_frame_distance_diagonals": 6.778,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            357.1,
            571.0
          ],
          "point_normalized": [
            0.747,
            0.6718
          ],
          "supporting_line_count": 6,
          "support_ratio": 0.231,
          "median_angular_residual_deg": 0.104,
          "support_angle_span_deg": 38.75,
          "midpoint_span_normalized": 0.38,
          "off_frame_distance_diagonals": 0.193,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            -85.2,
            284.1
          ],
          "point_normalized": [
            -0.1783,
            0.3342
          ],
          "supporting_line_count": 4,
          "support_ratio": 0.2,
          "median_angular_residual_deg": 0.048,
          "support_angle_span_deg": 42.98,
          "midpoint_span_normalized": 0.343,
          "off_frame_distance_diagonals": 0.363,
          "status": "hipotesis_no_confiable"
        }
      ]
    },
    {
      "id": "kf-05",
      "timestamp_s": 30.0,
      "source_frame_index": 897,
      "scene_label": "vano de habitación oscura",
      "evidence_status": "observado_parcial",
      "image": "keyframes/kf-05-030.0s.jpg",
      "overlay": "overlays/kf-05-030.0s-lines.jpg",
      "metrics": {
        "laplacian_variance": 140.6,
        "luminance_mean_0_255": 130.9,
        "luminance_std": 52.47,
        "shadow_pixels_pct": 3.51,
        "highlight_pixels_pct": 0.14,
        "edge_density_pct": 4.03,
        "sharpness_percentile_within_video": 72.7,
        "sharpness_label": "alta_relativa",
        "histogram_difference_from_previous_keyframe_0_1": 0.986,
        "structural_line_count": 42,
        "reliable_vanishing_point_count": 0
      },
      "vanishing_points_reliable": [],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            76.9,
            5452.3
          ],
          "point_normalized": [
            0.1608,
            6.4145
          ],
          "supporting_line_count": 21,
          "support_ratio": 0.5,
          "median_angular_residual_deg": 0.38,
          "support_angle_span_deg": 5.98,
          "midpoint_span_normalized": 0.558,
          "off_frame_distance_diagonals": 5.158,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            9.9,
            431.2
          ],
          "point_normalized": [
            0.0206,
            0.5073
          ],
          "supporting_line_count": 4,
          "support_ratio": 0.19,
          "median_angular_residual_deg": 0.076,
          "support_angle_span_deg": 57.63,
          "midpoint_span_normalized": 0.424,
          "off_frame_distance_diagonals": 0.235,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            192.1,
            134.6
          ],
          "point_normalized": [
            0.4018,
            0.1583
          ],
          "supporting_line_count": 4,
          "support_ratio": 0.235,
          "median_angular_residual_deg": 0.078,
          "support_angle_span_deg": 77.01,
          "midpoint_span_normalized": 0.387,
          "off_frame_distance_diagonals": 0.302,
          "status": "hipotesis_no_confiable"
        }
      ]
    },
    {
      "id": "kf-06",
      "timestamp_s": 39.0,
      "source_frame_index": 1166,
      "scene_label": "paso del recibidor hacia cocina/comedor",
      "evidence_status": "observado",
      "image": "keyframes/kf-06-039.0s.jpg",
      "overlay": "overlays/kf-06-039.0s-lines.jpg",
      "metrics": {
        "laplacian_variance": 229.35,
        "luminance_mean_0_255": 117.82,
        "luminance_std": 49.94,
        "shadow_pixels_pct": 0.86,
        "highlight_pixels_pct": 0.46,
        "edge_density_pct": 5.99,
        "sharpness_percentile_within_video": 93.0,
        "sharpness_label": "alta_relativa",
        "histogram_difference_from_previous_keyframe_0_1": 0.892,
        "structural_line_count": 42,
        "reliable_vanishing_point_count": 0
      },
      "vanishing_points_reliable": [],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            110.6,
            5424.4
          ],
          "point_normalized": [
            0.2314,
            6.3817
          ],
          "supporting_line_count": 21,
          "support_ratio": 0.5,
          "median_angular_residual_deg": 0.638,
          "support_angle_span_deg": 6.5,
          "midpoint_span_normalized": 0.587,
          "off_frame_distance_diagonals": 5.128,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            143.6,
            196.6
          ],
          "point_normalized": [
            0.3005,
            0.2313
          ],
          "supporting_line_count": 7,
          "support_ratio": 0.333,
          "median_angular_residual_deg": 0.351,
          "support_angle_span_deg": 50.14,
          "midpoint_span_normalized": 0.416,
          "off_frame_distance_diagonals": 0.254,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            307.7,
            4340.2
          ],
          "point_normalized": [
            0.6438,
            5.1061
          ],
          "supporting_line_count": 5,
          "support_ratio": 0.357,
          "median_angular_residual_deg": 0.179,
          "support_angle_span_deg": 4.08,
          "midpoint_span_normalized": 0.351,
          "off_frame_distance_diagonals": 4.015,
          "status": "hipotesis_no_confiable"
        }
      ]
    },
    {
      "id": "kf-07",
      "timestamp_s": 49.0,
      "source_frame_index": 1465,
      "scene_label": "franja verde de transición junto a cocina",
      "evidence_status": "observado_con_limite_ambiguo",
      "image": "keyframes/kf-07-049.0s.jpg",
      "overlay": "overlays/kf-07-049.0s-lines.jpg",
      "metrics": {
        "laplacian_variance": 103.84,
        "luminance_mean_0_255": 117.42,
        "luminance_std": 51.57,
        "shadow_pixels_pct": 3.17,
        "highlight_pixels_pct": 0.17,
        "edge_density_pct": 3.87,
        "sharpness_percentile_within_video": 55.5,
        "sharpness_label": "media_relativa",
        "histogram_difference_from_previous_keyframe_0_1": 0.516,
        "structural_line_count": 42,
        "reliable_vanishing_point_count": 2
      },
      "vanishing_points_reliable": [
        {
          "point_px": [
            331.7,
            4538.0
          ],
          "point_normalized": [
            0.694,
            5.3388
          ],
          "supporting_line_count": 11,
          "support_ratio": 0.262,
          "median_angular_residual_deg": 0.422,
          "support_angle_span_deg": 4.89,
          "midpoint_span_normalized": 0.521,
          "off_frame_distance_diagonals": 4.219,
          "status": "confiable_para_direccion_proyectiva"
        },
        {
          "point_px": [
            -3022.8,
            420.7
          ],
          "point_normalized": [
            -6.3239,
            0.4949
          ],
          "supporting_line_count": 13,
          "support_ratio": 0.419,
          "median_angular_residual_deg": 0.241,
          "support_angle_span_deg": 10.15,
          "midpoint_span_normalized": 0.63,
          "off_frame_distance_diagonals": 3.345,
          "status": "confiable_para_direccion_proyectiva"
        }
      ],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            331.7,
            4538.0
          ],
          "point_normalized": [
            0.694,
            5.3388
          ],
          "supporting_line_count": 11,
          "support_ratio": 0.262,
          "median_angular_residual_deg": 0.422,
          "support_angle_span_deg": 4.89,
          "midpoint_span_normalized": 0.521,
          "off_frame_distance_diagonals": 4.219,
          "status": "confiable_para_direccion_proyectiva"
        },
        {
          "point_px": [
            -3022.8,
            420.7
          ],
          "point_normalized": [
            -6.3239,
            0.4949
          ],
          "supporting_line_count": 13,
          "support_ratio": 0.419,
          "median_angular_residual_deg": 0.241,
          "support_angle_span_deg": 10.15,
          "midpoint_span_normalized": 0.63,
          "off_frame_distance_diagonals": 3.345,
          "status": "confiable_para_direccion_proyectiva"
        },
        {
          "point_px": [
            279.7,
            363.5
          ],
          "point_normalized": [
            0.5852,
            0.4277
          ],
          "supporting_line_count": 5,
          "support_ratio": 0.278,
          "median_angular_residual_deg": 0.186,
          "support_angle_span_deg": 88.4,
          "midpoint_span_normalized": 0.676,
          "off_frame_distance_diagonals": 0.076,
          "status": "hipotesis_no_confiable"
        }
      ]
    },
    {
      "id": "kf-08",
      "timestamp_s": 57.0,
      "source_frame_index": 1704,
      "scene_label": "muro de gabinetes de cocina",
      "evidence_status": "observado",
      "image": "keyframes/kf-08-057.0s.jpg",
      "overlay": "overlays/kf-08-057.0s-lines.jpg",
      "metrics": {
        "laplacian_variance": 90.02,
        "luminance_mean_0_255": 114.12,
        "luminance_std": 50.17,
        "shadow_pixels_pct": 6.12,
        "highlight_pixels_pct": 0.2,
        "edge_density_pct": 2.92,
        "sharpness_percentile_within_video": 46.9,
        "sharpness_label": "media_relativa",
        "histogram_difference_from_previous_keyframe_0_1": 0.373,
        "structural_line_count": 42,
        "reliable_vanishing_point_count": 1
      },
      "vanishing_points_reliable": [
        {
          "point_px": [
            -2610.7,
            490.0
          ],
          "point_normalized": [
            -5.4617,
            0.5765
          ],
          "supporting_line_count": 15,
          "support_ratio": 0.357,
          "median_angular_residual_deg": 0.309,
          "support_angle_span_deg": 11.55,
          "midpoint_span_normalized": 0.64,
          "off_frame_distance_diagonals": 2.923,
          "status": "confiable_para_direccion_proyectiva"
        }
      ],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            -2610.7,
            490.0
          ],
          "point_normalized": [
            -5.4617,
            0.5765
          ],
          "supporting_line_count": 15,
          "support_ratio": 0.357,
          "median_angular_residual_deg": 0.309,
          "support_angle_span_deg": 11.55,
          "midpoint_span_normalized": 0.64,
          "off_frame_distance_diagonals": 2.923,
          "status": "confiable_para_direccion_proyectiva"
        },
        {
          "point_px": [
            354.9,
            339.1
          ],
          "point_normalized": [
            0.7425,
            0.3989
          ],
          "supporting_line_count": 8,
          "support_ratio": 0.296,
          "median_angular_residual_deg": 0.225,
          "support_angle_span_deg": 63.87,
          "midpoint_span_normalized": 0.607,
          "off_frame_distance_diagonals": 0.148,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            451.0,
            6253.0
          ],
          "point_normalized": [
            0.9435,
            7.3565
          ],
          "supporting_line_count": 5,
          "support_ratio": 0.263,
          "median_angular_residual_deg": 0.108,
          "support_angle_span_deg": 3.81,
          "midpoint_span_normalized": 0.424,
          "off_frame_distance_diagonals": 5.98,
          "status": "hipotesis_no_confiable"
        }
      ]
    },
    {
      "id": "kf-09",
      "timestamp_s": 68.0,
      "source_frame_index": 2033,
      "scene_label": "cocina/comedor y franja verde contigua",
      "evidence_status": "observado",
      "image": "keyframes/kf-09-068.0s.jpg",
      "overlay": "overlays/kf-09-068.0s-lines.jpg",
      "metrics": {
        "laplacian_variance": 213.94,
        "luminance_mean_0_255": 113.72,
        "luminance_std": 60.08,
        "shadow_pixels_pct": 9.39,
        "highlight_pixels_pct": 2.66,
        "edge_density_pct": 4.07,
        "sharpness_percentile_within_video": 91.4,
        "sharpness_label": "alta_relativa",
        "histogram_difference_from_previous_keyframe_0_1": 0.452,
        "structural_line_count": 42,
        "reliable_vanishing_point_count": 0
      },
      "vanishing_points_reliable": [],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            144.0,
            5830.9
          ],
          "point_normalized": [
            0.3012,
            6.8599
          ],
          "supporting_line_count": 13,
          "support_ratio": 0.31,
          "median_angular_residual_deg": 0.614,
          "support_angle_span_deg": 5.95,
          "midpoint_span_normalized": 0.484,
          "off_frame_distance_diagonals": 5.544,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            1309.6,
            344.2
          ],
          "point_normalized": [
            2.7398,
            0.4049
          ],
          "supporting_line_count": 6,
          "support_ratio": 0.207,
          "median_angular_residual_deg": 0.04,
          "support_angle_span_deg": 15.78,
          "midpoint_span_normalized": 0.333,
          "off_frame_distance_diagonals": 1.101,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            208.5,
            1723.2
          ],
          "point_normalized": [
            0.4361,
            2.0273
          ],
          "supporting_line_count": 4,
          "support_ratio": 0.174,
          "median_angular_residual_deg": 0.238,
          "support_angle_span_deg": 13.59,
          "midpoint_span_normalized": 0.496,
          "off_frame_distance_diagonals": 1.332,
          "status": "hipotesis_no_confiable"
        }
      ]
    },
    {
      "id": "kf-10",
      "timestamp_s": 76.0,
      "source_frame_index": 2272,
      "scene_label": "muro de ventana de cocina",
      "evidence_status": "observado",
      "image": "keyframes/kf-10-076.0s.jpg",
      "overlay": "overlays/kf-10-076.0s-lines.jpg",
      "metrics": {
        "laplacian_variance": 142.47,
        "luminance_mean_0_255": 122.36,
        "luminance_std": 38.38,
        "shadow_pixels_pct": 0.63,
        "highlight_pixels_pct": 0.33,
        "edge_density_pct": 3.49,
        "sharpness_percentile_within_video": 73.4,
        "sharpness_label": "alta_relativa",
        "histogram_difference_from_previous_keyframe_0_1": 0.47,
        "structural_line_count": 42,
        "reliable_vanishing_point_count": 1
      },
      "vanishing_points_reliable": [
        {
          "point_px": [
            5090.2,
            408.0
          ],
          "point_normalized": [
            10.6489,
            0.48
          ],
          "supporting_line_count": 9,
          "support_ratio": 0.321,
          "median_angular_residual_deg": 0.199,
          "support_angle_span_deg": 6.89,
          "midpoint_span_normalized": 0.52,
          "off_frame_distance_diagonals": 4.975,
          "status": "confiable_para_direccion_proyectiva"
        }
      ],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            201.0,
            5852.7
          ],
          "point_normalized": [
            0.4205,
            6.8855
          ],
          "supporting_line_count": 14,
          "support_ratio": 0.333,
          "median_angular_residual_deg": 0.364,
          "support_angle_span_deg": 5.49,
          "midpoint_span_normalized": 0.464,
          "off_frame_distance_diagonals": 5.566,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            5090.2,
            408.0
          ],
          "point_normalized": [
            10.6489,
            0.48
          ],
          "supporting_line_count": 9,
          "support_ratio": 0.321,
          "median_angular_residual_deg": 0.199,
          "support_angle_span_deg": 6.89,
          "midpoint_span_normalized": 0.52,
          "off_frame_distance_diagonals": 4.975,
          "status": "confiable_para_direccion_proyectiva"
        },
        {
          "point_px": [
            214.1,
            382.2
          ],
          "point_normalized": [
            0.4478,
            0.4496
          ],
          "supporting_line_count": 6,
          "support_ratio": 0.316,
          "median_angular_residual_deg": 0.129,
          "support_angle_span_deg": 49.29,
          "midpoint_span_normalized": 0.682,
          "off_frame_distance_diagonals": 0.051,
          "status": "hipotesis_no_confiable"
        }
      ]
    },
    {
      "id": "kf-11",
      "timestamp_s": 87.0,
      "source_frame_index": 2600,
      "scene_label": "retorno de cocina/comedor hacia recibidor",
      "evidence_status": "observado_por_retorno",
      "image": "keyframes/kf-11-087.0s.jpg",
      "overlay": "overlays/kf-11-087.0s-lines.jpg",
      "metrics": {
        "laplacian_variance": 103.49,
        "luminance_mean_0_255": 122.94,
        "luminance_std": 55.12,
        "shadow_pixels_pct": 7.45,
        "highlight_pixels_pct": 2.33,
        "edge_density_pct": 3.32,
        "sharpness_percentile_within_video": 54.7,
        "sharpness_label": "media_relativa",
        "histogram_difference_from_previous_keyframe_0_1": 0.544,
        "structural_line_count": 42,
        "reliable_vanishing_point_count": 0
      },
      "vanishing_points_reliable": [],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            255.2,
            642.7
          ],
          "point_normalized": [
            0.5339,
            0.7561
          ],
          "supporting_line_count": 7,
          "support_ratio": 0.167,
          "median_angular_residual_deg": 0.136,
          "support_angle_span_deg": 132.97,
          "midpoint_span_normalized": 0.35,
          "off_frame_distance_diagonals": 0.224,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            553.7,
            393.1
          ],
          "point_normalized": [
            1.1584,
            0.4625
          ],
          "supporting_line_count": 6,
          "support_ratio": 0.171,
          "median_angular_residual_deg": 0.595,
          "support_angle_span_deg": 65.03,
          "midpoint_span_normalized": 0.481,
          "off_frame_distance_diagonals": 0.324,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            50.1,
            920.6
          ],
          "point_normalized": [
            0.1048,
            1.0831
          ],
          "supporting_line_count": 4,
          "support_ratio": 0.138,
          "median_angular_residual_deg": 0.163,
          "support_angle_span_deg": 46.3,
          "midpoint_span_normalized": 0.407,
          "off_frame_distance_diagonals": 0.544,
          "status": "hipotesis_no_confiable"
        }
      ]
    },
    {
      "id": "kf-12",
      "timestamp_s": 97.0,
      "source_frame_index": 2899,
      "scene_label": "umbral de habitación/oficina con cortinas",
      "evidence_status": "observado_por_cruce",
      "image": "keyframes/kf-12-097.0s.jpg",
      "overlay": "overlays/kf-12-097.0s-lines.jpg",
      "metrics": {
        "laplacian_variance": 84.45,
        "luminance_mean_0_255": 104.94,
        "luminance_std": 52.39,
        "shadow_pixels_pct": 5.84,
        "highlight_pixels_pct": 0.0,
        "edge_density_pct": 1.64,
        "sharpness_percentile_within_video": 43.0,
        "sharpness_label": "media_relativa",
        "histogram_difference_from_previous_keyframe_0_1": 0.757,
        "structural_line_count": 31,
        "reliable_vanishing_point_count": 0
      },
      "vanishing_points_reliable": [],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            418.0,
            5773.4
          ],
          "point_normalized": [
            0.8745,
            6.7922
          ],
          "supporting_line_count": 22,
          "support_ratio": 0.71,
          "median_angular_residual_deg": 0.268,
          "support_angle_span_deg": 3.79,
          "midpoint_span_normalized": 0.62,
          "off_frame_distance_diagonals": 5.488,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            -957.7,
            405.9
          ],
          "point_normalized": [
            -2.0036,
            0.4776
          ],
          "supporting_line_count": 5,
          "support_ratio": 0.556,
          "median_angular_residual_deg": 0.212,
          "support_angle_span_deg": 6.98,
          "midpoint_span_normalized": 0.192,
          "off_frame_distance_diagonals": 1.227,
          "status": "hipotesis_no_confiable"
        }
      ]
    },
    {
      "id": "kf-13",
      "timestamp_s": 110.0,
      "source_frame_index": 3288,
      "scene_label": "interior de habitación/oficina con cortinas",
      "evidence_status": "observado",
      "image": "keyframes/kf-13-110.0s.jpg",
      "overlay": "overlays/kf-13-110.0s-lines.jpg",
      "metrics": {
        "laplacian_variance": 109.66,
        "luminance_mean_0_255": 134.93,
        "luminance_std": 55.31,
        "shadow_pixels_pct": 7.94,
        "highlight_pixels_pct": 0.01,
        "edge_density_pct": 1.86,
        "sharpness_percentile_within_video": 59.4,
        "sharpness_label": "media_relativa",
        "histogram_difference_from_previous_keyframe_0_1": 0.906,
        "structural_line_count": 42,
        "reliable_vanishing_point_count": 0
      },
      "vanishing_points_reliable": [],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            -306.1,
            -5067.8
          ],
          "point_normalized": [
            -0.6404,
            -5.9622
          ],
          "supporting_line_count": 7,
          "support_ratio": 0.167,
          "median_angular_residual_deg": 0.516,
          "support_angle_span_deg": 2.64,
          "midpoint_span_normalized": 0.578,
          "off_frame_distance_diagonals": 5.66,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            164.6,
            727.3
          ],
          "point_normalized": [
            0.3444,
            0.8557
          ],
          "supporting_line_count": 6,
          "support_ratio": 0.171,
          "median_angular_residual_deg": 0.115,
          "support_angle_span_deg": 15.56,
          "midpoint_span_normalized": 0.455,
          "off_frame_distance_diagonals": 0.319,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            328.2,
            361.3
          ],
          "point_normalized": [
            0.6867,
            0.425
          ],
          "supporting_line_count": 5,
          "support_ratio": 0.172,
          "median_angular_residual_deg": 0.348,
          "support_angle_span_deg": 78.42,
          "midpoint_span_normalized": 0.525,
          "off_frame_distance_diagonals": 0.112,
          "status": "hipotesis_no_confiable"
        }
      ]
    },
    {
      "id": "kf-14",
      "timestamp_s": 123.0,
      "source_frame_index": 3676,
      "scene_label": "salida de habitación/oficina hacia recibidor",
      "evidence_status": "observado_por_retorno",
      "image": "keyframes/kf-14-123.0s.jpg",
      "overlay": "overlays/kf-14-123.0s-lines.jpg",
      "metrics": {
        "laplacian_variance": 59.59,
        "luminance_mean_0_255": 128.24,
        "luminance_std": 79.46,
        "shadow_pixels_pct": 3.11,
        "highlight_pixels_pct": 12.26,
        "edge_density_pct": 2.39,
        "sharpness_percentile_within_video": 34.4,
        "sharpness_label": "media_relativa",
        "histogram_difference_from_previous_keyframe_0_1": 0.891,
        "structural_line_count": 40,
        "reliable_vanishing_point_count": 0
      },
      "vanishing_points_reliable": [],
      "vanishing_point_hypotheses_all": [
        {
          "point_px": [
            280.8,
            8118.6
          ],
          "point_normalized": [
            0.5874,
            9.5513
          ],
          "supporting_line_count": 19,
          "support_ratio": 0.475,
          "median_angular_residual_deg": 0.579,
          "support_angle_span_deg": 4.56,
          "midpoint_span_normalized": 0.54,
          "off_frame_distance_diagonals": 7.89,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            -592.2,
            390.3
          ],
          "point_normalized": [
            -1.2389,
            0.4592
          ],
          "supporting_line_count": 8,
          "support_ratio": 0.381,
          "median_angular_residual_deg": 0.217,
          "support_angle_span_deg": 33.62,
          "midpoint_span_normalized": 0.59,
          "off_frame_distance_diagonals": 0.853,
          "status": "hipotesis_no_confiable"
        },
        {
          "point_px": [
            31.0,
            681.0
          ],
          "point_normalized": [
            0.0648,
            0.8012
          ],
          "supporting_line_count": 5,
          "support_ratio": 0.385,
          "median_angular_residual_deg": 0.077,
          "support_angle_span_deg": 24.04,
          "midpoint_span_normalized": 0.227,
          "off_frame_distance_diagonals": 0.338,
          "status": "hipotesis_no_confiable"
        }
      ]
    }
  ],
  "chronology": [
    {
      "start_s": 0.0,
      "end_s": 10.5,
      "space": "baño",
      "status": "observado",
      "evidence": "El recorrido inicia mirando y entrando al recinto sanitario; se ven el umbral, revestimientos, luminarias y elementos parciales del baño.",
      "metric_recoverability": "topología y rasgos generales; dimensiones no recuperables sin referencia de escala"
    },
    {
      "start_s": 10.5,
      "end_s": 27.0,
      "space": "recibidor o vestíbulo",
      "status": "observado",
      "evidence": "Se cruza directamente desde el baño a un espacio claro con piso reticulado, consola, plantas, cortina y varios vanos.",
      "metric_recoverability": "direcciones de muros y posición relativa de vanos; profundidad métrica ambigua"
    },
    {
      "start_s": 27.0,
      "end_s": 34.5,
      "space": "habitación oscura conectada al recibidor",
      "status": "observado_parcial",
      "evidence": "La cámara se asoma por un vano a un recinto oscuro; el interior queda subexpuesto y no se recorre todavía.",
      "metric_recoverability": "sólo conexión y abertura; perímetro no recuperable en este tramo"
    },
    {
      "start_s": 34.5,
      "end_s": 46.0,
      "space": "transición recibidor–cocina/comedor",
      "status": "observado",
      "evidence": "Se vuelve al recibidor y se atraviesa un paso amplio hacia la zona de cocina/comedor.",
      "metric_recoverability": "conectividad directa y orientación aproximada; ancho real del paso no disponible"
    },
    {
      "start_s": 46.0,
      "end_s": 89.0,
      "space": "cocina/comedor",
      "status": "observado",
      "evidence": "Cobertura desde varios ángulos de gabinetes, cubierta, parrilla, campana, mesa, sillas, ventana horizontal, dispensador y luminarias.",
      "metric_recoverability": "envolvente visual y objetos grandes; cotas y espesores no recuperables"
    },
    {
      "start_s": 62.0,
      "end_s": 88.0,
      "space": "franja verde contigua a cocina/comedor",
      "status": "observado_con_identidad_ambigua",
      "evidence": "Se ve continuidad visual mediante una abertura hacia una zona verde con escritorio y cortina.",
      "metric_recoverability": "relación visual observada; no se puede decidir sólo aquí si es recinto independiente o parte de una planta abierta"
    },
    {
      "start_s": 89.0,
      "end_s": 95.0,
      "space": "retorno al recibidor",
      "status": "observado",
      "evidence": "La cámara regresa por el mismo paso y vuelve a alinear los vanos del recibidor.",
      "metric_recoverability": "refuerza la conexión cocina/comedor–recibidor"
    },
    {
      "start_s": 95.0,
      "end_s": 123.0,
      "space": "habitación/oficina con cortinas",
      "status": "observado",
      "evidence": "Se atraviesa el vano y se recorre un recinto con muro cortinado, escritorio, silla y mueble auxiliar.",
      "metric_recoverability": "perímetro aproximable por líneas; aquello detrás de las cortinas no es observable"
    },
    {
      "start_s": 123.0,
      "end_s": 127.134,
      "space": "salida de habitación hacia recibidor",
      "status": "observado",
      "evidence": "El final muestra de nuevo el marco y el espacio claro exterior al recinto.",
      "metric_recoverability": "confirma la misma conexión; no agrega escala"
    }
  ],
  "topology": {
    "nodes": [
      {
        "id": "bathroom",
        "label": "Baño",
        "status": "observado"
      },
      {
        "id": "vestibule",
        "label": "Recibidor/vestíbulo",
        "status": "observado"
      },
      {
        "id": "kitchen_dining",
        "label": "Cocina/comedor",
        "status": "observado"
      },
      {
        "id": "green_adjacent_zone",
        "label": "Franja verde contigua",
        "status": "observado_con_limite_ambiguo"
      },
      {
        "id": "curtained_office",
        "label": "Habitación/oficina con cortinas",
        "status": "observado"
      }
    ],
    "edges": [
      {
        "from": "bathroom",
        "to": "vestibule",
        "status": "observado_por_cruce",
        "evidence_s": [
          8.0,
          13.0
        ]
      },
      {
        "from": "vestibule",
        "to": "kitchen_dining",
        "status": "observado_por_cruce_y_retorno",
        "evidence_s": [
          39.0,
          46.0,
          87.0,
          92.0
        ]
      },
      {
        "from": "vestibule",
        "to": "curtained_office",
        "status": "observado_por_vano_y_cruce",
        "evidence_s": [
          30.0,
          95.0,
          123.0
        ]
      },
      {
        "from": "kitchen_dining",
        "to": "green_adjacent_zone",
        "status": "continuidad_visual_observada_limite_no_resuelto",
        "evidence_s": [
          62.0,
          68.0,
          87.0
        ]
      }
    ],
    "not_recoverable": [
      "orden métrico exacto de todos los muros",
      "espesores de muros",
      "distancias absolutas",
      "qué existe detrás de cortinas o puertas cerradas",
      "relación con plantas inferior/superior"
    ]
  },
  "objects": [
    {
      "category": "gabinetes y cubierta de cocina",
      "status": "observado_desde_varios_angulos",
      "digitalization_potential": "medio_alto",
      "limitation": "sin cota patrón; herrajes y profundidad quedan débiles por resolución y oclusión",
      "evidence_s": [
        49.0,
        57.0,
        76.0
      ]
    },
    {
      "category": "parrilla/cocción y campana",
      "status": "observado",
      "digitalization_potential": "medio",
      "limitation": "forma general visible; modelo/marca y dimensiones no recuperables",
      "evidence_s": [
        50.0,
        57.0,
        76.0
      ]
    },
    {
      "category": "mesa y sillas de comedor",
      "status": "observado_con_oclusiones",
      "digitalization_potential": "medio",
      "limitation": "objetos y contenido sobre la mesa ocultan geometría",
      "evidence_s": [
        49.0,
        57.0,
        68.0
      ]
    },
    {
      "category": "ventana horizontal de cocina",
      "status": "observado",
      "digitalization_potential": "medio",
      "limitation": "perspectiva oblicua y falta de cota",
      "evidence_s": [
        70.0,
        76.0
      ]
    },
    {
      "category": "dispensador y mueble auxiliar",
      "status": "observado",
      "digitalization_potential": "medio",
      "limitation": "cobertura parcial",
      "evidence_s": [
        70.0,
        76.0
      ]
    },
    {
      "category": "consola y plantas del recibidor",
      "status": "observado",
      "digitalization_potential": "medio",
      "limitation": "plantas no son apropiadas para modelo paramétrico exacto",
      "evidence_s": [
        14.0,
        21.0,
        39.0
      ]
    },
    {
      "category": "escritorio, silla y mueble de oficina",
      "status": "observado",
      "digitalization_potential": "medio",
      "limitation": "pocas vistas laterales y fondo parcialmente oculto",
      "evidence_s": [
        110.0,
        118.0
      ]
    },
    {
      "category": "cortinas de habitación/oficina",
      "status": "observado",
      "digitalization_potential": "bajo_para_geometria_oculta",
      "limitation": "no permiten afirmar ventana, muro o dimensiones detrás de ellas",
      "evidence_s": [
        102.0,
        110.0
      ]
    },
    {
      "category": "elementos sanitarios",
      "status": "observado_parcial",
      "digitalization_potential": "bajo_medio",
      "limitation": "campo de visión y oclusiones impiden cobertura completa",
      "evidence_s": [
        1.5,
        7.0
      ]
    }
  ],
  "recoverability": {
    "observed_and_useful_now": [
      "secuencia de recintos recorridos",
      "conexiones atravesadas entre baño, recibidor, cocina/comedor y habitación/oficina",
      "direcciones proyectivas de muros, vanos y mobiliario en fotogramas seleccionados",
      "inventario visual de mobiliario grande"
    ],
    "inferred_with_caution": [
      "polígonos aproximados de cada recinto en coordenadas normalizadas",
      "alineaciones relativas entre muros cuando varios fotogramas coinciden",
      "volúmenes simplificados de gabinetes, mesas y escritorios"
    ],
    "not_recoverable_from_this_video_alone": [
      "escala absoluta",
      "cotas certificables",
      "calibración de lente y corrección rigurosa de distorsión",
      "geometría detrás de cortinas y zonas subexpuestas",
      "texturas de alta fidelidad o detalle fino de herrajes",
      "un plano completo sin ambigüedades"
    ]
  },
  "economical_pilot_conclusion": {
    "helps_current_work": true,
    "best_use": "producir un grafo topológico, un modelo de masas y candidatos de mobiliario antes de medir",
    "unsafe_use": "tratar el resultado como levantamiento métrico o fabricar mobiliario a partir de él",
    "minimum_next_capture_to_gain_metric_value": [
      "una medida láser por recinto o una barra patrón rígida visible",
      "captura original 4K sin reenvío de WhatsApp",
      "movimiento lento con 60–80 % de traslape y pausas en esquinas",
      "una tarjeta ChArUco o AprilTag para escala y pose",
      "tomas con cortinas abiertas y zonas oscuras iluminadas"
    ]
  },
  "assets": {
    "keyframe_contact_sheet": "contact-sheets/keyframes.jpg",
    "line_overlay_contact_sheet": "contact-sheets/line-overlays.jpg",
    "keyframe_directory": "keyframes/",
    "overlay_directory": "overlays/"
  }
}