<?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: dongdong</title>
    <description>The latest articles on DEV Community by dongdong (@arkyu2077).</description>
    <link>https://dev.to/arkyu2077</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%2F4225290%2F3a17202c-1ec0-4c02-af99-6540a38d1d56.jpg</url>
      <title>DEV Community: dongdong</title>
      <link>https://dev.to/arkyu2077</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arkyu2077"/>
    <language>en</language>
    <item>
      <title>16K Neural Image Super-Resolution and Batch E-Commerce Photo Restoration with Monipix</title>
      <dc:creator>dongdong</dc:creator>
      <pubDate>Wed, 04 Nov 2026 07:05:37 +0000</pubDate>
      <link>https://dev.to/arkyu2077/16k-neural-image-super-resolution-and-batch-e-commerce-photo-restoration-with-monipix-lh</link>
      <guid>https://dev.to/arkyu2077/16k-neural-image-super-resolution-and-batch-e-commerce-photo-restoration-with-monipix-lh</guid>
      <description>&lt;p&gt;Upscaling low-resolution product photos, vintage family portraits, or AI-generated concept art using traditional bicubic or Lanczos interpolation inevitably produces blurry edges, halo artifacts, and washed-out textures.&lt;/p&gt;

&lt;p&gt;In this technical write-up, we share how we built &lt;strong&gt;&lt;a href="https://monipix.com" rel="noopener noreferrer"&gt;Monipix&lt;/a&gt;&lt;/strong&gt; — a browser-based AI image upscaler and creative workspace capable of 2x to 16x super-resolution (up to 4K, 8K, and 16K) — along with our &lt;strong&gt;&lt;a href="https://monipix.com/tools/hd-image-converter" rel="noopener noreferrer"&gt;HD Image Converter&lt;/a&gt;&lt;/strong&gt; and open-source &lt;strong&gt;&lt;a href="https://github.com/arkyu2077/ai-image-upscaler" rel="noopener noreferrer"&gt;AI Image Upscaler Toolkit&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Tiled Neural Super-Resolution Without GPU OOM
&lt;/h2&gt;

&lt;p&gt;Upscaling a 1024×1024 image by 8x or 16x produces a 16,384×16,384 canvas (268 megapixels). Running a single forward pass at that resolution exhausts VRAM immediately. To achieve artifact-free 16K output:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Overlapping Tile Decomposition&lt;/strong&gt;: The input image is partitioned into overlapping tiles (e.g., 512×512 with a 64px feathering margin).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Degradation-Aware Restoration&lt;/strong&gt;: Compression artifacts (JPEG blockiness, mosquito noise, motion blur) are removed prior to high-frequency texture synthesis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hann-Window Blending&lt;/strong&gt;: Upscaled tiles are stitched using raised-cosine weights so tile boundaries are completely invisible even across smooth gradients.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;UpscaleOptions&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;scaleFactor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;targetResolution&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;4K&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;8K&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;16K&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;denoiseStrength&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 0.0 - 1.0&lt;/span&gt;
  &lt;span class="nl"&gt;faceEnhancement&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;outputFormat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;png&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;webp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. High-Frequency Detail Recovery for E-Commerce &amp;amp; Print
&lt;/h2&gt;

&lt;p&gt;For e-commerce catalogs, anime illustrations, and print-ready posters, &lt;strong&gt;&lt;a href="https://monipix.com" rel="noopener noreferrer"&gt;Monipix&lt;/a&gt;&lt;/strong&gt; and the &lt;strong&gt;&lt;a href="https://monipix.com/tools/hd-image-converter" rel="noopener noreferrer"&gt;Monipix HD Image Converter&lt;/a&gt;&lt;/strong&gt; preserve crisp typography, fabric weave, and facial details without over-smoothing.&lt;/p&gt;

