Repository Analysis

OpenDroneMap/ODM

A command line toolkit to generate maps, point clouds, 3D models and DEMs from drone, balloon or kite images. 📷

18.0 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of OpenDroneMap/ODM, a Python project with 6,349 GitHub stars. SynthScan v2.0 examined 25,400 lines of code across 186 source files, recording 366 pattern matches distributed across 12 syntactic categories. The overall adjusted score of 18.0 places this repository in the Moderate AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

18.0
Adjusted Score
18.0
Raw Score
100%
Time Factor
2026-07-31
Last Push
6.3K
Stars
Python
Language
25.4K
Lines of Code
186
Files
366
Pattern Hits
2026-08-02
Scan Date
0.03
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 5MEDIUM 40LOW 321

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 366 distinct pattern matches across 12 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Excessive Try-Catch Wrapping96 hits · 114 pts
SeverityFileLineSnippetContext
LOWstages/odm_postprocess.py22 except Exception as e:CODE
LOWstages/odm_georeferencing.py82 except Exception as e:CODE
LOWstages/odm_georeferencing.py146 except Exception as e:CODE
LOWstages/odm_georeferencing.py222 except Exception as e:CODE
LOWstages/odm_georeferencing.py236 except Exception as e:CODE
LOWstages/odm_georeferencing.py250 except Exception as e:CODE
LOWstages/mvstex.py139 except Exception as e:CODE
LOWstages/mvstex.py159 except Exception as e:CODE
LOWstages/dataset.py59 except Exception as e:CODE
LOWstages/dataset.py120 except Exception as e:CODE
LOWstages/dataset.py149 except Exception as e:CODE
LOWstages/dataset.py236 except Exception as e:CODE
LOWstages/dataset.py277 except Exception as e:CODE
MEDIUMstages/dataset.py226def parallel_sky_filter(item):CODE
MEDIUMstages/dataset.py267def parallel_bg_filter(item):CODE
LOWstages/splitmerge.py226 except Exception as e:CODE
LOWstages/odm_app.py116 except Exception as e:CODE
MEDIUMstages/odm_app.py80def execute(self):CODE
LOWtests/test_remote.py88 except Exception as e:CODE
MEDIUMtests/test_remote.py75def monitor():CODE
LOWcontrib/fix_ply/fix_ply.py20 except Exception as e:CODE
LOWcontrib/fix_ply/fix_ply.py46 except Exception as e:CODE
MEDIUMcontrib/resize/resize.py82 print("Error: Cannot resize {}: {}.".format(image_path, str(e)))CODE
MEDIUMcontrib/resize/resize.py110 print("Error: Cannot resize {}: {}.".format(gcp_path, str(e)))CODE
LOWopendm/cropper.py64 except Exception as e:CODE
LOWopendm/arghelpers.py37 except Exception as e:CODE
MEDIUMopendm/arghelpers.py33def save_opts(opts_json, args):CODE
LOWopendm/ogctiles.py34 except Exception as e:CODE
LOWopendm/ogctiles.py55 except Exception as e:CODE
LOWopendm/ogctiles.py69 except Exception as e:CODE
LOWopendm/ogctiles.py101 except Exception as e:CODE
LOWopendm/entwine.py34 except Exception as e:CODE
LOWopendm/entwine.py100 except Exception as e:CODE
LOWopendm/opc.py29 except Exception as e:CODE
LOWopendm/thermal.py68 except Exception as e:CODE
LOWopendm/config.py178 except Exception as e:CODE
LOWopendm/log.py145 except Exception as e:CODE
LOWopendm/remote.py46 except Exception as e:CODE
LOWopendm/remote.py170 except Exception as e:CODE
LOWopendm/remote.py205 except Exception as e:CODE
LOWopendm/remote.py318 except Exception as e:CODE
LOWopendm/remote.py325 except Exception as e:CODE
LOWopendm/remote.py418 except Exception as e:CODE
MEDIUMopendm/remote.py314def _process_local(self, done):CODE
MEDIUMopendm/remote.py321def _process_remote(self, done):CODE
LOWopendm/pseudogeo.py29 except Exception as e:CODE
LOWopendm/ai.py59 except Exception as e:CODE
LOWopendm/net.py108 except Exception as e:CODE
LOWopendm/concurrency.py56 except Exception as e:CODE
LOWopendm/gltf.py307 except Exception as e:CODE
LOWopendm/types.py452 except Exception as e:CODE
MEDIUMopendm/types.py237def georeference_with_gps(self, images_path, output_coords_file, output_model_txCODE
LOWopendm/mesh.py107 except Exception as e:CODE
LOWopendm/mesh.py176 except Exception as e:CODE
LOWopendm/utils.py96 except Exception as e:CODE
LOWopendm/utils.py157 except Exception as e:CODE
MEDIUMopendm/utils.py107def rm_r(path):CODE
LOWopendm/cogeo.py49 except Exception as e:CODE
LOWopendm/exiftool.py44 except Exception as e:CODE
LOWopendm/exiftool.py50 except Exception as e:CODE
36 more matches not shown…
Unused Imports84 hits · 83 pts
SeverityFileLineSnippetContext
LOWstages/odm_meshing.py1CODE
LOWstages/odm_meshing.py6CODE
LOWstages/odm_meshing.py8CODE
LOWstages/run_opensfm.py1CODE
LOWstages/run_opensfm.py9CODE
LOWstages/run_opensfm.py11CODE
LOWstages/odm_filterpoints.py6CODE
LOWstages/odm_postprocess.py3CODE
LOWstages/odm_dem.py1CODE
LOWstages/odm_dem.py2CODE
LOWstages/odm_dem.py7CODE
LOWstages/odm_georeferencing.py3CODE
LOWstages/odm_georeferencing.py4CODE
LOWstages/odm_georeferencing.py17CODE
LOWstages/odm_georeferencing.py23CODE
LOWstages/dataset.py11CODE
LOWstages/dataset.py12CODE
LOWstages/openmvs.py1CODE
LOWstages/openmvs.py7CODE
LOWstages/openmvs.py12CODE
LOWstages/odm_app.py3CODE
LOWstages/odm_app.py4CODE
LOWstages/odm_app.py5CODE
LOWtests/test_camera.py1CODE
LOWtests/test_photo.py2CODE
LOWtests/test_photo.py3CODE
LOWtests/test_gcp.py1CODE
LOWtests/test_remote.py6CODE
LOWcontrib/fix_ply/fix_ply.py4CODE
LOWopendm/cropper.py1CODE
LOWopendm/geo.py1CODE
LOWopendm/shots.py2CODE
LOWopendm/ogctiles.py2CODE
LOWopendm/ogctiles.py6CODE
LOWopendm/entwine.py2CODE
LOWopendm/entwine.py8CODE
LOWopendm/point_cloud.py1CODE
LOWopendm/point_cloud.py1CODE
LOWopendm/point_cloud.py8CODE
LOWopendm/point_cloud.py10CODE
LOWopendm/point_cloud.py11CODE
LOWopendm/concurrency.py2CODE
LOWopendm/bgfilter.py2CODE
LOWopendm/types.py14CODE
LOWopendm/mesh.py1CODE
LOWopendm/mesh.py2CODE
LOWopendm/mesh.py2CODE
LOWopendm/mesh.py2CODE
LOWopendm/mesh.py7CODE
LOWopendm/mesh.py8CODE
LOWopendm/mesh.py9CODE
LOWopendm/mesh.py10CODE
LOWopendm/location.py3CODE
LOWopendm/utils.py11CODE
LOWopendm/exiftool.py8CODE
LOWopendm/osfm.py5CODE
LOWopendm/osfm.py7CODE
LOWopendm/osfm.py16CODE
LOWopendm/osfm.py25CODE
LOWopendm/cutline.py6CODE
24 more matches not shown…
Deep Nesting80 hits · 76 pts
SeverityFileLineSnippetContext
LOWconfigure.py100CODE
LOWstages/odm_orthophoto.py19CODE
LOWstages/run_opensfm.py23CODE
LOWstages/run_opensfm.py42CODE
LOWstages/odm_report.py40CODE
LOWstages/odm_filterpoints.py13CODE
LOWstages/odm_dem.py19CODE
LOWstages/odm_georeferencing.py28CODE
LOWstages/mvstex.py14CODE
LOWstages/dataset.py48CODE
LOWstages/openmvs.py16CODE
LOWstages/splitmerge.py22CODE
LOWstages/splitmerge.py209CODE
LOWstages/odm_app.py80CODE
LOWcontrib/orthorectify/orthorectify.py200CODE
LOWopendm/geo.py8CODE
LOWopendm/shots.py26CODE
LOWopendm/shots.py130CODE
LOWopendm/ogctiles.py14CODE
LOWopendm/thermal.py24CODE
LOWopendm/point_cloud.py15CODE
LOWopendm/point_cloud.py208CODE
LOWopendm/config.py154CODE
LOWopendm/align.py145CODE
LOWopendm/remote.py58CODE
LOWopendm/remote.py294CODE
LOWopendm/remote.py328CODE
LOWopendm/remote.py94CODE
LOWopendm/net.py14CODE
LOWopendm/net.py55CODE
LOWopendm/net.py71CODE
LOWopendm/io.py71CODE
LOWopendm/gltf.py14CODE
LOWopendm/gltf.py78CODE
LOWopendm/gltf.py128CODE
LOWopendm/types.py27CODE
LOWopendm/types.py130CODE
LOWopendm/types.py237CODE
LOWopendm/location.py116CODE
LOWopendm/camera.py4CODE
LOWopendm/camera.py33CODE
LOWopendm/utils.py82CODE
LOWopendm/utils.py122CODE
LOWopendm/exiftool.py10CODE
LOWopendm/exiftool.py54CODE
LOWopendm/exiftool.py55CODE
LOWopendm/osfm.py640CODE
LOWopendm/osfm.py773CODE
LOWopendm/osfm.py85CODE
LOWopendm/osfm.py129CODE
LOWopendm/osfm.py418CODE
LOWopendm/photo.py69CODE
LOWopendm/photo.py199CODE
LOWopendm/photo.py572CODE
LOWopendm/photo.py630CODE
LOWopendm/orthophoto.py44CODE
LOWopendm/orthophoto.py196CODE
LOWopendm/orthophoto.py268CODE
LOWopendm/gcp.py15CODE
LOWopendm/gcp.py174CODE
20 more matches not shown…
Decorative Section Separators15 hits · 54 pts
SeverityFileLineSnippetContext
MEDIUMSuperBuild/CMakeLists.txt137# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMSuperBuild/CMakeLists.txt145# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMSuperBuild/CMakeLists.txt154# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMSuperBuild/CMakeLists.txt163# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMSuperBuild/CMakeLists.txt172# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMSuperBuild/CMakeLists.txt177# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMopendm/tiles/hsv_merge.py39# =============================================================================COMMENT
MEDIUMopendm/tiles/hsv_merge.py79# =============================================================================COMMENT
MEDIUMopendm/tiles/hsv_merge.py106# =============================================================================COMMENT
MEDIUMopendm/tiles/hsv_merge.py119# =============================================================================STRING
MEDIUMopendm/tiles/hsv_merge.py121# =============================================================================STRING
MEDIUMopendm/tiles/gdal2tiles.py68# =============================================================================COMMENT
MEDIUMopendm/tiles/gdal2tiles.py69# =============================================================================COMMENT
MEDIUMopendm/tiles/gdal2tiles.py70# =============================================================================COMMENT
MEDIUMopendm/tiles/gdal2tiles.py1442 # -------------------------------------------------------------------------COMMENT
Hyper-Verbose Identifiers47 hits · 49 pts
SeverityFileLineSnippetContext
LOWconfigure.py75def install_python_package_from_source(url, vcpkg, extractor, get_top_dir):CODE
LOWstages/odm_report.py31def generate_point_cloud_stats(input_point_cloud, pc_info_file, rerun=False):CODE
LOWtests/test_boundary.py24 def test_load_boundary_without_reprojection(self):CODE
LOWtests/test_boundary.py31 def test_load_boundary_reprojects_to_utm(self):CODE
LOWtests/test_osfm.py57 def test_get_submodel_argv_dict(self):CODE
LOWtests/test_cutline.py12 def test_largest_polygon_from_single_polygon(self):CODE
LOWtests/test_cutline.py21 def test_largest_polygon_from_multipolygon_union(self):CODE
LOWtests/test_cutline.py30 def test_polygon_writes_to_gpkg_with_polygon_schema(self):CODE
LOWcontrib/time-sift/Timesift_odm.py59 def clean_reconstruction_dict(subdict, key, images):STRING
LOWopendm/shots.py26def get_geojson_shots_from_opensfm(reconstruction_file, utm_srs=None, utm_offset=None, pseudo_geotiff=None, a_matrix=NonCODE
LOWopendm/boundary.py13def compute_boundary_from_shots(reconstruction_json, buffer=0, reconstruction_offset=(0, 0)):CODE
LOWopendm/dls.py86def __multilayer_transmission(phi, n, polarization=None):CODE
LOWopendm/pseudogeo.py13def add_pseudo_georeferencing(geotiff):CODE
LOWopendm/io.py71def path_or_json_string_to_dict(string):CODE
LOWopendm/rollingshutter.py67def get_rolling_shutter_readout(photo, override_value=0):CODE
LOWopendm/gltf.py78def convert_materials_to_jpeg(materials):CODE
LOWopendm/mesh.py136def screened_poisson_reconstruction(inPointCloud, outMesh, depth = 8, samples = 1, maxVertexCount=100000, pointWeight=4,CODE
LOWopendm/gsd.py102def opensfm_reconstruction_average_gsd(reconstruction_json, use_all_shots=False):CODE
LOWopendm/gsd.py173def calculate_gsd_from_focal_ratio(focal_ratio, flight_height, image_width):CODE
LOWopendm/location.py87def get_utm_zone_and_hemisphere_from(lon, lat):CODE
LOWopendm/camera.py33def get_opensfm_camera_models(cameras):CODE
LOWopendm/utils.py65def get_processing_results_paths():CODE
LOWopendm/exiftool.py10def extract_raw_thermal_image_data(image_path):CODE
LOWopendm/exiftool.py69def extract_temperature_params_from(tags):CODE
LOWopendm/osfm.py85 def check_merge_partial_reconstructions(self):CODE
LOWopendm/osfm.py498 def restore_reconstruction_backup(self):CODE
LOWopendm/osfm.py520 def add_shots_to_reconstruction(self, p2s):CODE
LOWopendm/photo.py679 def get_radiometric_calibration(self):CODE
LOWopendm/photo.py706 def get_vignetting_polynomial(self):CODE
LOWopendm/photo.py727 def get_horizontal_irradiance(self):CODE
LOWopendm/photo.py795 def override_camera_projection(self, camera_projection):CODE
LOWopendm/gpu.py12def has_popsift_and_can_handle_texsize(width, height):CODE
LOWopendm/multispectral.py287def compute_alignment_matrices(multi_camera, primary_band_name, images_path, s2p, p2s, max_concurrency=1, max_samples=30CODE
LOWopendm/multispectral.py297 def parallel_compute_homography(p):CODE
LOWopendm/tiles/tiler.py20def generate_orthophoto_tiles(geotiff, output_dir, max_concurrency, resolution):CODE
LOWopendm/tiles/tiler.py26def generate_colored_hillshade(geotiff):CODE
LOWopendm/tiles/gdal2tiles.py753def add_gdal_warp_options_to_string(vrt_string, warp_options):CODE
LOWopendm/tiles/gdal2tiles.py823def add_alpha_band_to_string_vrt(vrt_string):CODE
LOWopendm/tiles/gdal2tiles.py874def update_alpha_value_for_non_alpha_inputs(warped_vrt_dataset, options=None):CODE
LOWopendm/dem/pdal.py83def json_add_decimation_filter(json, step):CODE
LOWopendm/dem/pdal.py92def json_add_classification_filter(json, classification, equality="equals"):CODE
LOWopendm/dem/ground_rectification/point_cloud.py74 def get_extra_dimension_values(self, name):CODE
LOWopendm/dem/ground_rectification/bounds/types.py20 def percentage_of_points_inside(self, points):CODE
LOWopendm/dem/ground_rectification/bounds/types.py48 def percentage_of_points_inside(self, points):CODE
LOWopendm/dem/ground_rectification/bounds/utils.py5def calculate_convex_hull_bounds(points):CODE
LOW…ound_rectification/partition/surrounding_partitions.py49 def __find_points_for_non_surrounded_cluster(self, bounds, cluster_members, distance, min_area, min_points):CODE
LOWopendm/dem/ground_rectification/grid/builder.py24def __calculate_lonely_points(grid, point_cloud, distance):CODE
Cross-Language Confusion5 hits · 25 pts
SeverityFileLineSnippetContext
HIGHopendm/tiles/gdal2tiles.py2179 if (document.documentElement && document.documentElement.clientHeight)CODE
HIGHopendm/tiles/gdal2tiles.py2187 if (document.documentElement && document.documentElement.clientWidth)CODE
HIGHopendm/tiles/gdal2tiles.py2286 var url = document.location.toString();CODE
HIGHopendm/tiles/gdal2tiles.py2731 if (document.documentElement && document.documentElement.clientHeight)CODE
HIGHopendm/tiles/gdal2tiles.py2739 if (document.documentElement && document.documentElement.clientWidth)CODE
Self-Referential Comments7 hits · 19 pts
SeverityFileLineSnippetContext
MEDIUMopendm/cropper.py173 # Create a convex hull around the boundaryCOMMENT
MEDIUMopendm/context.py46# Define the number of coresCOMMENT
MEDIUMopendm/multispectral.py474 # Define the motion model, scale the initial warp matrix to smallest levelCOMMENT
MEDIUMopendm/tiles/gdal2tiles.py1016 # Create a KML file for this tile.COMMENT
MEDIUMopendm/tiles/gdal2tiles.py1132 # Create a KML file for this tile.COMMENT
MEDIUMopendm/dem/ground_rectification/rectify.py66 # Create a new point cloudCOMMENT
MEDIUM…m/dem/ground_rectification/partition/partition_plan.py12 """This method is expected to return a list of Partition instances"""STRING
Over-Commented Block15 hits · 14 pts
SeverityFileLineSnippetContext
LOWsettings.yaml1---COMMENT
LOWsettings.yaml21#opensfm_processes: 4 # by default this is set to $(nproc)COMMENT
LOWsettings.yaml41#texturing_skip_visibility_test: FalseCOMMENT
LOWsettings.yaml61#orthophoto_compression: DEFLATE # Options are [JPEG, LZW, PACKBITS, DEFLATE, LZMA, NONE] Don't change unless you know wCOMMENT
LOW.github/workflows/test-build-prs.yaml21 uses: docker/build-push-action@v2COMMENT
LOWopendm/video/srtparser.py121 # 2023-01-06 18:56:48,380,821COMMENT
LOWopendm/video/parameters.py1COMMENT
LOWopendm/tiles/hsv_merge.py1#!/usr/bin/env pythonCOMMENT
LOWopendm/tiles/hsv_merge.py21#COMMENT
LOWopendm/tiles/gdal2tiles.py1#!/usr/bin/env pythonCOMMENT
LOWopendm/tiles/gdal2tiles.py21# Permission is hereby granted, free of charge, to any person obtaining aCOMMENT
LOWopendm/tiles/gdal2tiles.py781 warped_vrt_dataset.GetDriver().CreateCopy(temp_file, warped_vrt_dataset)COMMENT
LOWopendm/dem/pdal.py1#!/usr/bin/env pythonCOMMENT
LOWopendm/objpacker/imagepacker/imagepacker.py1#! /usr/bin/pythonCOMMENT
LOWopendm/objpacker/imagepacker/utils.py1#! /usr/bin/pythonCOMMENT
Redundant / Tautological Comments9 hits · 14 pts
SeverityFileLineSnippetContext
LOWstages/odm_report.py52 # Check if alignment has been performed (we need to transform our shots if so)COMMENT
LOWstages/odm_filterpoints.py28 # Check if we need to compute boundaryCOMMENT
LOWstages/dataset.py107 # Check if we need to extract video framesCOMMENT
LOWstages/dataset.py176 # Check if a geo file is availableCOMMENT
LOWopendm/align.py57 # Check if we need to reproject align fileCOMMENT
LOWopendm/ai.py41 # Check if we need to download itCOMMENT
LOWopendm/video/checkers.py127 # Check if ratio of black pixels is above thresholdCOMMENT
LOWopendm/video/video2dataset.py129 # Add element to arrayCOMMENT
LOWopendm/tiles/gdal2tiles.py1289 # Output the resultsCOMMENT
AI Structural Patterns4 hits · 4 pts
SeverityFileLineSnippetContext
LOWopendm/mesh.py12CODE
LOWopendm/skyremoval/skyfilter.py71CODE
LOWopendm/dem/commands.py68CODE
LOWopendm/thermal_tools/thermal_utils.py5CODE
Example Usage Blocks2 hits · 3 pts
SeverityFileLineSnippetContext
LOWcontrib/exif-binner/exif_binner.py5# Usage:COMMENT
LOWcontrib/mask-duplicator/mask-duplicator.py16# Usage:COMMENT
AI Slop Vocabulary2 hits · 2 pts
SeverityFileLineSnippetContext
MEDIUMcontrib/time-sift/Timesift_odm.py64 # The list of valid images is prepared by removing any extension (to be robust to the .tif added by ODM)STRING
LOWopendm/multispectral.py130 # Some cameras (Micasense, DJI) store the value (nice! just return)COMMENT