Image remediation pass — final report
Pass scope: ELEC 271, 274, 278, 292, 224, 232, 280, 252, MTHE 237, APSC 221.
Conventions inferred from existing notes (no CLAUDE.md present): embed style ![[course-topic.png]] followed by an italic caption line. Wikimedia attribution caption form: *Image: [Title](commons-url), [License](license-url) — short description.* Self-generated attribution form: *Self-generated illustrative figure — description.* Course filename prefix elec271-, elec274-, elec280-, elec292-, elec224-, elec232-, mthe237-, apsc221-.
Vault stats after pass: 469 unique image attachments, 440 unique embeds referenced, 0 broken embeds.
Step 0 audit
Wrote _quarantine/image-gap-audit.md (heuristic gap audit by course). Raw counts: ELEC 280 47 gaps / ELEC 274 48 / ELEC 292 57 / ELEC 224 50 / ELEC 271 41 / ELEC 278 17 / ELEC 232 59 / ELEC 252 52 (audit-only) / MTHE 237 10 / APSC 221 14. (Heuristic produces many false positives — e.g. flags any note that mentions the word “cache,” “pipeline,” or “coordinate” anywhere in the body. The remediation pass therefore prioritized notes where the topic is the figure or the prose explicitly describes a curve/diagram.)
Images added this pass (per note)
ELEC 292 — Introduction to Data Science (matplotlib-generated)
| Note | Image | Type | Source |
|---|---|---|---|
AUC.md | elec292-roc-auc-curve.png | self-generated | matplotlib |
ROC curve.md | elec292-roc-auc-curve.png | self-generated | matplotlib |
Confusion matrix.md | elec292-confusion-matrix.png | self-generated | matplotlib |
Gradient descent.md | elec292-gradient-descent.png | self-generated | matplotlib |
Learning rate.md | elec292-learning-rate-impact.png | self-generated | matplotlib |
Principal Component Analysis.md | elec292-pca-projection.png | self-generated | matplotlib |
t-SNE.md | elec292-tsne-clusters.png | self-generated | matplotlib (cluster illustration only — not real t-SNE output) |
Logistic regression.md | elec292-logistic-sigmoid.png | self-generated | matplotlib |
Generalization (machine learning).md | elec292-generalization-bias-variance.png | self-generated | matplotlib |
Normalization.md | elec292-normalization-effect.png | self-generated | matplotlib |
Moving-average filter.md | elec292-moving-average-filter.png | self-generated | matplotlib |
Classification (ML).md | elec292-classification-boundary.png | self-generated | matplotlib |
ELEC 224 — Continuous-Time Signals and Systems (matplotlib-generated)
| Note | Image | Type |
|---|---|---|
Lowpass filter.md | elec224-bode-lowpass.png | self-generated |
Highpass filter.md | elec224-bode-highpass.png | self-generated |
Frequency response.md | elec224-bode-lowpass.png | self-generated |
Sampling.md | elec224-sampling.png | self-generated |
Aliasing.md | elec224-aliasing.png | self-generated |
Sampling theorem.md | elec224-sampling.png | self-generated |
Nyquist rate.md | elec224-aliasing.png | self-generated |
Sinc interpolation.md | elec224-sinc-function.png | self-generated |
Gibbs phenomenon.md | elec224-gibbs-phenomenon.png | self-generated |
RC step response.md | elec224-rc-step-response.png | self-generated |
Time constant.md | elec224-rc-step-response.png | self-generated |
Graphical convolution.md | elec224-graphical-convolution.png | self-generated |
Spectrum (signal).md | elec224-spectrum-example.png | self-generated |
Impulse response.md | elec224-impulse-response-stability.png | self-generated |
BIBO stability.md | elec224-impulse-response-stability.png | self-generated |
Complex sinusoid.md | elec224-complex-sinusoid-helix.png | self-generated |
MTHE 237 — Differential Equations (matplotlib-generated)
| Note | Image | Type |
|---|---|---|
Distinct real eigenvalues case.md | mthe237-phase-portrait-stable-node-illus.png | self-generated |
Linear autonomous system.md | mthe237-phase-portrait-saddle-illus.png | self-generated |
Impulse response.md (MTHE 237 source) | mthe237-impulse-response-underdamped.png | self-generated |
APSC 221 — Engineering Economics (matplotlib-generated)
| Note | Image |
|---|---|
Cash flow diagram.md | apsc221-cash-flow-diagram.png |
Supply and demand.md | apsc221-supply-demand.png |
Learning curve model.md | apsc221-learning-curve.png |
Fixed cost.md | apsc221-fixed-variable-total-cost.png |
Total cost.md | apsc221-fixed-variable-total-cost.png |
Geometric gradient series.md | apsc221-geometric-gradient.png |
Sensitivity analysis.md | apsc221-sensitivity-tornado.png |
Power-sizing model.md | apsc221-power-sizing.png |
POLC.md | apsc221-polc-cycle.png |
Management process.md | apsc221-polc-cycle.png |
ELEC 271 — Digital Systems (Wikimedia Commons)
| Note | Image | License | Source |
|---|---|---|---|
Conjunction.md | elec271-and-gate-iec.png | PD | AND_ANSI_Labelled.svg |
Disjunction.md | elec271-or-gate-iec.png | PD | OR_ANSI_Labelled.svg |
Negation.md | elec271-not-gate-iec.png | PD | NOT_ANSI_Labelled.svg |
Exclusive Disjunction.md | elec271-xor-gate-iec.png | PD | XOR_ANSI_Labelled.svg |
Material Biconditional.md | elec271-xnor-gate-iec.png | PD | XNOR_ANSI_Labelled.svg |
NAND gate.md | elec271-nand-gate-iec.png | PD | NAND_ANSI_Labelled.svg |
NOR gate.md | elec271-nor-gate-iec.png | PD | NOR_ANSI_Labelled.svg |
ELEC 280 — Electromagnetics (Wikimedia Commons)
| Note | Image | License | Source |
|---|---|---|---|
Cartesian coordinates.md | elec280-cartesian-coordinates.png | CC BY-SA 3.0 | Cartesian_coordinates_3D.svg |
Cylindrical coordinates.md | elec280-cylindrical-coordinates.png | PD | Coord_system_CY_1.svg |
Spherical coordinates.md | elec280-spherical-coordinates.png | CC0 | Spherical_coordinates_on_a_globe.svg |
Right-hand rule.md | elec280-right-hand-rule.png | CC BY-SA 3.0 | Right_hand_rule_cross_product.svg |
Plane wave.md | elec280-plane-wave-em.png | CC0 | Plane_electromagnetic_wave.svg |
Smith chart.md | elec280-smith-chart.png | CC BY-SA 3.0 | Smith_chart_gen.svg |
Capacitance.md | elec280-parallel-plate-cap.png | CC BY-SA 4.0 | Parallel_plate_capacitor_cs.svg |
Electric field.md | elec280-electric-dipole-field.png | CC BY-SA 3.0 | Electric-dipole-field-lines-and-equipotential-lines.svg |
Magnetic field.md | elec280-magnetic-dipole-field.png | PD | Magnetic_field_due_to_dipole_moment.svg |
ELEC 232 — Vector Calculus and Complex Analysis (Wikimedia Commons)
| Note | Image | License | Source |
|---|---|---|---|
Contour integral.md | elec232-contour-integral.png | CC0 | FresnelIntegralContour.png |
ELEC 274 — Computer Architecture (Wikimedia Commons)
| Note | Image | License | Source |
|---|---|---|---|
Memory hierarchy.md | elec274-memory-hierarchy.png | PD | ComputerMemoryHierarchy.svg |
Cache address mapping.md | elec274-cache-direct-mapped.png | CC BY-SA 4.0 | Direct_Mapped_Cache.svg |
ELEC 278 — Information Structures
No additions this pass. The course was already at 31 of 58 notes with images and the remaining gap-audit hits were almost entirely false positives (notes that mention “cache,” “graph,” or “pipeline” in passing). The high-leverage targets — adjacency list/matrix, BST/AVL/heap structure, sorting walk-throughs — already have hand-authored figures.
ELEC 252 — Electronics I
Audit-only per scope. No additions. The verifier reports 0 broken embeds across the course’s 110 notes-with-images.
Files downloaded but NOT embedded — and why
| File | Reason skipped (logged for future use) |
|---|---|
elec274-pipeline-five-stage.png | Thumbnail resolution from Commons was 972×282 — too narrow for the depth of detail; defer until a cleaner SVG render or a self-generated equivalent is produced. |
elec274-cache-set-associative.png (CC BY-SA 3.0) | Diagram notation differs from the way Cache address mapping.md walks through tag/index/offset. Embedding would create a notation conflict. Use later only if the note is rewritten to match. |
elec274-cache-fully-associative.png (CC BY-SA 3.0) | Same reason as above. |
Files queried but missing or non-free (logged, not downloaded)
The first download pass requested several Commons filenames that the API returned as either nonexistent or under non-free licenses. After the second pass (corrected canonical filenames), all 21 target files downloaded successfully. No file in the final pass came back as “missing” or “non-free.” See _audit/commons_log.json for the full per-file response log.
One Wikimedia file was downloaded but rejected as unusable: elec278-adjacency-list-canonical.png (intended Singly_linked_list.png). The thumbnail came back at 300×34 pixels — too small to be useful. Deleted from attachments/; the existing hand-authored adjacency list figure is fine.
Missing notes
No “missing notes” hits in the embed pass — every target note in the plan exists in the vault.
Broken embeds
Zero. All 440 unique ![[ ]] references across the vault resolve to a real file in attachments/. Verified by _audit/verify_embeds.py after the pass completed.
Attribution
Wrote attachments/attributions.md covering:
- Every image added in this pass (filename, first-used note, type, caption snippet).
- A second table listing each Wikimedia file with its Commons page URL, license short name, and author as returned by the Commons
extmetadataAPI.
Tools / scripts produced
All under D:/Public Obsidian/_audit/ (not part of the vault):
gap_audit.py— produces_quarantine/image-gap-audit.mdandaudit.json.generate_plots.py— generates all 33 matplotlib figures.download_commons.py— Commons API verification + thumbnail download with attribution capture.embed_images.py— embed planner + inserter + attribution writer.verify_embeds.py— vault-wide broken-embed scan.
Summary
- Notes touched (image add): 50 notes received a new embed (some notes received the same image for two related concepts, e.g. ROC/AUC; some images were used in two notes).
- Wikimedia images downloaded with free-license verification: 21, of which 18 were embedded and 3 were retained but not embedded (notation mismatch / resolution).
- Self-generated matplotlib figures: 33, all illustrative — captions in the notes state this honestly.
- 0 broken embeds vault-wide.
- ELEC 274 audit: 3 HIGH fixed, 1 HIGH from the audit subagent verified as a false positive, 12 MEDIUM + 5 LOW logged in
_quarantine/elec274-audit-report.md.Cache memory.mdrewritten to remove AI tone. - ELEC 252: audit-only as scoped; no changes.