&lt;p&gt;Developers can also inspect our open-source benchmarks, scripts, and integration examples on GitHub at &lt;strong&gt;&lt;a href="https://github.com/arkyu2077/ai-image-upscaler" rel="noopener noreferrer"&gt;arkyu2077/ai-image-upscaler&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Links &amp;amp; Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monipix 4K/8K/16K AI Image Upscaler&lt;/strong&gt;: &lt;a href="https://monipix.com" rel="noopener noreferrer"&gt;https://monipix.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HD Image Converter&lt;/strong&gt;: &lt;a href="https://monipix.com/tools/hd-image-converter" rel="noopener noreferrer"&gt;https://monipix.com/tools/hd-image-converter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository&lt;/strong&gt;: &lt;a href="https://github.com/arkyu2077/ai-image-upscaler" rel="noopener noreferrer"&gt;https://github.com/arkyu2077/ai-image-upscaler&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>imageprocessing</category>
    </item>
    <item>
      <title>Automating Narrated Whiteboard Explainer Videos from Docs and Scripts with SpeedPainter &amp; MCP</title>
      <dc:creator>dongdong</dc:creator>
      <pubDate>Wed, 04 Nov 2026 07:05:07 +0000</pubDate>
      <link>https://dev.to/arkyu2077/automating-narrated-whiteboard-explainer-videos-from-docs-and-scripts-with-speedpainter-mcp-433p</link>
      <guid>https://dev.to/arkyu2077/automating-narrated-whiteboard-explainer-videos-from-docs-and-scripts-with-speedpainter-mcp-433p</guid>
      <description>&lt;p&gt;Creating hand-drawn whiteboard explainer videos from technical documentation, product specs, or classroom notes usually requires hours of manual keyframing in desktop timeline editors.&lt;/p&gt;

&lt;p&gt;In this technical guide, we walk through how we built &lt;strong&gt;&lt;a href="https://www.speedpainter.org/en" rel="noopener noreferrer"&gt;SpeedPainter AI&lt;/a&gt;&lt;/strong&gt; — a browser-based AI speed paint and whiteboard animation studio — and how developers and AI agents can automate narrated multi-scene explainer videos using our &lt;strong&gt;&lt;a href="https://www.speedpainter.org/en/explainer-video" rel="noopener noreferrer"&gt;AI Whiteboard Explainer Video Maker&lt;/a&gt;&lt;/strong&gt; and open-source &lt;strong&gt;&lt;a href="https://github.com/SpeedPainterOrg/explainer-video" rel="noopener noreferrer"&gt;SpeedPainter Explainer Video CLI &amp;amp; MCP Server&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Stroke-Order Extraction &amp;amp; Hand-Drawn Trajectory Synthesis
&lt;/h2&gt;

&lt;p&gt;Unlike generic text-to-video diffusion models that hallucinate unreadable text or flickering diagrams, a true whiteboard speed-paint animation needs deterministic stroke progression:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Structural Edge &amp;amp; Contour Decomposition&lt;/strong&gt;: Uploaded diagrams, illustrations, or generated storyboard frames are segmented into hierarchical vector contours (primary outlines first, internal shading and color fills second).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous Path Ordering&lt;/strong&gt;: We solve a locality-constrained path optimization problem so the virtual drawing hand moves naturally across the canvas without erratic jumps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synchronized Voiceover &amp;amp; Subtitle Alignment&lt;/strong&gt;: In our &lt;strong&gt;&lt;a href="https://www.speedpainter.org/en/explainer-video" rel="noopener noreferrer"&gt;AI Whiteboard Explainer Video Maker&lt;/a&gt;&lt;/strong&gt;, each script paragraph is synthesized into natural narration while the stroke drawing duration is dynamically scaled to match the audio cadence.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;SceneSpec&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;sceneIndex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;narrationText&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;visualPrompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;sketchDurationSec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;handStyle&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;marker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pencil&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;chalk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Automating Explainer Videos from Claude Desktop &amp;amp; Cursor via MCP
&lt;/h2&gt;

&lt;p&gt;To let developers generate whiteboard animations directly from markdown READMEs or PR descriptions, we open-sourced &lt;strong&gt;&lt;a href="https://github.com/SpeedPainterOrg/explainer-video" rel="noopener noreferrer"&gt;SpeedPainterOrg/explainer-video&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can wire it into Claude Desktop, Cursor, or Windsurf via MCP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"speedpainter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@speedpainter/explainer-video-mcp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Try It Live
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web Studio (Image to Speed Paint Video)&lt;/strong&gt;: &lt;a href="https://www.speedpainter.org/en" rel="noopener noreferrer"&gt;https://www.speedpainter.org/en&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Script-to-Whiteboard Explainer Video Maker&lt;/strong&gt;: &lt;a href="https://www.speedpainter.org/en/explainer-video" rel="noopener noreferrer"&gt;https://www.speedpainter.org/en/explainer-video&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository &amp;amp; MCP Integration&lt;/strong&gt;: &lt;a href="https://github.com/SpeedPainterOrg/explainer-video" rel="noopener noreferrer"&gt;https://github.com/SpeedPainterOrg/explainer-video&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>video</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Building a Portuguese (PT-BR) Audio &amp; Video Transcription Pipeline with Whisper Large-v3, Pyannote Speaker Diarization, and MCP</title>
      <dc:creator>dongdong</dc:creator>
      <pubDate>Wed, 04 Nov 2026 03:09:17 +0000</pubDate>
      <link>https://dev.to/arkyu2077/building-a-portuguese-pt-br-audio-video-transcription-pipeline-with-whisper-large-v3-pyannote-5e50</link>
      <guid>https://dev.to/arkyu2077/building-a-portuguese-pt-br-audio-video-transcription-pipeline-with-whisper-large-v3-pyannote-5e50</guid>
      <description>&lt;p&gt;Transcribing multi-speaker audio and video in Brazilian Portuguese (PT-BR) comes with unique acoustic challenges: regional accents, colloquial expressions, overlapping speech in interviews, and low-bitrate voice notes (such as &lt;code&gt;.opus&lt;/code&gt; / &lt;code&gt;.ogg&lt;/code&gt; files from WhatsApp).&lt;/p&gt;

