<?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: Dharamveer Singh</title>
    <description>The latest articles on DEV Community by Dharamveer Singh (@dharamveer_singh_281fe25f).</description>
    <link>https://dev.to/dharamveer_singh_281fe25f</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3956620%2F824a8151-29bb-47b6-a045-6db658e24965.gif</url>
      <title>DEV Community: Dharamveer Singh</title>
      <link>https://dev.to/dharamveer_singh_281fe25f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dharamveer_singh_281fe25f"/>
    <language>en</language>
    <item>
      <title>Screen2tutorial</title>
      <dc:creator>Dharamveer Singh</dc:creator>
      <pubDate>Sun, 18 Oct 2026 11:32:34 +0000</pubDate>
      <link>https://dev.to/dharamveer_singh_281fe25f/screen2tutorial-22f4</link>
      <guid>https://dev.to/dharamveer_singh_281fe25f/screen2tutorial-22f4</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week2-2026-10-12"&gt;Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Screen2Tutorial&lt;/strong&gt; turns a short screen recording of a coding or terminal tutorial into a step-by-step written guide in Markdown, with the commands and code copied from what appeared on screen.&lt;/p&gt;

&lt;p&gt;If you make coding videos, you know the chore of writing the blog-post version: pause, rewind, squint at the terminal, retype each command, and hope you didn't mistype one. Screen2Tutorial does that first draft for you. It is aimed at independent coding educators, YouTubers and developer-relations people who publish a video and a written version of the same lesson.&lt;/p&gt;

&lt;p&gt;The part I care most about is trust. A model that writes tutorials will sometimes invent a command or change an argument. So every command it writes is checked against two sources: the &lt;strong&gt;spoken transcript&lt;/strong&gt; and the &lt;strong&gt;text read from the video frames&lt;/strong&gt;. Each command ends up marked as verified by the screen, by speech, by both, or &lt;strong&gt;UNVERIFIED&lt;/strong&gt;, so the creator knows which lines to re-check before publishing.&lt;/p&gt;

&lt;p&gt;Would someone pay for it? That's a hypothesis I haven't validated. My guess is that a creator would pay to save editing time, as long as they can see where each step came from.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scope, on purpose:&lt;/strong&gt; one English-speaking narrator, terminal or IDE recordings, short videos, Markdown output. No logins, payments or multiple languages.&lt;/p&gt;

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

&lt;p&gt;This is the link of my video demo (&lt;a href="https://drive.google.com/file/d/13RJIw4tC_eS_72ANLC8A5RktlHw3dQTT/view?usp=drive_link" rel="noopener noreferrer"&gt;link&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;I tested it on two public videos. The main one is "10 Basic Ubuntu Linux Commands Every Beginner Should Know" by vCloudBitsBytes (&lt;a href="https://www.youtube.com/watch?v=7fs1i7TAMcko" rel="noopener noreferrer"&gt;link&lt;/a&gt;), about 4 minutes long. Here is one step of the output, with the verification label next to each command:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Step 4: Create Directories and Files using MKDIR and TOUCH&lt;/strong&gt;&lt;br&gt;
The author demonstrates how to use the &lt;code&gt;mkdir&lt;/code&gt; command to create a new directory named &lt;code&gt;test&lt;/code&gt; and the &lt;code&gt;touch&lt;/code&gt; command to create a new file named &lt;code&gt;test.txt&lt;/code&gt;...&lt;/p&gt;

&lt;p&gt;&lt;code&gt;mkdir test&lt;/code&gt; — verified_screen&lt;br&gt;
&lt;code&gt;ls&lt;/code&gt; — verified_both&lt;br&gt;
&lt;code&gt;touch test.txt&lt;/code&gt; — verified_screen&lt;/p&gt;
&lt;/blockquote&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/DS013git" rel="noopener noreferrer"&gt;
        DS013git
      &lt;/a&gt; / &lt;a href="https://github.com/DS013git/HacktoberFest01" rel="noopener noreferrer"&gt;
        HacktoberFest01
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;screen2tutorial&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Turn a 5–10 minute English coding recording into a code-backed, step-by-step
Markdown tutorial. Speech transcription and screen OCR are aligned by time
The writing model organizes the explanation and extracts visible code examples
each shell command is compared with both evidence sources, and commands found
in neither are marked &lt;strong&gt;UNVERIFIED&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The supported scope is one English-speaking narrator, one terminal/IDE
recording, and Markdown output. The application has a Streamlit upload page and
the CLI &lt;code&gt;python -m pipeline.run path/to/video.mp4&lt;/code&gt;.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Example output&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Excerpt from a generated guide for a CSS &lt;code&gt;random()&lt;/code&gt; tutorial:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The author demonstrates how to generate random values directly within CSS
to avoid hard-coding manual values or using JavaScript for simple visual
effects.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight highlight-source-css notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-ent"&gt;particle&lt;/span&gt; {
  &lt;span class="pl-c1"&gt;scale&lt;/span&gt;&lt;span class="pl-kos"&gt;:&lt;/span&gt; &lt;span class="pl-en"&gt;random&lt;/span&gt;(&lt;span class="pl-c1"&gt;1&lt;span class="pl-smi"&gt;px&lt;/span&gt;&lt;/span&gt;&lt;span class="pl-kos"&gt;,&lt;/span&gt; &lt;span class="pl-c1"&gt;7&lt;span class="pl-smi"&gt;px&lt;/span&gt;&lt;/span&gt;);
}&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Generated code is included when it matches text recognized on screen. Review
the extracted snippet against the recording before relying on it.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;…&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/DS013git/HacktoberFest01" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;MIT licensed. The README has Windows install steps (including ffmpeg and Tesseract), configuration, limitations and tests.&lt;/p&gt;

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

