SKILLπ JOURNAL ↗ Workflows

From screenshots and web pages to reviewed tables and Markdown archives

Separate image recognition, static or dynamic web extraction, and Markdown conversion, preserving source evidence, unknown cells and coverage limits.

Identify the input before choosing the conversion route

A community music school wants to organize a public course catalogue. Some material is a screenshot with merged headers, some is a website list, and several pages are HTML course descriptions. The target is a reviewable course table and a sourced Markdown archive, not forcing every visual into the same table parser. This is an operating design: no school site was collected, recognition service called or workbook generated.

The source covers image-to-Excel conversion, web tables and lists exported as CSV or JSON, and HTML or documents converted to Markdown. Their error mechanisms differ. Images require recognition and spatial reconstruction; web collection requires actual data and pagination; Markdown conversion may lose structure. A file that opens is not proof of accurate content. Provenance and unresolved items must travel with the output.

Route one: recognize screenshots without discarding evidence

Create an input manifest with file name, source, date, page or crop region, intended table and permitted use. Preserve originals read-only and make separate crop or enhancement copies. Check resolution, rotation, occlusion, language and page boundaries. A clipped course name is missing information, not an invitation to infer it. Perspective and shadows in a phone photograph can distort column positions; obtain a clearer source when necessary.

Confirm the schema on one difficult sample before expanding the batch. A screenshot may group “course,” “time” and “fees,” with fees split into tuition and materials. Expand those into explicit fields. A note about an optional materials pack is not another price row. Treat merged cells and empty cells separately; do not carry the previous course name down every following row automatically. Preserve a source-row reference for each image so similar headings cannot cause accidental concatenation.

Keep recognized text before creating rule-validated types. Course code 0017 should remain text. Interpret thousands separators, decimal marks and currency according to the source convention. A time range should not become a spreadsheet date accidentally. Flag uncertain digits, parenthesized negatives, handwriting and footnotes. A correction suggestion must not overwrite the recognized original, and a model's confidence wording is not measured accuracy.

Separate reviewed data, unresolved cells and source notes in the workbook. Numeric fields participate in calculations only after units and parsing rules are confirmed. Check that numeric-looking strings really calculate. Totals can reveal misalignment, but matching totals can also hide offsetting errors. Review critical fields and all flagged cells, then sample unflagged rows. Financial or consequential use may require stricter cell-by-cell verification.

Route two: find a stable structure in web data

Prefer an official download or permitted API when available. Otherwise inspect the page's tables or lists, recording entry URL, filters, timestamp, language and sort order. Public visibility does not automatically authorize unlimited collection or redistribution. Define scope and request frequency for the actual site and permission; do not bypass login, challenges or access restrictions.

If rows exist in static HTML, extract explicit course title, schedule, price, link and source page fields. A visually positioned “third div” is a fragile long-term rule. Use explainable structure and flag an unexpected missing field instead of continuing silently. Resolve unnamed columns against visible content. An empty source cell, absent field and extraction failure should remain distinct states.

A page returning a skeleton whose records arrive through scripts will not yield the same result to a static fetch. In an authorized environment, observe the rendered data state and choose an appropriate browser method or official data route. A virtualized list may keep only the visible rows in the DOM. Ten onscreen rows do not establish ten total courses. Avoid unbounded scrolling to guess completeness.

Keep a pagination manifest with page or cursor, request state, extracted count, next location and stop reason. Deduplicate by a stable course identifier while retaining source pages; identically titled classes at different times are not duplicates. Detect repeated next pages, empty pages, cursor loops and partial failure, with bounded recovery. If a page is missing, the handoff must state coverage rather than claim the entire site was captured.

For CSV, confirm encoding, delimiter, quotes and embedded newlines. For JSON, preserve intended nesting and type definitions. Untrusted values beginning with spreadsheet formula characters need a deliberate text-export policy before opening in a spreadsheet, with a safely preserved original source for comparison. Attach source URL and observation time to every record so updates and disputed values can be traced.

Route three: preserve provenance when converting HTML to Markdown

