<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ernesto Casablanca</title>
    <description>The latest articles on DEV Community by Ernesto Casablanca (@tendto).</description>
    <link>https://dev.to/tendto</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4233493%2F3f93bfe8-e675-496e-bf57-6cf1902b0cd6.png</url>
      <title>DEV Community: Ernesto Casablanca</title>
      <link>https://dev.to/tendto</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tendto"/>
    <language>en</language>
    <item>
      <title>EARWITNESS</title>
      <dc:creator>Ernesto Casablanca</dc:creator>
      <pubDate>Sun, 08 Nov 2026 11:58:53 +0000</pubDate>
      <link>https://dev.to/tendto/earwitness-50h6</link>
      <guid>https://dev.to/tendto/earwitness-50h6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Every photo and video is a witness.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://streamable.com/s1tmt8" rel="noopener noreferrer"&gt;&lt;strong&gt;Watch the trailer!&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A video is rarely just a sequence of pictures and sounds. Its frame timing can expose an edit. A faint electrical hum can narrow down when and where it was recorded. Street signs, accents, weather, compression artefacts, reflections and even stars can all reveal details that were never deliberately placed in the shot.&lt;/p&gt;

&lt;p&gt;Professional forensic analysts know how to investigate those traces, but the relevant tools are fragmented, highly technical and often inaccessible to the people who first need an answer: journalists, fact-checkers and anyone handed a clip that supposedly “proves” something.&lt;/p&gt;

&lt;p&gt;For HackTheBurgh 2026, we built &lt;strong&gt;EARWITNESS&lt;/strong&gt;: a web-based forensics suite that questions a photo or video through 15 independent “witnesses” and turns their findings into a plain-language report.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://earwitness.ussr.pl/" rel="noopener noreferrer"&gt;earwitness.ussr.pl&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/HTB2026/HackTheBurgh2026" rel="noopener noreferrer"&gt;github.com/HTB2026/HackTheBurgh2026&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;This project is a submission for &lt;a href="https://hacktheburgh.com/" rel="noopener noreferrer"&gt;HackTheBurgh 2026&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The idea: leads, not proof
&lt;/h2&gt;

&lt;p&gt;The central design decision behind EARWITNESS was not a model or an algorithm. It was a rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every result must say what was measured, how confident the system is and where the method can fail.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Media forensics is full of signals that are useful but not conclusive. Metadata may contain a GPS position, but metadata can be removed or rewritten. Pixel statistics may look suspicious, but ordinary phone compression can create similar patterns. An AI model may recognise a city, but it can also be confidently wrong.&lt;/p&gt;

&lt;p&gt;We therefore avoided building a single black-box “real or fake” detector. Instead, EARWITNESS treats each technique as an independent witness. Every witness submits a finding, supporting evidence, confidence and limitations. The final case summary weighs agreement and disagreement across the panel.&lt;/p&gt;

&lt;p&gt;That structure makes the result more useful and more honest. One weak clue remains a lead. Several independent clues pointing to the same conclusion make a stronger case.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the witnesses examine
&lt;/h2&gt;

&lt;p&gt;The available checks depend on whether the uploaded file is a photograph or a video.&lt;/p&gt;

&lt;h3&gt;
  
  
  File and image evidence
&lt;/h3&gt;

&lt;p&gt;EARWITNESS begins with evidence already present in the file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;File history&lt;/strong&gt; reads metadata such as the recording device, date, location and software that has handled the file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compression anatomy&lt;/strong&gt; examines JPEG quantisation, encoder characteristics, block structure and signs of repeated saves.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hidden data&lt;/strong&gt; accounts for bytes outside the visible image, including appended content, comments, private blocks and embedded thumbnails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pixel tampering&lt;/strong&gt; searches for copied, pasted or differently processed regions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-generation signals&lt;/strong&gt; inspect declared provenance information and weaker statistical traces associated with synthetic imagery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;People analysis&lt;/strong&gt; finds usable faces and examines details such as eye reflections without attempting to identify anyone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These checks can expose useful inconsistencies, but none is treated as infallible. Re-uploading through a messaging platform may strip metadata and recompress an image, while normal camera processing can resemble editing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Video and audio evidence
&lt;/h3&gt;

