<?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: Aryan Jagdale</title>
    <description>The latest articles on DEV Community by Aryan Jagdale (@aryan_jagdale_e15f0fdd008).</description>
    <link>https://dev.to/aryan_jagdale_e15f0fdd008</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%2F4156447%2Fa5c5cf72-0aa7-4cd9-bcf5-2779d8387117.jpg</url>
      <title>DEV Community: Aryan Jagdale</title>
      <link>https://dev.to/aryan_jagdale_e15f0fdd008</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aryan_jagdale_e15f0fdd008"/>
    <language>en</language>
    <item>
      <title>SnoreLab: Privacy-First Local AI for Snoring Detection</title>
      <dc:creator>Aryan Jagdale</dc:creator>
      <pubDate>Sun, 04 Oct 2026 10:26:15 +0000</pubDate>
      <link>https://dev.to/aryan_jagdale_e15f0fdd008/snorelab-privacy-first-local-ai-for-snoring-detection-1868</link>
      <guid>https://dev.to/aryan_jagdale_e15f0fdd008/snorelab-privacy-first-local-ai-for-snoring-detection-1868</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  💤 SnoreLab
&lt;/h1&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built &lt;strong&gt;SnoreLab&lt;/strong&gt;, a privacy-first local AI tool for detecting and analyzing snoring from audio recordings.&lt;/p&gt;

&lt;p&gt;I built it for my roommate, whose snoring can make it difficult to sleep. Instead of sending bedroom audio to a cloud service, SnoreLab processes the recording locally and produces a timeline of detected snoring, episode statistics, and an AI-generated summary.&lt;/p&gt;

&lt;p&gt;The idea was simple: solve a real problem while keeping a sensitive recording private.&lt;/p&gt;

&lt;p&gt;SnoreLab can answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How much of the recording was classified as snoring?&lt;/li&gt;
&lt;li&gt;How many snoring episodes were detected?&lt;/li&gt;
&lt;li&gt;How long was the longest episode?&lt;/li&gt;
&lt;li&gt;What did the overall recording look like?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is a personal analysis tool, not a medical device or diagnostic system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;🎥 &lt;strong&gt;&lt;a href="https://youtu.be/U68sapCnv90" rel="noopener noreferrer"&gt;Watch the SnoreLab demo on YouTube&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The demo shows the complete workflow from selecting an audio recording to local AI analysis, snoring detection, episode visualization, and the verified Gemma summary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;💻 &lt;strong&gt;&lt;a href="https://github.com/Astra1906/snorelab" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The entire project is open source and can be run locally.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;SnoreLab is built around &lt;strong&gt;local AI inference&lt;/strong&gt; rather than a cloud AI API.&lt;/p&gt;

&lt;p&gt;The pipeline looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Local audio
    ↓
FFmpeg preprocessing
    ↓
16 kHz mono audio
    ↓
~1 second windows
    ↓
YAMNet embeddings
    ↓
Logistic Regression classifier
    ↓
Snoring timeline + episode analysis
    ↓
Derived statistics
    ↓
Local Gemma 3 1B
    ↓
Verified AI summary
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  YAMNet
&lt;/h3&gt;

&lt;p&gt;I use Google's &lt;strong&gt;YAMNet&lt;/strong&gt; as the audio representation model.&lt;/p&gt;

&lt;p&gt;Each audio window is converted into a 1024-dimensional embedding, which is then passed to a lightweight Logistic Regression classifier trained to distinguish snoring from non-snoring audio.&lt;/p&gt;

&lt;p&gt;Across five sample-level validation splits, the YAMNet-based pipeline achieved:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;99.4% ± 0.2% accuracy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is a prototype benchmark on a limited dataset, not a claim of real-world or clinical accuracy. The dataset also contains duplicate samples and does not provide enough metadata for subject-independent evaluation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local Gemma
&lt;/h3&gt;

&lt;p&gt;For the natural-language summary, SnoreLab uses &lt;strong&gt;Gemma 3 1B&lt;/strong&gt; through Ollama.&lt;/p&gt;

&lt;p&gt;Gemma never receives the raw audio.&lt;/p&gt;

&lt;p&gt;Instead, it receives only six derived statistics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recording duration&lt;/li&gt;
&lt;li&gt;Total detected snoring duration&lt;/li&gt;
&lt;li&gt;Percentage of the recording classified as snoring&lt;/li&gt;
&lt;li&gt;Number of snoring episodes&lt;/li&gt;
&lt;li&gt;Average episode duration&lt;/li&gt;
&lt;li&gt;Longest episode duration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemma is required to return these values in a structured JSON response. SnoreLab verifies that the returned values match the original deterministic statistics before displaying the summary.&lt;/p&gt;

&lt;p&gt;If Gemma is unavailable or its response fails validation, SnoreLab falls back to a deterministic summary.&lt;/p&gt;

&lt;h3&gt;
  
  
  Privacy by Design
&lt;/h3&gt;

&lt;p&gt;The audio stays on the user's machine.&lt;/p&gt;

&lt;p&gt;There is no cloud audio upload and no external AI inference API involved in the analysis pipeline.&lt;/p&gt;

&lt;p&gt;The raw recording is processed locally, and Gemma only sees the derived statistics needed to generate the summary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;This project would be fundamentally different if I had built it around a closed cloud AI API.&lt;/p&gt;

&lt;p&gt;Snoring recordings are sensitive. Sending them to a remote service just to answer something as simple as "how much did I snore?" felt unnecessary.&lt;/p&gt;

&lt;p&gt;Open AI models made it possible to bring the intelligence to the data instead.&lt;/p&gt;

&lt;p&gt;With local models and open tooling, I could:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run audio inference on my own machine&lt;/li&gt;
&lt;li&gt;Inspect and modify the processing pipeline&lt;/li&gt;
&lt;li&gt;Experiment with different models&lt;/li&gt;
&lt;li&gt;Keep raw recordings local&lt;/li&gt;
&lt;li&gt;Combine specialized AI models with traditional machine learning&lt;/li&gt;
&lt;li&gt;Run a language model locally without sending personal audio to a third party&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For me, open innovation isn't just about having access to source code or model weights.&lt;/p&gt;

&lt;p&gt;It makes it possible to build AI applications where &lt;strong&gt;privacy, experimentation, and control are part of the architecture rather than afterthoughts.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What My Friend Thought
&lt;/h2&gt;

&lt;p&gt;After building SnoreLab, I showed it to the person I built it for, my roommate.&lt;/p&gt;

&lt;p&gt;His reaction was basically: &lt;strong&gt;“Wait, you actually built something to detect my snoring?”&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;He found the timeline and episode breakdown useful because it made it easy to see not just whether snoring happened, but &lt;strong&gt;when it happened and for how long&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The biggest takeaway was that the project solved an actual problem for someone I know, rather than being an AI demo built just to showcase a model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Gemma
&lt;/h3&gt;

&lt;p&gt;SnoreLab uses &lt;strong&gt;Gemma 3 1B&lt;/strong&gt; locally to generate verified natural-language summaries from the detected snoring statistics.&lt;/p&gt;

&lt;p&gt;The model runs locally through Ollama, keeping the audio analysis workflow private.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
  </channel>
</rss>