&lt;p&gt;The pipeline has six stages, one module each:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ffmpeg&lt;/strong&gt; extracts the audio and a frame every 2 seconds. Frames that are nearly identical to the previous one are dropped, since a screen recording is mostly unchanged screen and this saves a lot of OCR time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;faster-whisper&lt;/strong&gt; (&lt;code&gt;base&lt;/code&gt; model, int8, CPU) transcribes the audio with timestamps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tesseract&lt;/strong&gt; reads the text from the remaining frames.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alignment&lt;/strong&gt; groups speech and screen text into 30-second windows, so each model call sees what was &lt;em&gt;said&lt;/em&gt; and what was &lt;em&gt;visible&lt;/em&gt; at the same moment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The writing model&lt;/strong&gt; turns each window into one tutorial step as strict JSON. The prompt tells it to include a command only if it appears in the transcript or screen text, and code blocks that don't resemble the OCR text are dropped. Invalid JSON is retried once, then replaced by a plain fallback step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verification&lt;/strong&gt; normalizes each command and checks it against the transcript and screen text, using an exact match first and then a fuzzy match with RapidFuzz.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The open AI:&lt;/strong&gt; the writing step uses Gemma 4, an open-weight model, reached through Ollama's OpenAI-compatible endpoint. Whisper and Tesseract run entirely on my laptop. The endpoint and model name are two lines in &lt;code&gt;config.yaml&lt;/code&gt;, so another open model, hosted or local, can be swapped in without touching the code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built for a weak laptop.&lt;/strong&gt; My machine has 8 GB of RAM, an Intel i3 and no GPU. That decided most of the design: a small Whisper model, frame deduplication before OCR, caching of every stage on disk, and a hosted open model for the one step that needs real language quality.&lt;/p&gt;

&lt;h3&gt;
  
  
  What testing showed
&lt;/h3&gt;