Distinguish converting a local file from first fetching a URL. A URL fetch uses the network; local conversion does not imply an entirely offline pipeline. Recognition models, plugins and conversion APIs can introduce other data destinations. Inspect the selected implementation, configuration and logs instead of making a privacy promise from a tool name.

Preserve heading hierarchy, paragraphs, lists, links and tables from the main content. Remove navigation and repeated footers carefully so price notes, update dates and applicability conditions remain. Resolve relative links to traceable destinations. Record original title, URL, retrieval time and local source identifier. Keep extracted content separate from a later generated summary so an assistant's explanation cannot masquerade as source text.

Simple Markdown tables cannot faithfully express every merged header or complex layout. Store a complex fee schedule as CSV or JSON and link it from the archive rather than flattening it into ambiguous columns. Label image alternative text separately from recognized image text. Do not claim that a converter automatically interpreted every chart. Inspect headings, opening paragraphs, important tables, notes and links after conversion, and keep a failed-file manifest.

Structuring content can support later retrieval and analysis. It does not guarantee search indexing, better ranking or correct understanding by every AI system. Retrieval also depends on access, indexing and the query process. If material enters a knowledge system, versioning and duplicate ingestion require their own policy. Writing a Markdown file is not proof that a searchable knowledge base has been built.

A concrete pilot across the three routes

Choose one merged-header screenshot, one paginated course list and one HTML description. Fix the target fields: course ID, name, original schedule, original fee, parsed amount, currency, source and review status. The image route returns a cell-review list; web collection returns page coverage; Markdown conversion returns a structure-loss note. Expand only after the owner accepts this sample.

Accept layers separately: the file opens, rows and columns align, types behave as intended, critical values match their sources, and missing or unknown content remains visible. Count input items, complete outputs, partial outputs and failures rather than reporting a vague conversion-success percentage. The six source package names are not evidence that this example ran. All processing outcomes here describe proposed acceptance, not executed results.

Use a verified Skill after conversion, within its limits

Exploratory Data Analysis fits authorized local CSV or JSON quality inspection after export. Within its supported formats it can inspect missingness, repeated observations, unusual distributions and field-type issues. It does not replace screenshot OCR, browser collection or workbook creation, and cannot independently prove cell-by-cell agreement with the original image.

Set an explicit data root and read-only inputs. Confirm Python 3.11 or later and any optional dependencies required at the pinned source. Keep reports aggregate rather than printing identifying records. Investigate an anomaly against the original image or page before changing a value; analysis must not silently rewrite the evidence. The detail page exposes the pinned version and MIT license evidence. Static verification is not runtime certification for this example.

The other source package names have not received matching SkillPI source verification here, so no guessed links are added. Discover a candidate by specifying input type, language, complex headers, desired export, allowed network use and acceptance artifact. Inspect source, SKILL.md, dependencies and real data destinations, then trial a redacted sample. Bound any directory batch before recursive processing so unrelated private files do not become inputs by accident.

Troubleshooting and frequently asked questions

Why are rows shifted after recognition? Revisit the image, merged headers and page continuation; repair structure before individual characters. Why did a website return only ten rows? Inspect pagination, virtualization and filters rather than fabricating the expected count. Why is CSV text garbled? Check encoding and import settings. Why do prices not calculate? Check text types, currency and locale conventions without converting identifier codes and destroying leading zeros.

Why did Markdown omit a note? Inspect the selected main-content boundary and conversion limitations; absence from the output does not mean absence from the source. Can a PDF table parser read a scan directly? Not necessarily. GitHub's pdfplumber documentation says it works best with machine-generated PDFs and does not provide OCR, so it is not a uniform screenshot-recognition solution. How should repeated runs avoid duplicate output? Retain input identity, source record IDs and versions, distinguish replacement from append and partial recovery, and rehearse on the pilot first.

Sources

The English source supplies the three conversion scenarios. GitHub research used pdfplumber to inspect an important boundary: its public table-extraction and visual-debugging documentation does not establish image OCR support. This motivates separate routes rather than adopting it for every input; no code was downloaded or run. The pinned EDA source supports only the bounded post-conversion local quality step.

Share articleX ↗LinkedIn ↗