Repository Analysis

SteveTheKiller/KillerPDF

Free and open-source PDF editor for Windows. View, annotate, OCR, merge, split, crop, rotate, compare, edit text, draw, sign, fill forms, print, flatten, and open password-protected PDFs without a subscription.

4.2 Likely human-written View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of SteveTheKiller/KillerPDF, a C# project with 3,683 GitHub stars. SynthScan v2.0 examined 146,947 lines of code across 465 source files, recording 252 pattern matches distributed across 6 syntactic categories. The overall adjusted score of 4.2 places this repository in the Likely human-written 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).

4.2
Adjusted Score
4.2
Raw Score
100%
Time Factor
2026-08-29
Last Push
3.7K
Stars
C#
Language
146.9K
Lines of Code
465
Files
252
Pattern Hits
2026-08-29
Scan Date
0.01
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

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

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 6HIGH 0MEDIUM 143LOW 103

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 252 distinct pattern matches across 6 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.

Decorative Section Separators137 hits · 436 pts
SeverityFileLineSnippetContext
MEDIUMApp.xaml.cs46 // ── Machine-wide install (all users), matching Killendar / KillerShell ─────────────COMMENT
MEDIUMApp.xaml.cs430 // ── Palette ─────────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs459 // ── Layout ──────────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs466 // ── Title bar ───────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs488 // ── Error header ─────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs535 // ── Stack trace ──────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs554 // ── Button bar ───────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs1152 // ── Recent files (most-recent first, capped) ─────────────────────COMMENT
MEDIUMApp.xaml.cs1235 // ── Root grid: title bar row + content row ──────────────────COMMENT
MEDIUMApp.xaml.cs1240 // ── Title bar ───────────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs1303 // ── Content ─────────────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs1389 // ── WinVerifyTrust P/Invoke ──────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs1425 // ── Public helpers ───────────────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs1512 // ── About dialog ────────────────────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs1521 // ── Layout ──────────────────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs1708 // ── Downgrade guard ────────────────────────────────────────────────────COMMENT
MEDIUMMainWindow.xaml.cs41 // ── Split pane ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMShell/PaneDrag.cs47 // ── Drag feedback ───────────────────────────────────────────────────────────────────────COMMENT
MEDIUMShell/KeyboardMapOverlay.cs33 // ── Binding table ──────────────────────────────────────────────────────────────────────COMMENT
MEDIUMShell/KeyboardMapOverlay.cs41 // ── Physical layout ────────────────────────────────────────────────────────────────────COMMENT
MEDIUMShell/KeyboardMapOverlay.cs101 // ── View toggle (LIST / KEYBOARD) ──────────────────────────────────────────────────────COMMENT
MEDIUMShell/KeyboardMapOverlay.cs123 // ── Board construction (once, lazily) ──────────────────────────────────────────────────COMMENT
MEDIUMShell/KeyboardMapOverlay.cs263 // ── Caption marquee (hover a lit key whose caption is cut off) ─────────────────────────COMMENT
MEDIUMShell/KeyboardMapOverlay.cs315 // ── Layer painting ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMShell/SettingsPanel.cs684 // ── Toolbar appearance (right-click picker on the bar) ────────────COMMENT
MEDIUMShell/SettingsPanel.cs1056 // ── Responsive toolbar overflow ───────────────────────────────────COMMENT
MEDIUMShell/KeyboardShortcuts.cs547 // ── Jump history (Alt+Left / Alt+Right / mouse back-forward buttons) ─────────────────────COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerStubs.cs32 // ── Annotations ──────────────────────────────────────────────────────────────────────COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerStubs.cs62 // ── Page canvases ────────────────────────────────────────────────────────────────────COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerStubs.cs67 // ── Undo ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerStubs.cs71 // ── Text editing ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerStubs.cs79 // ── Text selection ───────────────────────────────────────────────────────────────────COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerStubs.cs83 // ── Crop ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerStubs.cs89 // ── Links ────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerStubs.cs98 // ── Save paths ───────────────────────────────────────────────────────────────────────COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerStubs.cs101 // ── Bound from MainWindow.xaml - see the class comment, these are load-bearing ───────COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerBridge.cs30 // ══ INWARD: chrome the viewer reads ═════════════════════════════════════════════════COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerBridge.cs41 // ══ INWARD: per-document state (group B - goes when the viewer owns its session) ═════COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerBridge.cs55 // ══ OUTWARD: the viewer's members, under the names the window already calls ══════════COMMENT
MEDIUMFeatures/Viewer/IViewerHost.cs41 // ── Chrome the viewer updates (group A) ─────────────────────────────────────────────COMMENT
MEDIUMFeatures/Viewer/IViewerHost.cs122 // ── Notifications, so the window can update chrome for the FOCUSED viewer only ───────COMMENT
MEDIUMModels/ViewerState.cs63 // ── Zoom / fit ──────────────────────────────────────────────────────────────────COMMENT
MEDIUMModels/ViewerState.cs72 // ── In-flight render work ───────────────────────────────────────────────────────COMMENT
MEDIUMModels/ViewerState.cs81 // ── Continuous-view bookkeeping ─────────────────────────────────────────────────COMMENT
MEDIUMModels/ViewerState.cs93 // ── Gesture routing ─────────────────────────────────────────────────────────────COMMENT
MEDIUMModels/ViewerState.cs101 // ── Visual hosts ────────────────────────────────────────────────────────────────COMMENT
MEDIUMControls/ColorPickerDialog.cs64 // ── UI ──────────────────────────────────────────────────────────────────COMMENT
MEDIUMControls/ColorPickerDialog.cs213 // ── Interaction ─────────────────────────────────────────────────────────COMMENT
MEDIUMControls/ColorPickerDialog.cs239 // ── Eyedropper (desktop-wide) ───────────────────────────────────────────COMMENT
MEDIUMControls/ColorPickerDialog.cs292 // ── Saved swatches ──────────────────────────────────────────────────────COMMENT
MEDIUMControls/ColorPickerDialog.cs335 // ── Small themed control builders ───────────────────────────────────────COMMENT
MEDIUMControls/ColorPickerDialog.cs439 // ── Color math / parsing ───────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs37 // ── Win32-compatible surface ─────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs85 // ── internals ────────────────────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs112 // ── Tree / pinned places / recents / hidden state ────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs298 // ── Filters ──────────────────────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs399 // ── Quick places (pinned + drives) ───────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs593 // ── Navigation ───────────────────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs908 // ── Recent locations ─────────────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs945 // ── Hidden / dot files ───────────────────────────────────────────────────COMMENT
77 more matches not shown…
Over-Commented Block103 hits · 103 pts
SeverityFileLineSnippetContext
LOWMainWindow.xaml.cs241 // the popup into that field instead of free placement.COMMENT
LOWMainWindow.xaml.cs301 // Whole-document search results now live on SearchController (Features/Search); Tabs.csCOMMENT
LOWShell/SplitPane.cs41COMMENT
LOWShell/SplitPane.cs81 // The wheel focuses too. The zoom toolbar, the zoom box and Ctrl+wheel all act on theCOMMENT
LOWShell/SplitPane.cs261 if (_restoringSplit)COMMENT
LOWShell/SplitPane.cs341COMMENT
LOWShell/SplitPane.cs441 PaneBCol.Width = new GridLength(bStart, GridUnitType.Pixel);COMMENT
LOWShell/AppScale.cs101 // so the footer carries it while you are zooming and gives the line back a beat afterCOMMENT
LOWShell/PaneDrag.cs1using System;COMMENT
LOWShell/PaneDrag.cs21 /// </summary>COMMENT
LOWShell/PaneDrag.cs101 {COMMENT
LOWShell/SidebarLayout.cs81 // handling, and the fake elevation gradient is gone - DocPaneBorder casts a realCOMMENT
LOWShell/SidebarLayout.cs101 // The shadow caster is inside the PdfViewer control, so moving the control moves both -COMMENT
LOWShell/SidebarLayout.cs121 }COMMENT
LOWShell/SettingsPanel.cs241 // takes effect the next time a moon is toggled on. Both panes: this option changesCOMMENT
LOWShell/SettingsPanel.cs261 // (2026-08-01). Re-render it with its own session swapped in - the sameCOMMENT
LOWShell/SettingsPanel.cs681 ViewerB.ReapplyViewMode();COMMENT
LOWShell/ShortcutsOverlay.cs1using System.Linq;COMMENT
LOWShell/ShortcutsOverlay.cs61 .Replace("%zout%", Services.KeyLayout.ZoomOutChar());COMMENT
LOWShell/TempReload.cs81 // Primary fallback: use PDFium (already initialized for the page preview) toCOMMENT
LOWShell/SystemMenu.cs1using System;COMMENT
LOWShell/FileOperations.cs841 }COMMENT
LOWShell/AnnotationBars.cs341COMMENT
LOWShell/WindowChrome.cs321 if (PagePreviewPanel?.Parent is not Grid area) return;COMMENT
LOWShell/FullScreen.cs121 // bounds FIRST, then drop to Normal: WPF restores to the just-set bounds, so the window landsCOMMENT
LOWFeatures/About/IAboutHost.cs1namespace KillerPDF.FeaturesCOMMENT
LOWFeatures/Cli/CliRunner.cs21// 2026-07-31), called qualified below. No Features-to-Shell reaches remain in this file.COMMENT
LOWFeatures/Cli/CliRunner.cs41 //COMMENT
LOWFeatures/Cli/BatchRunner.cs21 // Resaves through The KillerPDF.Engine's deterministic full-document writer. No window,COMMENT
LOWFeatures/Viewer/MainWindowViewerBridge.cs1using System.Collections.Generic;COMMENT
LOWFeatures/Viewer/MainWindowViewerBridge.cs21 ///COMMENT
LOWFeatures/Viewer/MainWindowViewerBridge.cs41 // ══ INWARD: per-document state (group B - goes when the viewer owns its session) ═════COMMENT
LOWFeatures/Viewer/MainWindowViewerBridge.cs101 // hardcoded) and was the split's cross-zoom bug: FocusPane(B) -> SyncZoomBox writes theCOMMENT
LOWFeatures/Viewer/MainWindowTabStubs.cs61COMMENT
LOWFeatures/Viewer/IViewerHost.cs1using System.Windows;COMMENT
LOWFeatures/Viewer/IViewerHost.cs21 /// That audit split the coupling into three groups, and only the first belongs here:COMMENT
LOWFeatures/Viewer/IViewerHost.cs41 // ── Chrome the viewer updates (group A) ─────────────────────────────────────────────COMMENT
LOWFeatures/Viewer/MainWindowViewerElements.cs1using System.Windows.Controls;COMMENT
LOWModels/ViewTypes.cs1namespace KillerPDFCOMMENT
LOWModels/UndoTypes.cs1using System.Collections.Generic;COMMENT
LOWModels/LinkTypes.cs1namespace KillerPDFCOMMENT
LOWModels/ViewerState.cs1using System.Collections.Generic;COMMENT
LOWModels/ViewerState.cs21 /// </summary>COMMENT
LOWModels/ViewerState.cs41 /// which between them cover every write:COMMENT
LOWModels/ViewerState.cs101 // ── Visual hosts ────────────────────────────────────────────────────────────────COMMENT
LOWControls/KillerDialog.cs321 MessageBoxButton buttons = MessageBoxButton.OKCancel,COMMENT
LOWControls/FlyoutPlacement.cs1using System.Windows;COMMENT
LOWControls/FlyoutPlacement.cs21 /// rail sat near the window's right edge; "Top" opened them over the status bar. Hours wentCOMMENT
LOWControls/ThumbViewportFloorConverter.cs1using System;COMMENT
LOWControls/Anim.cs1using System;COMMENT
LOWControls/Anim.cs21//COMMENT
LOWControls/Anim.cs101 {COMMENT
LOWControls/PrintPreviewWindow.cs1361 /// every selected page has to be encoded into the XPS package there. Driven from the UICOMMENT
LOWControls/SidebarPageBinding.cs1using System.Collections;COMMENT
LOWControls/FileDialog.xaml.cs21 /// Themed stand-in for Microsoft.Win32.OpenFileDialog / SaveFileDialog. Same chrome, placesCOMMENT
LOWControls/FileDialog.xaml.cs221 // preference makes DWM composite its own rounded frame around the WINDOW rect - theCOMMENT
LOWControls/FileDialog.xaml.cs421 catch { label = d.DriveType.ToString(); }COMMENT
LOWControls/DragCursors.cs1using System;COMMENT
LOWControls/FolderTree.cs21 // current folder on open instead), no shell context menu suite.COMMENT
LOWControls/Viewer/PdfViewer.Links.cs21 // Moved from Shell/Links.cs; the namespace and class line are the only changes. Window membersCOMMENT
43 more matches not shown…
Hallucination Indicators6 hits · 60 pts
SeverityFileLineSnippetContext
CRITICALShell/Signing.cs853 encoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(bmp));CODE
CRITICALShell/ContextMenu.cs64 var tileSource = System.Windows.Media.Imaging.BitmapFrame.Create(bmp);CODE
CRITICALShell/TextSettingsBar.cs787 encoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(src));CODE
CRITICALControls/Viewer/PdfViewer.TabStrip.cs525 var slot = System.Windows.Controls.Primitives.LayoutInformation.GetLayoutSlot(fe);CODE
CRITICALControls/Viewer/PdfViewer.TabStrip.cs630 var slot = System.Windows.Controls.Primitives.LayoutInformation.GetLayoutSlot(dragged);CODE
CRITICALengine/KillerPdf.Engine/Authoring/PdfDocumentBuilder.cs2693 state.SoftMask.Backdrop.Value.Components.Select(Number))));CODE
Modern AI Meta-Vocabulary3 hits · 8 pts
SeverityFileLineSnippetContext
MEDIUMControls/Viewer/PdfViewer.Viewport.cs449 Background = Brushes.White, // empty-page scaffold while the bitmap streams in (not a dark box)CODE
MEDIUMControls/Viewer/PdfViewer.Viewport.cs492 // geometry never changes; they show the white scaffold until re-rendered (render cacheCOMMENT
MEDIUMControls/Viewer/PdfViewer.Viewport.cs692 img.Source = null; // slot keeps its height; white scaffold shows until re-renderedCODE
AI Slop Vocabulary2 hits · 5 pts
SeverityFileLineSnippetContext
MEDIUMShell/TempReload.cs102 // robust error recovery and will rewrite a correct xref), then retry the open.COMMENT
MEDIUMpdf-landing/technical.html141<a href="#robust" data-i18n="pt_12">Robustness</a>CODE
Self-Referential Comments1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMpdf-landing/engine/engine-docs-content.js1(function(){window.KPDF_ENGINE_DOCS={"api":"# API guide\n\nThe public API is organized by PDF responsibility. Start withCODE