&lt;p&gt;In this guide, we walk through how we architected &lt;strong&gt;&lt;a href="https://transcreva.net/" rel="noopener noreferrer"&gt;Transcreva&lt;/a&gt;&lt;/strong&gt; — a fast, browser-accessible AI transcription and subtitle generation platform with automatic speaker diarization — and how we exposed its workflow to AI coding agents using the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Acoustic Transcription + Speaker Diarization Architecture
&lt;/h2&gt;

&lt;p&gt;When you run standard speech-to-text on a 45-minute podcast or academic interview, a wall of unsegmented text is hard to read. To produce dialogue-ready transcripts with &lt;code&gt;Speaker 1&lt;/code&gt;, &lt;code&gt;Speaker 2&lt;/code&gt; labels and word-level timestamps, we combine two stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ASR (Automatic Speech Recognition) with Whisper Large-v3&lt;/strong&gt;: Generates high-accuracy Portuguese and multilingual text segments with word-level alignment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speaker Diarization with Pyannote&lt;/strong&gt;: Computes speaker embeddings across sliding windows, clusters speaker turns, and aligns each Whisper word timestamp with the active speaker cluster.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;TranscriptSegment&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;speaker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// e.g., "Speaker 1"&lt;/span&gt;
  &lt;span class="nl"&gt;startTime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// seconds&lt;/span&gt;
  &lt;span class="nl"&gt;endTime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;formatSrtTimestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;hrs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;mins&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;3600&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;secs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ms&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;seconds&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hrs&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mins&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;secs&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Handling WhatsApp Voice Notes (&lt;code&gt;.opus&lt;/code&gt; / &lt;code&gt;.ogg&lt;/code&gt;) and Video Subtitles (&lt;code&gt;.srt&lt;/code&gt; / &lt;code&gt;.vtt&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;Two of the most common real-world workflows for Brazilian journalists, researchers, and creators are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp Audio Transcription&lt;/strong&gt;: Voice notes exported from WhatsApp use the Opus codec inside an &lt;code&gt;.ogg&lt;/code&gt; or &lt;code&gt;.opus&lt;/code&gt; container. Our dedicated &lt;a href="https://transcreva.net/transcrever-audio-whatsapp" rel="noopener noreferrer"&gt;WhatsApp Audio Transcription workflow&lt;/a&gt; normalizes sample rates on the fly and outputs clean paragraphs or speaker-labeled dialogue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic Subtitle Generation&lt;/strong&gt;: Video editors working on YouTube, Reels, or TikTok need frame-accurate captions. Using word-level timestamps from Whisper Large-v3, our &lt;a href="https://transcreva.net/gerar-legenda-automatica" rel="noopener noreferrer"&gt;Automatic Subtitle Generator&lt;/a&gt; segments lines by character-per-second (CPS) reading speed and exports ready-to-use &lt;code&gt;.srt&lt;/code&gt; and &lt;code&gt;.vtt&lt;/code&gt; files.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Integrating with Cursor &amp;amp; Claude Desktop via MCP (&lt;code&gt;transcreva-mcp&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;To bring transcription utilities directly into AI coding assistants (Cursor, Claude Desktop, Windsurf), we also built an open-source Model Context Protocol server: &lt;strong&gt;&lt;a href="https://github.com/arkyu2077/transcreva-mcp" rel="noopener noreferrer"&gt;transcreva-mcp&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can add it to your MCP configuration in seconds:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"transcreva"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"transcreva-mcp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Try It Out
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web App (Free Tier Available)&lt;/strong&gt;: &lt;a href="https://transcreva.net/" rel="noopener noreferrer"&gt;https://transcreva.net/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository (MCP Server)&lt;/strong&gt;: &lt;a href="https://github.com/arkyu2077/transcreva-mcp" rel="noopener noreferrer"&gt;https://github.com/arkyu2077/transcreva-mcp&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>typescript</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