&lt;p&gt;I'm a beginner with Whisper, OCR and LLM APIs, so I built and tested one stage at a time. The terminal test taught me the most.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First run on the Ubuntu video:&lt;/strong&gt; 20 commands found, 14 verified, &lt;strong&gt;6 flagged UNVERIFIED&lt;/strong&gt;. When I looked closer, four of the six flagged commands were verified in the neighboring step. The cause was in my own code: each command was checked only against the text of its own 30-second window, so a command typed near a window boundary was checked against the wrong text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; verify each step against the previous, current and next window together, and require whole-word matches for very short commands like &lt;code&gt;ls&lt;/code&gt; and &lt;code&gt;cd&lt;/code&gt; (otherwise "ls" matches inside ordinary words like "also").&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;First run&lt;/th&gt;
&lt;th&gt;After the fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Commands found&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Verified&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flagged UNVERIFIED&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All six earlier flags were false alarms from the window boundary, not real misses. All ten commands named in the video's own chapter list (cd, ls, pwd, mkdir, touch, cp, mv, rm, sudo, apt-get) appear in the tutorial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The CSS video&lt;/strong&gt; (a tutorial on CSS &lt;code&gt;random()&lt;/code&gt;, (&lt;a href="https://youtu.be/Uy3xsfAD8s0?si=NfCEIw2P7amMscUj" rel="noopener noreferrer"&gt;link&lt;/a&gt;)) produced an 8-step guide with 10 code blocks. Its verification summary showed 0 commands, which is correct, because the video was about CSS and not shell commands. It also shows the OCR limits: Tesseract read &lt;code&gt;0deg&lt;/code&gt; as &lt;code&gt;@deg&lt;/code&gt; and &lt;code&gt;:root&lt;/code&gt; as &lt;code&gt;sroot&lt;/code&gt;, and some closing braces were lost. Each code block carries a "check unclear characters against the recording" note for this reason.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where it is still weak
&lt;/h3&gt;

&lt;p&gt;A 20/20 score on one video is not proof that the verifier catches mistakes, so here are the honest limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Verified" means "resembles text from the video"&lt;/strong&gt;, not "is correct or safe to run."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One action can be split across two windows,&lt;/strong&gt; which produced repeated steps (the &lt;code&gt;touch&lt;/code&gt;, &lt;code&gt;rm&lt;/code&gt; and &lt;code&gt;apt-get&lt;/code&gt; steps each appear twice in the Ubuntu output).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OCR is imperfect&lt;/strong&gt; on small or low-contrast text, and I have only tested two videos.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;1. Privacy is a setting, not a promise.&lt;/strong&gt; Tutorials often show half-built projects, internal tools or terminal history. With open weights, the same pipeline can point at a local model for recordings that must not leave the machine. Right now my config uses a cloud-hosted Gemma, which sends the transcript and OCR text to Ollama for the writing step, and the README says so plainly. Switching to a local model is a config change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. No lock-in.&lt;/strong&gt; The model is a config value. If a better or cheaper open model appears, or one disappears, I change a line instead of rewriting the app. A creator who builds a workflow around the tool needs that stability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. I could see why it was wrong.&lt;/strong&gt; The verification feature is only worth trusting if its parts can be inspected. Because the whole stack is open, readable code and components, I could trace the six false alarms to a single design decision, fix it, and measure the difference, which is the loop in the testing section above.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>hacktoberfest</category>
    </item>
    <item>
      <title>Mac Os Website</title>
      <dc:creator>Dharamveer Singh</dc:creator>
      <pubDate>Fri, 29 May 2026 13:15:11 +0000</pubDate>
      <link>https://dev.to/dharamveer_singh_281fe25f/mac-os-website-29j6</link>
      <guid>https://dev.to/dharamveer_singh_281fe25f/mac-os-website-29j6</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I worked on a macOS-inspired web application that recreates the look and feel of the macOS desktop experience inside the browser. I am using this website as my portfolio website for now later it will make it so big that it will look like real mac os. For now the project includes a desktop interface, draggable windows, a dock, apps, and interactive UI elements that make it feel similar to a real operating system.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://dsmac-portfolio.netlify.app" rel="noopener noreferrer"&gt;https://dsmac-portfolio.netlify.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpcy74jb9x3tz3vk70a96.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpcy74jb9x3tz3vk70a96.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;When I started, the project was incomplete and several features were either broken or unfinished. Some UI components were missing, interactions were inconsistent, and parts of the application were not fully connected.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot has been a really helpful coding assistant during my development journey. It helps me write code faster, understand unfamiliar concepts, debug issues, and improve my workflow. I especially like how it suggests useful code completions and saves time while building projects. Using Copilot has also helped me learn better coding practices and explore new approaches while developing applications.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
    </item>
  </channel>
</rss>