&lt;p&gt;Video gives us temporal and acoustic signals as well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frame timing&lt;/strong&gt; checks spacing, sudden visual changes, duplicated frames, dropped frames and possible joins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sound analysis&lt;/strong&gt; converts audio into a visual representation and searches for tones, silences and abrupt changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Electrical hum&lt;/strong&gt; looks for traces of the local power grid, which may indicate a grid frequency and, in favourable conditions, a recording time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Light flicker&lt;/strong&gt; examines artificial lighting for mains-related flicker and possible sensor timing clues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heartbeat&lt;/strong&gt; looks for tiny periodic colour changes in visible skin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sound versus picture&lt;/strong&gt; compares sharp sounds with visible events to detect synchronisation problems or replaced audio.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speech&lt;/strong&gt; transcribes spoken content with timestamps and identifies potentially useful names, places and times.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sound sleuth&lt;/strong&gt; uses AI to suggest background sounds, accents and languages that may point towards a location or time of day.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some of these signals are extremely fragile. Compression, music, movement, filtered phone audio and poor lighting can erase them. EARWITNESS reports that absence rather than forcing a conclusion.&lt;/p&gt;

&lt;h3&gt;
  
  
  Location witnesses
&lt;/h3&gt;

&lt;p&gt;For many investigations, the first question is simply: &lt;strong&gt;where was this recorded?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;EARWITNESS combines visible text, scene understanding and external corroboration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Text in the picture&lt;/strong&gt; reads signs, screens, number plates and other labels.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI eyewitness&lt;/strong&gt; describes architecture, vehicles, uniforms, weather, terrain and other visible details.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Location from pixels&lt;/strong&gt; estimates a likely country, region or place using only scene content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weather witness&lt;/strong&gt; compares the claimed place and time with recorded local conditions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The report leads with a proposed location, uncertainty radius and confidence level. It also shows the frame used, the matching reference imagery, and the clues that agreed or disagreed.&lt;/p&gt;

&lt;p&gt;A second, sceptical AI is used as a verifier rather than another source of unchecked confidence. It challenges the initial hypothesis against satellite imagery, landmark photographs and street-level references before a claim is marked as verified.&lt;/p&gt;

&lt;h2&gt;
  
  
  Designing the investigation flow
&lt;/h2&gt;

&lt;p&gt;A technically impressive detector is not very helpful if its output is a folder of plots and JSON files. We wanted the investigation itself to be understandable.&lt;/p&gt;

&lt;p&gt;The user flow is deliberately small:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload a photo or video.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Quick&lt;/strong&gt; or &lt;strong&gt;Deep&lt;/strong&gt; analysis.&lt;/li&gt;
&lt;li&gt;Watch the witnesses run live.&lt;/li&gt;
&lt;li&gt;Open each finding to inspect its evidence and limitations.&lt;/li&gt;
&lt;li&gt;Read the combined verdict and location report.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Quick mode aims to produce useful leads in roughly a minute. Deep mode allows up to around ten minutes for more expensive analysis and corroboration.&lt;/p&gt;

&lt;p&gt;Showing progress matters. A forensic pipeline can otherwise look frozen while it extracts frames, analyses audio or waits for an external model. Streaming each witness’s status makes the system feel like an active investigation and helps the user understand where the eventual answer came from.&lt;/p&gt;

&lt;h2&gt;
  
  
  From heterogeneous tools to one evidence model
&lt;/h2&gt;

&lt;p&gt;The hardest engineering problem was not implementing one detector. It was making very different detectors behave like parts of the same product.&lt;/p&gt;

