AI Slop Code Risk Monitor

storytold/effectcraft

SlopCodeMonitor badge for storytold/effectcraft Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

EffectCraft: An open-source motion graphics and compositing tool written by scratch in pure Rust

1.3 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for storytold/effectcraft, a Rust project with 8,287 GitHub stars. SynthScan examined 493,278 lines of code across 1264 source files, recording 374 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 1.3 (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.

1.3
Adjusted Signal
1.3
Raw Pattern Score
100%
Time Factor
2026-11-01
Last Push
8.3K
Stars
Rust
Language
493.3K
Lines of Code
1.3K
Files
374
Pattern Hits
2026-10-31
Scan Date
0.02
HC Hit Rate

Risk Review · Payload v1

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.

Cognitive Ownership Risk 3.7/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 347 finding(s).

Hallucinated Dependency & Supply Chain Risk 2.8/100 · LOW

Are imports declared and package/API names verified? 27 finding(s).

Agent Over-Engineering Ratio 0.0/100 · LOW

Are wrappers, guards, and repeated structures necessary? 0 finding(s).

PR Review Velocity Impact 6.2/100 · LOW

Which changes need focused human review? 374 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.

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

Severity Breakdown

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.

CRITICAL 26HIGH 0MEDIUM 10LOW 338

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 374 distinct pattern matches across 6 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.

Over-Commented Block334 hits · 334 pts
SeverityFileLineSnippetContext
LOWCargo.toml121egui_kittest = "0.37"COMMENT
LOWpackaging/env.sh1# shellcheck shell=bashCOMMENT
LOWpackaging/macos/package.sh1#!/usr/bin/env bashCOMMENT
LOWpackaging/web/package.sh1#!/usr/bin/env bashCOMMENT
LOWpackaging/freebsd/package.sh1#!/usr/bin/env bashCOMMENT
LOWpackaging/linux/flatpak-oci.sh1#!/usr/bin/env bashCOMMENT
LOWpackaging/linux/package.sh1#!/usr/bin/env bashCOMMENT
LOWpackaging/linux/flatpak-bundle.sh1#!/usr/bin/env bashCOMMENT
LOWpackaging/linux/flatpak/ai.storyteller.effectcraft.yml1# Flatpak manifest for EffectCraft, ready for a Flathub submission.COMMENT
LOWpackaging/linux/flatpak/ai.storyteller.effectcraft.yml21command: effectcraftCOMMENT
LOW…ng/linux/flatpak/ai.storyteller.effectcraft.bundle.yml1# Flatpak manifest for the single-file bundle attached to every GitHub releaseCOMMENT
LOW…ng/linux/flatpak/ai.storyteller.effectcraft.bundle.yml21 # Display: Wayland first; X11 only when no Wayland compositor is running.COMMENT
LOWcrates/svg/src/lib.rs201 /// How the group composites onto what is below it (PDF blend modes; SVG `mix-blend-mode`COMMENT
LOWcrates/gpu/src/fx_vr.rs1//! GPU effects, Immersive Video family (kernels in `shaders/fx_vr.wgsl`, every entry pointCOMMENT
LOWcrates/gpu/src/fx_tone.rs1//! GPU effects, tonal and colour correction family (kernels in `shaders/fx_tone.wgsl`, everyCOMMENT
LOWcrates/gpu/src/fx_particles.rs1//! GPU effects, particle render passes (kernels in `shaders/fx_particles.wgsl`, every entryCOMMENT
LOWcrates/gpu/src/fx_lut.rs1//! GPU effects, colour management (kernels in `shaders/fx_lut.wgsl`, every entry pointCOMMENT
LOWcrates/gpu/src/fx_pixel2.rs1//! GPU effects, pixel ports of part C (kernels in `shaders/fx_pixel2.wgsl`, every entry pointCOMMENT
LOWcrates/gpu/src/lib.rs1//! The EffectCraft GPU compositor (Mercury GPU Acceleration's counterpart), on wgpu computeCOMMENT
LOWcrates/gpu/src/lib.rs21//!COMMENT
LOWcrates/gpu/src/lib.rs41//! measured faster for it ([`effectcraft_render::AutoPick`], kept by [`Gpu`]): a light compCOMMENT
LOWcrates/gpu/src/fx_time.rs1//! GPU effects, time (kernels in `shaders/fx_time.wgsl`, every entry point prefixed `ftm_`):COMMENT
LOWcrates/gpu/src/adv3d.rs1//! The Advanced 3D rasteriser on wgpu: a render pipeline with a reversed-Z depth bufferCOMMENT
LOWcrates/gpu/src/fx_sim.rs1//! GPU effects, simulation render passes (kernels in `shaders/fx_sim.wgsl`, every entry pointCOMMENT
LOWcrates/gpu/src/fx_gen2.rs1//! GPU effects, generators of part C (kernels in `shaders/fx_gen2.wgsl`, every entry pointCOMMENT
LOWcrates/gpu/src/tests.rs1//! GPU vs CPU: the CPU renderer is the oracle. Every scene renders on both and must agreeCOMMENT
LOWcrates/gpu/src/fx_key.rs1//! GPU effects, keying, matte and channel family (kernels in `shaders/fx_key.wgsl`, every entryCOMMENT
LOWcrates/gpu/src/fx_warp.rs1//! GPU effects, warp family (kernels in `shaders/fx_warp.wgsl`, every entry point prefixedCOMMENT
LOWcrates/gpu/src/fx_noise.rs1//! GPU effects, noise, blur and time family (kernels in `shaders/fx_noise.wgsl`, every entry point prefixedCOMMENT
LOWcrates/gpu/src/fx_depth.rs1//! GPU effects, 3D Channel family (kernels in `shaders/fx_depth.wgsl`, every entry pointCOMMENT
LOWcrates/gpu/src/fx_transition.rs1//! GPU effects, transitions and perspective (kernels in `shaders/fx_transition.wgsl`, everyCOMMENT
LOWcrates/gpu/src/deferred.rs1//! Deferred readbacks: rendering on a device whose readbacks cannot be waited for (WebGPU in aCOMMENT
LOWcrates/gpu/src/context.rs101/// submitted yet. Reusing it in another encoder that is submitted first would overwrite itCOMMENT
LOWcrates/track/src/subspace.rs1//! Warp Stabilizer ▸ Method ▸ **Subspace Warp**: content-preserving warps fitted to smoothedCOMMENT
LOWcrates/track/src/fit.rs1//! Robust motion-model fits between point correspondences: **RANSAC** (Fischler & Bolles,COMMENT
LOWcrates/track/src/lib.rs1//! Motion tracking, clean-room from textbook methods:COMMENT
LOWcrates/track/src/klt.rs1//! Sparse feature tracking (KLT), clean-room from the published methods:COMMENT
LOWcrates/track/src/plane.rs1//! Single- or multi-channel float planes: the tracker's working images (a crop of the frame inCOMMENT
LOWcrates/track/src/face.rs1//! Face tracking (Tracker panel ▸ Method ▸ Face Tracking (Outline Only) / (Detailed Features)),COMMENT
LOWcrates/track/src/face.rs21//! merged component) and replaces detections that disagree with the model. The model isCOMMENT
LOWcrates/track/src/stabilize.rs1//! Video stabilization (the Warp Stabilizer's analysis and stabilization steps), clean-room fromCOMMENT
LOWcrates/track/src/stabilize.rs341 /// Final source → output transform per frame (layer pixels), framing scale included. ForCOMMENT
LOWcrates/track/src/roto.rs1//! Roto Brush segmentation and propagation, clean-room from published methods:COMMENT
LOWcrates/track/src/roto.rs21//!COMMENT
LOWcrates/track/src/camtrack.rs1//! The 3D Camera Tracker's analysis: structure from motion on a single clip, clean-room from theCOMMENT
LOWcrates/track/src/camtrack.rs21//! (the reprojection error of the keyframe reconstruction over a log-spaced range of focalCOMMENT
LOWcrates/track/src/camtrack/bundle.rs1//! Sparse bundle adjustment: Levenberg–Marquardt over cameras and points with the **SchurCOMMENT
LOWcrates/track/src/roto/maxflow.rs1//! Min-cut / max-flow on sparse graphs with source and sink terminals, by theCOMMENT
LOWcrates/av1enc/src/symbol.rs1//! Multi-symbol arithmetic encoder: the exact inverse of the symbol decoder of spec 8.2.COMMENT
LOWcrates/host/src/app_dirs.rs1//! Where EffectCraft keeps its per-user data (settings, shortcuts, crash recovery, logs, models,COMMENT
LOWcrates/psd/src/placed.rs1//! Placed-layer (smart object) geometry: the non-affine corner quad (a projective map of theCOMMENT
LOWcrates/psd/src/placed.rs21/// that makes every triangle cover the whole output would visit thousands of times more.COMMENT
LOWcrates/opusenc/src/silk.rs1//! SILK layer encoder (RFC 6716 §4.2, encoder direction), 20 ms frames at 8, 12 or 16 kHz.COMMENT
LOWcrates/opusenc/src/lib.rs1//! Clean-room pure-Rust Opus encoder (RFC 6716 SILK, hybrid and CELT modes; RFC 7845 `OpusHead`).COMMENT
LOWcrates/vp9enc/src/lib.rs1//! A VP9 encoder (profile 0, 8-bit 4:2:0), written from the *VP9 Bitstream & Decoding ProcessCOMMENT
LOWcrates/vp9enc/src/probs.rs1//! Probabilities: the frame's adaptable probability table (one flat array laid out in the orderCOMMENT
LOWcrates/color/src/icc.rs1//! A reader for matrix/TRC RGB ICC profiles (ICC.1:2001-04 v2 and ICC.1:2010 v4, the publicCOMMENT
LOWcrates/color/src/space.rs1//! RGB colour spaces for colour management: the project working space, footage interpretation,COMMENT
LOWcrates/path/src/boolean.rs1//! Curve-preserving boolean operations on filled [`BezPath`]s, built on `linesweeper`'s robustCOMMENT
LOWcrates/path/src/trace.rs1//! Auto-trace: outlines of a scalar field (a layer's alpha, a colour channel or luminance) asCOMMENT
274 more matches not shown…
Hallucination Indicators26 hits · 280 pts
SeverityFileLineSnippetContext
CRITICALcrates/ui-egui/tests/it/ui_panel_windows.rs16 app.ui.dock.layout.floating.iter().find(|w| w.contains(&panel)).and_then(|w| w.native)CODE
CRITICALcrates/ui-egui/tests/it/ui_panel_windows.rs27 assert!(app.ui.dock.layout.floating.iter().any(|w| w.panels().copied().collect::<Vec<_>>() == [PanelKind::Project]))CODE
CRITICALcrates/ui-egui/tests/it/shared_docking_ui.rs188 assert!(app.ui.dock.layout.root.is_none());CODE
CRITICALcrates/ui-egui/tests/it/ui_viewer.rs740 assert_eq!(h.state().session.state.shape_tool.fill.kind.id(), kind);CODE
CRITICALcrates/ui-egui/tests/it/ui_toolbar_gradient.rs139 assert_eq!(h.state().session.state.shape_tool.fill.kind.id(), "radial", "it steps Linear → Radial");CODE
CRITICALcrates/ui-egui/src/header.rs332 let (icon, mode) = match app.session.prefs.appearance.appearance_mode.as_str() {CODE
CRITICALcrates/ui-egui/src/header.rs356 let favorites = app.session.prefs.appearance.favorite_themes.clone();CODE
CRITICALcrates/ui-egui/src/i18n.rs23 match app.session.prefs.general.language.as_str() {CODE
CRITICALcrates/ui-egui/src/dock_ui.rs267 self.ui.dock.layout.floating.iter().any(|w| w.contains(&p) && w.native.is_some())CODE
CRITICALcrates/ui-egui/src/dock_ui.rs283 let anchor = self.ui.dock.layout.root.as_ref().and_then(|root| {CODE
CRITICALcrates/ui-egui/src/dock_ui.rs306 let Some([x, y, w, h]) = self.ui.dock.layout.floating.iter().find(|f| f.contains(&p)).map(|f| f.rect) else {CODE
CRITICALcrates/ui-egui/src/dock_ui.rs553 let window = |panel: &PanelKind| self.ui.dock.layout.floating.iter().position(|window| window.contains(panel));CODE
CRITICAL⚡crates/ui-egui/src/bench.rs92 d.app.ui.timeline.open_layers.extend(open.iter().copied());CODE
CRITICAL⚡crates/ui-egui/src/bench.rs95 d.app.ui.timeline.open_layers.clear();CODE
CRITICAL⚡crates/ui-egui/src/bench.rs99 let items = d.app.session.project.items.len();CODE
CRITICAL⚡crates/ui-egui/src/bench.rs100 let folders: Vec<u64> = d.app.session.project.items.values().filter(|i| i.is_folder()).map(|i| i.id.0).collect();CODE
CRITICALcrates/ui-egui/src/app/viewer_frames.rs65 let (_, k) = self.session.state.viewer.fast_previews.render(self.ui.viewer.interacting || self.ui.viewer.propertCODE
CRITICALcrates/ui-egui/src/app/viewer_frames.rs155 let (draft, _) = self.session.state.viewer.fast_previews.render(self.ui.viewer.interacting || self.ui.viewer.proCODE
CRITICALcrates/ui-egui/src/app/frame.rs240 let child_viewports = !self.ui.dock.layout.floating.is_empty() || prefs_live::video_preview_active(self, focusedCODE
CRITICALcrates/ui-egui/src/app/frame.rs579 let key = (self.session.revision, self.session.prefs.import.auto_reload_footage.clone());CODE
CRITICALcrates/ui-egui/src/app/prefs.rs55 let next = match self.session.prefs.appearance.appearance_mode.as_str() {CODE
CRITICALcrates/ui-egui/src/panels/viewer.rs442 let style = app.session.prefs.grids.guide_style.clone();CODE
CRITICALcrates/ui-egui/src/panels/viewer.rs1500 let speed = app.session.state.puppet.record_speed.max(1.0) / 100.0;CODE
CRITICALcrates/ui-egui/src/panels/project.rs850 let depth = app.session.project.settings.bit_depth.label();CODE
CRITICALcrates/ui-egui/src/panels/settings.rs370 let mut favorites = app.session.prefs.appearance.favorite_themes.clone();CODE
CRITICALcrates/ui-egui/src/panels/roto_tool.rs421 let view = app.session.state.roto.view.clone();CODE
AI Slop Vocabulary10 hits · 30 pts
SeverityFileLineSnippetContext
MEDIUMcrates/track/src/fit.rs147/// A robust fit: the model, which correspondences are inliers, and the RMS inlier error.COMMENT
MEDIUMcrates/track/src/camtrack.rs13//! the other keyframes are added incrementally (**resection** by robust pose refinement,COMMENT
MEDIUMcrates/track/src/camtrack/bundle.rs4//! errors in pixels with a **Huber** robust loss (applied by iteratively reweighted leastCOMMENT
MEDIUMcrates/track/src/camtrack/bundle.rs152/// Total robust cost. Rejects invalid inputs before starting parallel evaluation.COMMENT
MEDIUMcrates/path/src/boolean.rs1//! Curve-preserving boolean operations on filled [`BezPath`]s, built on `linesweeper`'s robustCOMMENT
MEDIUMcrates/path/src/offset.rs2//! offsetting (kurbo's stroker offsets curves analytically and refits them) and robust overlapCOMMENT
MEDIUMcrates/path/src/fit.rs19/// Direction the curve leaves `p0` (robust to retracted handles).COMMENT
MEDIUMcrates/path/src/ops.rs59/// Unit tangent of a segment at parameter `t` (robust at retracted handles).COMMENT
MEDIUMcrates/raster/src/inpaint.rs20//! border (Poisson-style seamless blending), scaled by the chosen strength.COMMENT
MEDIUMxtask/src/bench.rs693 // Half a frame before the next one: the end is inclusive, and this is robust to rounding.COMMENT
Deep Nesting2 hits · 2 pts
SeverityFileLineSnippetContext
LOWcrates/engine/src/cmd/blender_scene.py16CODE
LOWcrates/engine/src/cmd/blender_scene.py56CODE
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWpackaging/linux/flatpak-oci.sh5# Usage:COMMENT
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippetContext
LOWapps/effectcraft-cli/tests/it/qa_template.rs29var t = comp.layers.addText("Jane Doe");CODE