A fast image processing library with low memory needs.
This report summarizes scanner evidence for libvips/libvips, a C project with 11,775 GitHub stars. SynthScan examined 285,768 lines of code across 677 source files, recording 261 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 1.0 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 237 finding(s).
Are imports declared and package/API names verified? 18 finding(s).
Are wrappers, guards, and repeated structures necessary? 64 finding(s).
Which changes need focused human review? 261 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 261 distinct pattern matches across 8 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/vips.c | 81 | /* | COMMENT |
| LOW | cplusplus/gen-operators.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | test/test_connections.c | 1 | /* Test stream*u. | COMMENT |
| LOW | test/test_keep.sh | 1 | #!/bin/sh | COMMENT |
| LOW | suppressions/ubsan_ignorelist.txt | 1 | # Ignorelist for UndefinedBehaviorSanitizer. Turns off instrumentation of | COMMENT |
| LOW | libvips/mosaicing/tbmerge.c | 101 | These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk | COMMENT |
| LOW | libvips/mosaicing/remosaic.c | 41 | #define DEBUG | COMMENT |
| LOW | libvips/mosaicing/global_balance.c | 101 | #ifdef HAVE_CONFIG_H | COMMENT |
| LOW | libvips/resample/vsqbs.cpp | 81 | COMMENT | |
| LOW | libvips/resample/affine.c | 121 | COMMENT | |
| LOW | libvips/resample/reduceh_hwy.cpp | 41 | #include <cstdlib> | COMMENT |
| LOW | libvips/resample/shrinkv.c | 81 | /* | COMMENT |
| LOW | libvips/resample/reduce.c | 41 | COMMENT | |
| LOW | libvips/resample/reduceh.cpp | 41 | These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk | COMMENT |
| LOW | libvips/resample/reducev_hwy.cpp | 41 | #include <glib/gi18n-lib.h> | COMMENT |
| LOW | libvips/resample/reducev_hwy.cpp | 81 | COMMENT | |
| LOW | libvips/resample/shrink.c | 41 | COMMENT | |
| LOW | libvips/resample/reducev.cpp | 61 | #ifdef HAVE_CONFIG_H | COMMENT |
| LOW | libvips/resample/shrinkh.c | 41 | COMMENT | |
| LOW | libvips/resample/mapim.c | 41 | COMMENT | |
| LOW | libvips/resample/bicubic.cpp | 41 | #define DEBUG | COMMENT |
| LOW | libvips/resample/thumbnail.c | 81 | #ifdef HAVE_CONFIG_H | COMMENT |
| LOW | libvips/include/vips/internal.h | 41 | COMMENT | |
| LOW | libvips/include/vips/internal.h | 61 | #else /*!O_BINARY*/ | COMMENT |
| LOW | libvips/include/vips/threadpool.h | 41 | COMMENT | |
| LOW | libvips/include/vips/almostdeprecated.h | 101 | #define MASK_IDEAL_RINGREJECT IM_MASK_IDEAL_RINGREJECT | COMMENT |
| LOW | libvips/include/vips/colour.h | 41 | COMMENT | |
| LOW | libvips/include/vips/colour.h | 61 | COMMENT | |
| LOW | libvips/include/vips/basic.h | 61 | __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 4)) | COMMENT |
| LOW | libvips/include/vips/deprecated.h | 41 | /* On win32, need to override the wingdi defs for these. Yuk! | COMMENT |
| LOW | libvips/include/vips/deprecated.h | 61 | /* picture Type */ | COMMENT |
| LOW | libvips/include/vips/deprecated.h | 81 | #define CMYK 15 | COMMENT |
| LOW | libvips/include/vips/deprecated.h | 101 | #define FMTDOUBLE 8 /* pels interpreted as unsigned double */ | COMMENT |
| LOW | libvips/include/vips/deprecated.h | 121 | #define lsize(I) IM_IMAGE_SIZEOF_LINE(I) | COMMENT |
| LOW | libvips/include/vips/deprecated.h | 141 | COMMENT | |
| LOW | libvips/include/vips/dispatch.h | 41 | COMMENT | |
| LOW | libvips/include/vips/vips7compat.h | 61 | COMMENT | |
| LOW | libvips/include/vips/vips7compat.h | 81 | COMMENT | |
| LOW | libvips/include/vips/vips7compat.h | 101 | #define im_col_C2Cucs vips_col_C2Ccmc | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 121 | #define IM_BANDFMT_DOUBLE VIPS_FORMAT_DOUBLE | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 141 | #define IM_TYPE_CMYK VIPS_INTERPRETATION_CMYK | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 161 | /* Renamed macros. | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 201 | #define im_error vips_error | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 281 | xsize, ysize, bands, bandfmt, coding, \ | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 381 | VipsDemandStyle im_char2dhint(const char *str); | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 401 | #define im_start_many vips_start_many | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 461 | #define im_malloc(IM, SZ) \ | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 481 | #define im_check_coding_rad vips_check_coding_rad | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 541 | COMMENT | |
| LOW | libvips/include/vips/vips7compat.h | 561 | #define im_ref_string_set vips_value_set_ref_string | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 581 | #define im_meta_get_string vips_image_get_string | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 601 | #define im__writehist vips__writehist | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 621 | #define im_isprefix vips_isprefix | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 641 | #define im_popenf vips_popenf | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 1281 | #define VIPS_MASK_IDEAL_RINGREJECT IM_MASK_IDEAL_RINGREJECT | COMMENT |
| LOW | libvips/include/vips/vips7compat.h | 1761 | #endif /*VIPS_ENABLE_ANCIENT*/ | COMMENT |
| LOW | libvips/include/vips/region.h | 41 | #include <vips/object.h> | COMMENT |
| LOW | libvips/include/vips/vips.h | 81 | #define VIPS_VIPS_H | COMMENT |
| LOW | libvips/include/vips/vips.h | 101 | #include <vips/object.h> | COMMENT |
| LOW | libvips/include/vips/vips.h | 121 | #include <vips/threadpool.h> | COMMENT |
| 114 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/test-suite/test_connection.py | 37 | def test_source_new_from_file(self): | CODE |
| LOW | test/test-suite/test_connection.py | 43 | def test_image_new_from_source_file(self): | CODE |
| LOW | test/test-suite/test_connection.py | 57 | def test_image_write_to_target_file(self): | CODE |
| LOW | test/test-suite/test_connection.py | 74 | def test_image_new_from_source_memory(self): | CODE |
| LOW | test/test-suite/test_connection.py | 88 | def test_image_write_to_target_memory(self): | CODE |
| LOW | test/test-suite/test_resample.py | 275 | def test_thumbnail_uhdr_linear(self): | CODE |
| LOW | test/test-suite/test_conversion.py | 345 | def test_smartcrop_rgba_premultiplied(self): | CODE |
| LOW | test/test-suite/test_conversion.py | 532 | def test_composite_non_separable(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 221 | def test_primaries_grey_preservation(self, primaries, name): | CODE |
| LOW | test/test-suite/test_cicp.py | 287 | def test_transfer_shadow_roundtrip(self, transfer, name): | CODE |
| LOW | test/test-suite/test_cicp.py | 394 | def test_jxl_srgb_not_tagged_cicp(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 402 | def test_jxl_cicp_pixel_preservation(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 414 | def test_jxl_cicp_ushort_preserved(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 437 | def test_jxl_hdr_cicp_over_icc(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 458 | def test_jxl_cicp_metadata_roundtrip(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 478 | def test_jxl_custom_primaries_roundtrip(self, primaries, name): | CODE |
| LOW | test/test-suite/test_cicp.py | 493 | def test_heif_cicp_identity_matrix_saves(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 503 | def test_heif_cicp_ushort_pixel_roundtrip(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 517 | def test_heif_cicp_bitdepth_from_metadata(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 528 | def test_heif_cicp_nclx_metadata_roundtrip(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 546 | def test_heif_cicp_nclx_kept_for_colour_signalling(self, save_options): | CODE |
| LOW | test/test-suite/test_cicp.py | 558 | def test_heif_cicp_matrix_coefficients_preserved(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 567 | def test_heif_cicp_matrix_coefficients_preserved_with_subsample(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 581 | def test_heif_hdr_nclx_with_icc(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 604 | def test_heif_hdr_nclx_with_profile_option(self, transfer): | CODE |
| LOW | test/test-suite/test_cicp.py | 619 | def test_heif_clli_roundtrip_keep_none(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 631 | def test_heif_clli_roundtrip_without_input_cicp(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 641 | def test_heif_clli_invalid_values_not_written(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 653 | def test_heif_clli_partial_values_not_written(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 668 | def test_png_cicp_lossless_roundtrip(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 702 | def test_png_cicp_and_clli_coexist(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 719 | def test_thumbnail_returns_cicp_to_its_own_encoding(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 734 | def test_thumbnail_leaves_cicp_alone_without_linear(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 750 | def test_thumbnail_honours_output_profile_for_cicp(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 765 | def test_thumbnail_averages_cicp_in_linear_light(self): | CODE |
| LOW | test/test-suite/test_cicp.py | 788 | def test_thumbnail_cicp_matches_the_same_image_untagged( | CODE |
| LOW | test/test-suite/test_create.py | 255 | def test_mask_butterworth_band(self): | CODE |
| LOW | test/test-suite/test_create.py | 318 | def test_mask_butterworth_ring(self): | CODE |
| LOW | test/test-suite/test_foreign.py | 454 | def test_uhdrload_odd_dimensions(self): | CODE |
| LOW | test/test-suite/test_foreign.py | 483 | def test_uhdrsave_roundtrip_hdr(self): | CODE |
| LOW | test/test-suite/test_foreign.py | 491 | def test_uhdrsave_gainmap_scale_factor(self): | CODE |
| LOW | test/test-suite/test_foreign.py | 503 | def test_uhdrsave_optimize_coding(self): | CODE |
| LOW | test/test-suite/test_foreign.py | 521 | def test_uhdrsave_beyond_jpeg_limits(self): | CODE |
| LOW | test/test-suite/test_foreign.py | 762 | def test_apng_dispose_background(self): | CODE |
| LOW | test/test-suite/test_foreign.py | 787 | def test_apng_dispose_previous(self): | CODE |
| LOW | test/test-suite/test_foreign.py | 832 | def test_apng_hidden_first_frame(self): | CODE |
| LOW | test/test-suite/test_foreign.py | 1634 | def test_gifload_animation_dispose_background(self): | CODE |
| LOW | test/test-suite/test_foreign.py | 1640 | def test_gifload_animation_dispose_previous(self): | CODE |
| LOW | test/test-suite/test_foreign.py | 2369 | def test_new_temp_file_invalid_format(self): | CODE |
| LOW | test/test-suite/test_draw.py | 39 | def test_draw_flood_out_of_bounds(self): | CODE |
| LOW | test/test-suite/helpers/helpers.py | 210 | def assert_almost_equal_objects(a, b, threshold=0.0001, msg=''): | CODE |
| LOW | .github/utils/github-automation.py | 118 | def issue_notify_pull_request(self, pull: github.PullRequest.PullRequest) -> None: | CODE |
| LOW | .github/utils/github-automation.py | 132 | def issue_notify_no_milestone(self, comment: List[str]) -> None: | CODE |
| LOW | .github/utils/github-automation.py | 146 | def issue_notify_cherry_pick_failure( | CODE |
| LOW | .github/utils/github-automation.py | 161 | def issue_notify_pull_request_failure( | CODE |
| LOW | .github/utils/github-automation.py | 168 | def issue_remove_cherry_pick_failed_label(self): | CODE |
| LOW⚡ | .github/utils/github-automation.py | 239 | def check_if_pull_request_exists( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cplusplus/gen-operators.py | 31 | CODE | |
| LOW | test/test-suite/test_connection.py | 3 | CODE | |
| LOW | test/test-suite/test_connection.py | 4 | CODE | |
| LOW | test/test-suite/test_connection.py | 10 | CODE | |
| LOW | test/test-suite/test_convolution.py | 7 | CODE | |
| LOW | test/test-suite/test_colour.py | 5 | CODE | |
| LOW | test/test-suite/test_resample.py | 5 | CODE | |
| LOW | test/test-suite/test_conversion.py | 2 | CODE | |
| LOW | test/test-suite/test_conversion.py | 11 | CODE | |
| LOW | test/test-suite/test_cicp.py | 6 | CODE | |
| LOW | test/test-suite/test_create.py | 5 | CODE | |
| LOW | test/test-suite/test_foreign.py | 9 | CODE | |
| LOW | test/test-suite/test_arithmetic.py | 7 | CODE | |
| LOW | test/test-suite/test_iofuncs.py | 6 | CODE | |
| LOW | test/test-suite/test_histogram.py | 5 | CODE | |
| LOW | test/test-suite/test_mosaicing.py | 5 | CODE | |
| LOW | doc/gen-function-list.py | 15 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | cplusplus/gen-operators.py | 260 | except Error: | CODE |
| HIGH | doc/gen-function-list.py | 68 | except Error: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | .github/utils/github-automation.py | 234 | local_repo.git.push(push_url, "HEAD:{}".format(branch_name), force=True) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/test-suite/test_convolution.py | 109 | CODE | |
| LOW | test/test-suite/test_conversion.py | 468 | CODE | |
| LOW | test/test-suite/test_conversion.py | 489 | CODE | |
| LOW | .github/utils/github-automation.py | 180 | CODE | |
| LOW | doc/fixup-gir-for-doc.py | 14 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/test-suite/helpers/helpers.py | 190 | except Exception: | CODE |
| LOW⚡ | .github/utils/github-automation.py | 228 | except Exception as e: | CODE |
| LOW | .github/utils/github-automation.py | 292 | except Exception as e: | CODE |
| LOW | .github/utils/github-automation.py | 295 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | doc/gen-function-list.py | 53 | CODE |