&lt;p&gt;A metadata parser may return exact key-value pairs. A signal-processing check may produce frequencies, peaks and a diagnostic plot. OCR returns uncertain text with bounding boxes. A vision model returns prose. A weather lookup returns structured observations. Those outputs cannot be dropped directly into one interface.&lt;/p&gt;

&lt;p&gt;We needed a shared conceptual contract for every witness:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;status:&lt;/strong&gt; waiting, running, complete, failed or inconclusive;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;claim:&lt;/strong&gt; the plain-language finding;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;confidence:&lt;/strong&gt; how strongly this witness supports its own claim;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;evidence:&lt;/strong&gt; frames, measurements, text or references behind the claim;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;limitations:&lt;/strong&gt; conditions that weaken or invalidate the method;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;provenance:&lt;/strong&gt; whether a statement came from deterministic analysis, an external source or AI inference.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This evidence model let us build the report around meaning rather than around whichever library produced the result. It also made failures local: if one witness cannot analyse a file, the remaining witnesses can still complete the case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building an honest verdict
&lt;/h2&gt;

&lt;p&gt;We intentionally avoided reducing the entire report to a mysterious percentage.&lt;/p&gt;

&lt;p&gt;For editing, the interface uses verdicts such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Edited&lt;/strong&gt; — independent checks indicate that the file was cut or altered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Possibly edited&lt;/strong&gt; — something is inconsistent, but alteration is not established.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No signs of editing&lt;/strong&gt; — the checks found no measured indication of a cut or alteration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-generated&lt;/strong&gt; — the file itself contains provenance declaring AI generation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The wording is important. “No signs of editing” is not the same as “authentic.” A staged video can be recorded in one take. A generated image can be photographed from a screen. A synthetic file can also lose its provenance labels after re-encoding.&lt;/p&gt;

&lt;p&gt;Likewise, pixel statistics may raise suspicion, but they do not by themselves prove AI generation. EARWITNESS reserves the strongest AI-generated verdict for explicit file-level provenance and labels weaker model-based indications as uncertain.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we learned during the hackathon
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Independent weak signals can be stronger than one impressive model
&lt;/h3&gt;

&lt;p&gt;The most valuable result is often agreement between methods that fail differently. Metadata and OCR can be manipulated, geolocation models can hallucinate, and weather stations can be distant from the scene. When several of them converge, the user has a much better lead than any one method could provide.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Confidence needs context
&lt;/h3&gt;

&lt;p&gt;A confidence number without an explanation creates false precision. We found it more useful to pair confidence with the evidence, the method’s assumptions and a visible uncertainty radius.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. “Inconclusive” is a successful result
&lt;/h3&gt;

&lt;p&gt;Many recordings simply do not contain measurable electrical hum, readable text or a usable face. Reporting that honestly is better than manufacturing an answer. A robust forensic product needs graceful abstention as much as it needs detection.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. AI works better as a participant than as the judge
&lt;/h3&gt;

&lt;p&gt;AI is useful for generating hypotheses from messy scenes, sounds and language. It is much less trustworthy when asked to produce an unquestioned final answer. In EARWITNESS, AI-generated observations are labelled, challenged and combined with deterministic measurements and external evidence.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Re-uploads destroy evidence
&lt;/h3&gt;

&lt;p&gt;Messaging apps and social networks often strip metadata and recompress media. That can remove exactly the clues an investigation needs. Whenever possible, the original file should be analysed rather than a downloaded social-media copy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What EARWITNESS cannot prove
&lt;/h2&gt;

&lt;p&gt;We wanted the limitations to be part of the product rather than buried in a disclaimer.&lt;/p&gt;

&lt;p&gt;EARWITNESS cannot guarantee that a file depicts a truthful event. It cannot prove authenticity merely because it found no edit. It cannot assume metadata is genuine. It cannot turn a model’s location guess into a fact without corroboration. Its case summary is only as strong as the witnesses underneath it.&lt;/p&gt;

&lt;p&gt;The goal is not to replace a forensic analyst or the original source. It is to make sophisticated investigative leads available quickly, present the evidence behind them and help users decide what to verify next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where we would take it next
&lt;/h2&gt;

&lt;p&gt;With more time, we would focus on evaluation and reproducibility rather than simply adding more detectors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;benchmark each witness against labelled, real-world media;&lt;/li&gt;
&lt;li&gt;calibrate confidence separately for different devices and compression levels;&lt;/li&gt;
&lt;li&gt;preserve complete evidence provenance and reproducible analysis parameters;&lt;/li&gt;
&lt;li&gt;expand reference-data coverage for geolocation;&lt;/li&gt;
&lt;li&gt;improve adversarial testing against deliberately manipulated files;&lt;/li&gt;
&lt;li&gt;let investigators export a portable case bundle for independent review;&lt;/li&gt;
&lt;li&gt;add stronger privacy controls and configurable data-retention policies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A larger panel is only useful if each witness is measurable, auditable and clear about uncertainty.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure as code on Vultr&lt;/strong&gt;: We deployed EARWITNESS on Vultr and defined the cloud infrastructure using Terraform. This made the environment reproducible and allowed us to provision or rebuild the required compute and networking without relying on manual server configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TigerCloud PostgreSQL persistence&lt;/strong&gt;: Analysis jobs, extracted evidence, intermediate findings and final reports are stored in a managed PostgreSQL database provided by TigerCloud. Persisting each witness’s structured output allows the frontend to display live progress and lets users return to previously submitted cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agentic development with Entire&lt;/strong&gt;: We used Entire to organise and preserve our agentic development workflows. Its checkpoints helped connect AI-assisted coding sessions with the repository’s Git history, making generated changes easier to inspect, continue and audit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A hybrid forensic pipeline&lt;/strong&gt;: EARWITNESS combines deterministic extraction and signal processing with AI-enhanced analysis rather than relying on one black-box model. File metadata, compression characteristics, frame timing, audio signals and other measurable properties are evaluated alongside OCR, visual interpretation, sound classification and geolocation hypotheses. Every technique becomes an independent “witness,” so corroborating signals can strengthen a prediction while conflicting evidence remains visible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple interchangeable LLM backends&lt;/strong&gt;: The AI layer supports OpenAI, Google Gemini and a self-hosted Gemma 4 deployment (on Vultr). Keeping model providers behind a common interface lets individual workflows use the most suitable backend, reduces dependence on a single external API and gives us a self-hosted option for greater control over cost and data processing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authenticated access through Auth0&lt;/strong&gt;: Media analysis is computationally expensive, especially when several witnesses process video frames, audio tracks and external reference data concurrently. We therefore require users to authenticate through Auth0, helping us associate jobs with users, control access and protect the service against automated misuse and unbounded compute consumption.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independent, failure-tolerant witnesses&lt;/strong&gt;: Each forensic check produces a standard result containing its execution status, claim, confidence, evidence, limitations and provenance. This common contract allows very different tools—from metadata parsers to multimodal models—to feed the same report, while ensuring that one failed or inconclusive check does not prevent the rest of the investigation from completing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asynchronous live analysis&lt;/strong&gt;: Uploaded media passes through multiple independent and potentially long-running checks. The interface exposes witness-level progress as the analysis runs, rather than making users wait for the entire pipeline to finish before seeing any result.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two analysis depths&lt;/strong&gt;: Quick mode prioritises fast, high-value checks, while Deep mode permits more computationally expensive processing and corroboration. This gives users a practical trade-off between turnaround time and investigative depth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explicit AI provenance&lt;/strong&gt;: AI-derived observations are labelled separately from deterministic measurements and externally verified facts. A second, sceptical stage can challenge geolocation hypotheses against satellite, landmark and street-level reference imagery before they are presented as verified.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>hackathon</category>
      <category>mlhacks</category>
    </item>
  </channel>
</rss>
