<?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: 高赫阳</title>
    <description>The latest articles on DEV Community by 高赫阳 (@oscar_g).</description>
    <link>https://dev.to/oscar_g</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%2F4058669%2F0e3a9b78-84b2-478b-9e6a-ff5d43e6329f.png</url>
      <title>DEV Community: 高赫阳</title>
      <link>https://dev.to/oscar_g</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oscar_g"/>
    <language>en</language>
    <item>
      <title>Building RepostViewer: A Focused Web Tool for Public TikTok Reposts and Comments</title>
      <dc:creator>高赫阳</dc:creator>
      <pubDate>Fri, 16 Oct 2026 08:50:57 +0000</pubDate>
      <link>https://dev.to/oscar_g/building-repostviewer-a-focused-web-tool-for-public-tiktok-reposts-and-comments-5781</link>
      <guid>https://dev.to/oscar_g/building-repostviewer-a-focused-web-tool-for-public-tiktok-reposts-and-comments-5781</guid>
      <description>&lt;p&gt;I have been building RepostViewer, a small web tool focused on a narrow question: how can someone inspect publicly available TikTok reposts and comments without turning a quick lookup into a complicated workflow?&lt;br&gt;
Start with a specific task&lt;br&gt;
People arrive with different questions. One person wants to see recent public reposts associated with a TikTok profile. Another wants to read comments on a public video. These are related activities, but they need different inputs. The repost tool starts with a public username; the comment tool starts with a public TikTok video URL.&lt;br&gt;
Keeping those paths separate makes the interface easier to understand. A visitor should know what to paste, what to expect, and why a result may be unavailable.&lt;br&gt;
Make the first interaction simple&lt;br&gt;
For basic browsing, the intended experience does not require signing in to TikTok. The page presents a direct input and returns the public information the upstream service can provide. The comment interface displays available comment text, authors, timestamps, likes, and reply counts when those fields are present. Additional comments are fetched only when a visitor chooses to load more.&lt;br&gt;
There is a useful engineering lesson here: pagination is a product decision as much as an API decision. Loading everything by default increases latency and upstream requests. An explicit “Load More” action makes the cost and waiting time proportional to what a visitor actually wants to read.&lt;br&gt;
Treat public data boundaries as part of the product&lt;br&gt;
A public-data viewer should not imply that it can access private accounts, hidden posts, deleted material, or every historical repost. Availability changes, and some results may be incomplete. RepostViewer is designed around these limitations rather than promising unrestricted access.&lt;br&gt;
The implementation also keeps upstream API credentials on the server. Video URLs are validated before being resolved, including checks around short-link redirects. Those are not flashy features, but they matter whenever a tool accepts user-provided URLs.&lt;br&gt;
Build only what the workflow needs&lt;br&gt;
The application uses Next.js and TypeScript, with server-side routes for data access. The focus has been on a clear result view, understandable errors, responsive layouts, and search-friendly explanatory pages. I deliberately left out unrelated features such as video downloads, account monitoring, and bulk automation.&lt;br&gt;
The next step is learning from real usage: which lookups people try, whether they use pagination, and what information they actually need. That evidence should drive future features rather than a long speculative roadmap.&lt;br&gt;
If you work on focused utilities, I would be interested in how you decide what not to build.&lt;br&gt;
Project: &lt;a href="https://repostviewer.com" rel="noopener noreferrer"&gt;https://repostviewer.com&lt;/a&gt;&lt;br&gt;
RepostViewer is an independent tool and is not affiliated with TikTok or ByteDance.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>sideprojects</category>
      <category>socialmedia</category>
    </item>
    <item>
      <title>I Built ScanInsta: A Browser-Based Instagram Profile Viewer for Public Research</title>
      <dc:creator>高赫阳</dc:creator>
      <pubDate>Sun, 27 Sep 2026 10:43:57 +0000</pubDate>
      <link>https://dev.to/oscar_g/i-built-scaninsta-a-browser-based-instagram-profile-viewer-for-public-research-3np9</link>
      <guid>https://dev.to/oscar_g/i-built-scaninsta-a-browser-based-instagram-profile-viewer-for-public-research-3np9</guid>
      <description>&lt;p&gt;Instagram profiles contain a surprising amount of useful public context: a bio, verification status, follower and following counts, post volume, and recent public content. The problem is that checking this information repeatedly can be awkward when you are doing creator research, competitor screening, or brand-partnership due diligence.&lt;/p&gt;

&lt;p&gt;That is why I built ScanInsta, a browser-based Instagram Profile Viewer focused on public information only.&lt;/p&gt;

&lt;p&gt;The idea is intentionally simple: enter a public Instagram username and get a clean profile snapshot without logging into Instagram, sharing a password, or installing a browser extension. ScanInsta is designed for people who need fast context rather than another social media dashboard.&lt;/p&gt;

&lt;p&gt;What ScanInsta shows&lt;/p&gt;

&lt;p&gt;For a public profile, ScanInsta can display the profile photo, display name, bio, verification status, follower count, following count, post count, and recent public posts when they are available. The goal is not to assign a mysterious score to an account. These are background signals that users can interpret in context.&lt;/p&gt;

&lt;p&gt;That distinction matters. A large follower count does not automatically mean an account is influential, trustworthy, or a good fit for a campaign. A post count does not tell you whether the content is high quality. ScanInsta simply makes the public profile information easier to review in one place.&lt;/p&gt;

&lt;p&gt;Why public data only&lt;/p&gt;

&lt;p&gt;I wanted the product boundary to be clear from the beginning. ScanInsta does not claim to reveal private profiles, private followers, private posts, or hidden account information. If Instagram marks something as private, ScanInsta does not try to work around that restriction.&lt;/p&gt;

&lt;p&gt;It also does not ask for an Instagram password. For the free workflow, there is no Instagram login requirement and nothing to install.&lt;/p&gt;

&lt;p&gt;Who it is for&lt;/p&gt;

&lt;p&gt;The most obvious use case is influencer vetting. A brand can quickly review a creator's public profile before deciding whether it is worth doing deeper research or reaching out. Agencies can use the same workflow when screening multiple potential partners.&lt;/p&gt;

&lt;p&gt;Competitor research is another use case. Public profile metrics and recent posts can provide a fast snapshot of how actively a competitor is publishing and what kind of content it is putting in front of its audience.&lt;/p&gt;

&lt;p&gt;Journalists and PR teams can also use a public profile viewer to collect basic context before outreach. The point is not to replace proper research, but to reduce friction in the first pass.&lt;/p&gt;

&lt;p&gt;The stack&lt;/p&gt;

&lt;p&gt;ScanInsta is built with Next.js and TypeScript and is deployed as a web application, so the main product experience runs in the browser. I use server-side API routes rather than exposing upstream data-provider logic directly to the client. Redis-based caching and rate limits help control repeated requests, and Cloudflare Turnstile is used as part of the anti-abuse flow.&lt;/p&gt;

&lt;p&gt;One of the engineering goals was to keep the initial interaction simple. A visitor should be able to try the product before being pushed into an account-creation flow. The free tier currently supports a small number of daily profile lookups, while higher-volume features such as batch checks, CSV export, profile tracking, and API access are part of the broader product plan.&lt;/p&gt;

&lt;p&gt;What I learned&lt;/p&gt;

&lt;p&gt;Building a tool around a familiar platform is mostly an exercise in boundaries and reliability. It is tempting to add more promises to make a product sound powerful, but social-data tools are much easier to understand when they are explicit about what they can and cannot access.&lt;/p&gt;

&lt;p&gt;For ScanInsta, the product promise is deliberately narrow: help users review publicly available Instagram profile information in a clean browser interface.&lt;/p&gt;

&lt;p&gt;The project is available at &lt;a href="https://scaninsta.com/" rel="noopener noreferrer"&gt;https://scaninsta.com/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I am continuing to improve the lookup workflow, caching, rate limiting, and higher-volume research features. If you work in creator research, influencer marketing, competitive analysis, or social media tooling, I would be interested in hearing which public-profile fields are actually useful in your workflow.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>sideprojects</category>
      <category>socialmedia</category>
    </item>
    <item>
      <title>I Built a No-Login Instagram Follower Export Tool with Next.js</title>
      <dc:creator>高赫阳</dc:creator>
      <pubDate>Sat, 19 Sep 2026 07:47:51 +0000</pubDate>
      <link>https://dev.to/oscar_g/i-built-a-no-login-instagram-follower-export-tool-with-nextjs-nen</link>
      <guid>https://dev.to/oscar_g/i-built-a-no-login-instagram-follower-export-tool-with-nextjs-nen</guid>
      <description>&lt;p&gt;If you have ever tried to move an Instagram follower list into a spreadsheet, you know how awkward the workflow can be.&lt;/p&gt;

&lt;p&gt;A lot of existing tools require a browser extension, an Instagram login, session cookies, or a complicated automation setup.&lt;/p&gt;

&lt;p&gt;I wanted something simpler.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;IG Follower Exporter&lt;/strong&gt;, a browser-based tool for downloading publicly available Instagram follower records as CSV.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://igfollowerexporter.com" rel="noopener noreferrer"&gt;https://igfollowerexporter.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;p&gt;The workflow is intentionally simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter a public Instagram username&lt;/li&gt;
&lt;li&gt;Check the account&lt;/li&gt;
&lt;li&gt;Start the follower retrieval&lt;/li&gt;
&lt;li&gt;Download the available follower records as CSV&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No Instagram login is required.&lt;/p&gt;

&lt;p&gt;No password is required.&lt;/p&gt;

&lt;p&gt;There is nothing to install.&lt;/p&gt;

&lt;p&gt;The tool is designed for use cases such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;competitor audience research&lt;/li&gt;
&lt;li&gt;influencer research&lt;/li&gt;
&lt;li&gt;creator discovery&lt;/li&gt;
&lt;li&gt;social media analysis&lt;/li&gt;
&lt;li&gt;spreadsheet-based audience research&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I built it
&lt;/h2&gt;

&lt;p&gt;I kept seeing the same friction with Instagram research tools.&lt;/p&gt;

&lt;p&gt;Some require installing a Chrome extension. Others require connecting an Instagram account or supplying session information.&lt;/p&gt;

&lt;p&gt;For a simple task like turning public follower information into a spreadsheet, that felt unnecessarily complicated.&lt;/p&gt;

&lt;p&gt;My goal was to make the workflow feel more like a normal web utility:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;username → results → CSV&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The technical stack
&lt;/h2&gt;

&lt;p&gt;The application is built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;Supabase&lt;/li&gt;
&lt;li&gt;Vercel&lt;/li&gt;
&lt;li&gt;Cloudflare Turnstile&lt;/li&gt;
&lt;li&gt;SocialCrawl for Instagram data access&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most interesting engineering problem was actually not generating the CSV.&lt;/p&gt;

&lt;p&gt;It was building a durable export process.&lt;/p&gt;

&lt;p&gt;Large follower lists require pagination and multiple upstream requests, so a single long-running HTTP request is not reliable enough.&lt;/p&gt;

&lt;p&gt;The current architecture uses resumable export jobs with persisted checkpoints. If an export takes multiple batches, the job can continue without starting from the beginning.&lt;/p&gt;

&lt;p&gt;I also added:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;row-based usage accounting&lt;/li&gt;
&lt;li&gt;duplicate protection&lt;/li&gt;
&lt;li&gt;resumable pagination&lt;/li&gt;
&lt;li&gt;server-side API credentials&lt;/li&gt;
&lt;li&gt;Turnstile abuse protection&lt;/li&gt;
&lt;li&gt;CSV generation&lt;/li&gt;
&lt;li&gt;payment entitlements&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Free to try
&lt;/h2&gt;

&lt;p&gt;New users can currently retrieve up to 100 follower rows for free.&lt;/p&gt;

&lt;p&gt;The goal of the free tier is simply to let someone verify that the tool works for their use case before paying.&lt;/p&gt;

&lt;p&gt;If you work with Instagram audience data, I would be interested in hearing what fields or workflows would make this more useful.&lt;/p&gt;

&lt;p&gt;Try it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://igfollowerexporter.com" rel="noopener noreferrer"&gt;https://igfollowerexporter.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>saas</category>
    </item>
    <item>
      <title>I Built Socionar: An AI Bio Generator and Brat-Style Creator Tool</title>
      <dc:creator>高赫阳</dc:creator>
      <pubDate>Wed, 16 Sep 2026 06:07:34 +0000</pubDate>
      <link>https://dev.to/oscar_g/i-built-socionar-an-ai-bio-generator-and-brat-style-creator-tool-2m9a</link>
      <guid>https://dev.to/oscar_g/i-built-socionar-an-ai-bio-generator-and-brat-style-creator-tool-2m9a</guid>
      <description>&lt;p&gt;I’ve been building Socionar, a small collection of tools for people who want to improve how they present themselves online.&lt;br&gt;
The main tool is an AI Bio Generator that uses both text and uploaded photos to create personalized Instagram and TikTok bio ideas. Instead of only generating generic one-liners, it can use visual context, interests, and style to make the results feel more relevant to the creator.&lt;br&gt;
I also added a Brat Generator inspired by the recognizable visual style around Charli XCX’s Brat. You can create custom text-based Brat-style visuals directly in the browser and export them for sharing.&lt;br&gt;
The goal is to keep the tools simple: open the page, create something useful, and move on without unnecessary setup.&lt;br&gt;
&lt;a href="https://socionar.com/" rel="noopener noreferrer"&gt;https://socionar.com/&lt;/a&gt;&lt;br&gt;
I’m continuing to improve the project, so feedback on the tools and user experience is welcome.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>socialmedia</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>How I Built an AI Room Design Tool That Turns One Photo Into a Before-and-After Video</title>
      <dc:creator>高赫阳</dc:creator>
      <pubDate>Wed, 09 Sep 2026 14:12:23 +0000</pubDate>
      <link>https://dev.to/oscar_g/how-i-built-an-ai-room-design-tool-that-turns-one-photo-into-a-before-and-after-video-51po</link>
      <guid>https://dev.to/oscar_g/how-i-built-an-ai-room-design-tool-that-turns-one-photo-into-a-before-and-after-video-51po</guid>
      <description>&lt;p&gt;AI room design tools are everywhere now, but most of them stop at one thing:&lt;/p&gt;

&lt;p&gt;Upload a room photo → generate another room photo.&lt;/p&gt;

&lt;p&gt;I wanted to build something slightly different.&lt;/p&gt;

&lt;p&gt;Instead of only showing a redesigned image, I wanted users to see the transformation as a short &lt;strong&gt;before-and-after video&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That idea became &lt;strong&gt;RoomFacelift&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://roomfacelift.com" rel="noopener noreferrer"&gt;https://roomfacelift.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What RoomFacelift does
&lt;/h2&gt;

&lt;p&gt;The workflow is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload a photo of your room&lt;/li&gt;
&lt;li&gt;Choose the room type&lt;/li&gt;
&lt;li&gt;Pick an interior design style&lt;/li&gt;
&lt;li&gt;Decide how much of the room can change&lt;/li&gt;
&lt;li&gt;Generate a redesigned version&lt;/li&gt;
&lt;li&gt;Turn the original and redesigned images into a transformation video&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is to make AI room design feel less like generating a random image and more like visualizing an actual renovation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping the original room recognizable
&lt;/h2&gt;

&lt;p&gt;One of the hardest problems was not image generation itself.&lt;/p&gt;

&lt;p&gt;It was preservation.&lt;/p&gt;

&lt;p&gt;AI models often change things users do not want changed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;camera angle&lt;/li&gt;
&lt;li&gt;windows&lt;/li&gt;
&lt;li&gt;doors&lt;/li&gt;
&lt;li&gt;TVs&lt;/li&gt;
&lt;li&gt;wall geometry&lt;/li&gt;
&lt;li&gt;visible floor area&lt;/li&gt;
&lt;li&gt;room proportions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a room redesign tool, that can make the result feel fake.&lt;/p&gt;

&lt;p&gt;So I added two design modes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep Layout
&lt;/h3&gt;

&lt;p&gt;This mode tries to preserve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;viewpoint&lt;/li&gt;
&lt;li&gt;camera height&lt;/li&gt;
&lt;li&gt;framing&lt;/li&gt;
&lt;li&gt;perspective&lt;/li&gt;
&lt;li&gt;room geometry&lt;/li&gt;
&lt;li&gt;major architectural elements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI mainly changes furniture, materials, lighting, decoration, and interior style.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reimagine Space
&lt;/h3&gt;

&lt;p&gt;This mode gives the model more freedom to redesign the room while still trying to keep the same camera position and overall identity.&lt;/p&gt;

&lt;p&gt;That distinction turned out to be important because different users want very different levels of transformation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interior styles
&lt;/h2&gt;

&lt;p&gt;RoomFacelift currently supports styles such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modern&lt;/li&gt;
&lt;li&gt;Scandinavian&lt;/li&gt;
&lt;li&gt;Japandi&lt;/li&gt;
&lt;li&gt;Mid-century Modern&lt;/li&gt;
&lt;li&gt;Industrial&lt;/li&gt;
&lt;li&gt;Bohemian&lt;/li&gt;
&lt;li&gt;Luxury&lt;/li&gt;
&lt;li&gt;French Country&lt;/li&gt;
&lt;li&gt;Minimalist&lt;/li&gt;
&lt;li&gt;Art Deco&lt;/li&gt;
&lt;li&gt;Coastal&lt;/li&gt;
&lt;li&gt;Farmhouse&lt;/li&gt;
&lt;li&gt;Mediterranean&lt;/li&gt;
&lt;li&gt;Contemporary&lt;/li&gt;
&lt;li&gt;Traditional&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of relying only on the style name, each style is backed by a more structured design recipe.&lt;/p&gt;

&lt;p&gt;That helps make the generated results more consistent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The technical stack
&lt;/h2&gt;

&lt;p&gt;The application is built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Supabase&lt;/li&gt;
&lt;li&gt;fal.ai&lt;/li&gt;
&lt;li&gt;Cloud storage&lt;/li&gt;
&lt;li&gt;Google Cloud Run&lt;/li&gt;
&lt;li&gt;FFmpeg&lt;/li&gt;
&lt;li&gt;Waffo for payments&lt;/li&gt;
&lt;/ul&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
text
User photo
   ↓
Private storage
   ↓
AI redesigned image
   ↓
Before + After frames
   ↓
Image-to-video generation
   ↓
Watermark processing
   ↓
Final transformation video
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>ai</category>
      <category>buildinpublic</category>
      <category>webdev</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>AudioCraft – AI stem splitter and vocal remover with a browser-based mixer</title>
      <dc:creator>高赫阳</dc:creator>
      <pubDate>Sun, 23 Aug 2026 10:54:55 +0000</pubDate>
      <link>https://dev.to/oscar_g/audiocraft-ai-stem-splitter-and-vocal-remover-with-a-browser-based-mixer-12f</link>
      <guid>https://dev.to/oscar_g/audiocraft-ai-stem-splitter-and-vocal-remover-with-a-browser-based-mixer-12f</guid>
      <description>&lt;p&gt;I’ve been building AudioCraft as a focused AI music tool for separating songs into useful stems.&lt;br&gt;
The main workflow is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;upload MP3, WAV, FLAC, or M4A&lt;/li&gt;
&lt;li&gt;separate the track into vocals, drums, bass, and other instruments&lt;/li&gt;
&lt;li&gt;preview the stems&lt;/li&gt;
&lt;li&gt;mute, solo, and adjust individual tracks&lt;/li&gt;
&lt;li&gt;create an instrumental version&lt;/li&gt;
&lt;li&gt;download individual stems or all stems together
AI Stem Splitter
&lt;a href="https://audiocraft.app/" rel="noopener noreferrer"&gt;https://audiocraft.app/&lt;/a&gt;
AudioCraft uses AI source separation rather than simple frequency filtering. It is useful for instrument practice, remixing, karaoke, arrangement analysis, and extracting vocals or backing tracks.
The result page includes a synchronized stem mixer, so users can solo the bass, mute the vocals, or compare different parts of the arrangement without opening a DAW.
Temporary Audio Processing
Privacy:
&lt;a href="https://audiocraft.app/privacy" rel="noopener noreferrer"&gt;https://audiocraft.app/privacy&lt;/a&gt;
Uploaded source audio is temporarily stored so the AI service can process it, then AudioCraft automatically attempts to delete the original file after processing finishes.
Generated stem links are temporary, so users should download results they want to keep.
Product Analytics and Feedback
AudioCraft tracks product-level events such as uploads, successful separations, downloads, and failures, while avoiding file names, audio URLs, and media contents in analytics.
Users can also rate the separation result as good or needing improvement, which should help improve future model and product decisions.
Where I want to take AudioCraft next
&lt;a href="https://audiocraft.app/about" rel="noopener noreferrer"&gt;https://audiocraft.app/about&lt;/a&gt;
The next direction is AI music transcription.
The idea is to use stem separation first, then turn cleaner vocals, bass, or instrument stems into things like:&lt;/li&gt;
&lt;li&gt;MIDI&lt;/li&gt;
&lt;li&gt;sheet music&lt;/li&gt;
&lt;li&gt;melody transcription&lt;/li&gt;
&lt;li&gt;chord detection&lt;/li&gt;
&lt;li&gt;BPM and key analysis
The longer-term goal is for AudioCraft to become a small AI music-analysis toolkit rather than just another vocal remover.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>music</category>
      <category>ai</category>
    </item>
    <item>
      <title>Criei um compressor de vídeo online pensado para usuários em português</title>
      <dc:creator>高赫阳</dc:creator>
      <pubDate>Fri, 14 Aug 2026 02:04:42 +0000</pubDate>
      <link>https://dev.to/oscar_g/criei-um-compressor-de-video-online-pensado-para-usuarios-em-portugues-4ml3</link>
      <guid>https://dev.to/oscar_g/criei-um-compressor-de-video-online-pensado-para-usuarios-em-portugues-4ml3</guid>
      <description>&lt;p&gt;Estou construindo o Vidoro, uma ferramenta simples para compactar vídeos online.&lt;br&gt;
Percebi que muitas ferramentas de vídeo são feitas principalmente para usuários de inglês, enquanto usuários de português (especialmente no Brasil) ainda têm poucas opções bem localizadas.&lt;br&gt;
Por isso criei uma versão em português para ajudar pessoas a reduzir o tamanho dos vídeos antes de enviar pelo WhatsApp ou redes sociais.&lt;br&gt;
Ainda estou melhorando a ferramenta e adoraria receber feedback de outros criadores.&lt;br&gt;
&lt;a href="https://vidoro.io/pt/comprimir-video-online" rel="noopener noreferrer"&gt;https://vidoro.io/pt/comprimir-video-online&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>webdev</category>
      <category>security</category>
    </item>
    <item>
      <title>I Built Vidoro — A Browser-First Toolkit for Video Compression and Media Conversion</title>
      <dc:creator>高赫阳</dc:creator>
      <pubDate>Thu, 13 Aug 2026 07:32:04 +0000</pubDate>
      <link>https://dev.to/oscar_g/i-built-vidoro-a-browser-first-toolkit-for-video-compression-and-media-conversion-281b</link>
      <guid>https://dev.to/oscar_g/i-built-vidoro-a-browser-first-toolkit-for-video-compression-and-media-conversion-281b</guid>
      <description>&lt;p&gt;Hi everyone!&lt;/p&gt;

&lt;p&gt;I’ve been building a side project called Vidoro — a collection of simple online media tools focused on video compression, format conversion, privacy, and practical everyday workflows.&lt;/p&gt;

&lt;p&gt;The idea is straightforward:&lt;/p&gt;

&lt;p&gt;Choose a file → process it → download the result.&lt;/p&gt;

&lt;p&gt;No complicated editing interface, no unnecessary account creation, and for tools that can reasonably run in the browser, no file upload to a remote server.&lt;/p&gt;

&lt;p&gt;Vidoro currently includes a homepage, two versions of the video compressor, and a MOV-to-MP3 converter. I’m gradually turning it into a larger collection of focused media utilities.&lt;/p&gt;

&lt;p&gt;💡 Why I Built It&lt;/p&gt;

&lt;p&gt;A lot of online media tools technically work, but the experience often feels heavier than the task itself.&lt;/p&gt;

&lt;p&gt;For something as simple as reducing the size of a video or extracting audio, users may have to:&lt;/p&gt;

&lt;p&gt;upload a large file to a remote server&lt;br&gt;
wait for the upload to finish before processing even starts&lt;br&gt;
create an account&lt;br&gt;
navigate several configuration screens&lt;br&gt;
deal with watermarks or usage restrictions&lt;br&gt;
wonder what happens to the uploaded file afterward&lt;/p&gt;

&lt;p&gt;I wanted Vidoro to feel more like a local utility that happens to run in a browser.&lt;/p&gt;

&lt;p&gt;Whenever browser-side processing makes sense, the file stays on the user’s device and FFmpeg runs through WebAssembly.&lt;/p&gt;

&lt;p&gt;For heavier or smarter workflows, Vidoro can also use a backend processing pipeline, but I try to keep that distinction clear to the user.&lt;/p&gt;

&lt;p&gt;🌐 Vidoro Homepage&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://vidoro.io/" rel="noopener noreferrer"&gt;https://vidoro.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The homepage is the central entry point for the project.&lt;/p&gt;

&lt;p&gt;Instead of building every tool as an isolated website, I’m putting them under one product and one design system.&lt;/p&gt;

&lt;p&gt;The goal is for Vidoro to eventually become a toolbox for common media tasks such as:&lt;/p&gt;

&lt;p&gt;video compression&lt;br&gt;
audio extraction&lt;br&gt;
video conversion&lt;br&gt;
image conversion&lt;br&gt;
video-to-GIF&lt;br&gt;
audio processing&lt;br&gt;
other lightweight media utilities&lt;/p&gt;

&lt;p&gt;The homepage is intentionally simple.&lt;/p&gt;

&lt;p&gt;Rather than showing dozens of settings or categories immediately, it introduces the available tools and lets users go directly to the task they need.&lt;/p&gt;

&lt;p&gt;🎬 Compress Video Online — English&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://vidoro.io/compress-video-online/" rel="noopener noreferrer"&gt;https://vidoro.io/compress-video-online/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the English, privacy-focused version of Vidoro’s video compressor.&lt;/p&gt;

&lt;p&gt;The main idea behind this page is:&lt;/p&gt;

&lt;p&gt;compress the video directly in the browser without uploading it to a server.&lt;/p&gt;

&lt;p&gt;The workflow is:&lt;/p&gt;

&lt;p&gt;Choose a video&lt;br&gt;
Select a compression level&lt;br&gt;
Let FFmpeg WASM process the video locally&lt;br&gt;
Download the compressed MP4&lt;/p&gt;

&lt;p&gt;The current compression options are intentionally simple:&lt;/p&gt;

&lt;p&gt;High Quality&lt;br&gt;
Balanced&lt;br&gt;
Maximum Compression&lt;/p&gt;

&lt;p&gt;I didn’t want users to have to understand CRF values, encoding presets, audio bitrates, or other FFmpeg parameters just to reduce a file size.&lt;/p&gt;

&lt;p&gt;Under the hood, the browser version currently uses FFmpeg with H.264 video and AAC audio and generates an MP4 output.&lt;/p&gt;

&lt;p&gt;The page supports common formats such as MP4, MOV, AVI, MKV, WebM and other formats already handled by the converter.&lt;/p&gt;

&lt;p&gt;One of the main goals of this version is privacy.&lt;/p&gt;

&lt;p&gt;For the normal compression workflow:&lt;/p&gt;

&lt;p&gt;the video stays on the device&lt;br&gt;
there is no server upload&lt;br&gt;
there is no account requirement&lt;br&gt;
there is no watermark&lt;/p&gt;

&lt;p&gt;This also means the performance depends heavily on the user’s device.&lt;/p&gt;

&lt;p&gt;A powerful desktop can process videos reasonably well, while very large files on a phone can obviously be more challenging.&lt;/p&gt;

&lt;p&gt;That tradeoff is something I’ve found interesting while building the project.&lt;/p&gt;

&lt;p&gt;🇧🇷 Comprimir Vídeo Online — Portuguese&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://vidoro.io/pt/comprimir-video-online/" rel="noopener noreferrer"&gt;https://vidoro.io/pt/comprimir-video-online/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Portuguese version is currently more advanced than the English version.&lt;/p&gt;

&lt;p&gt;It contains the same local FFmpeg WASM compression workflow, but it also includes a smart compression mode.&lt;/p&gt;

&lt;p&gt;This mode is aimed at a problem I noticed while working on video compression:&lt;/p&gt;

&lt;p&gt;Most users don’t actually know what compression settings they need.&lt;/p&gt;

&lt;p&gt;They don’t think in terms of:&lt;/p&gt;

&lt;p&gt;bitrate&lt;br&gt;
codec&lt;br&gt;
CRF&lt;br&gt;
frame rate&lt;br&gt;
resolution&lt;/p&gt;

&lt;p&gt;They think in terms of:&lt;/p&gt;

&lt;p&gt;“I need to send this on WhatsApp.”&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;“I need a smaller attachment for email.”&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;“I want to save storage space.”&lt;/p&gt;

&lt;p&gt;So the smart compression mode analyzes information about the uploaded video and allows the user to choose a target use case such as:&lt;/p&gt;

&lt;p&gt;WhatsApp&lt;br&gt;
Instagram&lt;br&gt;
Email&lt;br&gt;
Website upload&lt;br&gt;
Storage saving&lt;/p&gt;

&lt;p&gt;Vidoro then recommends a compression profile.&lt;/p&gt;

&lt;p&gt;The analysis can include information such as:&lt;/p&gt;

&lt;p&gt;resolution&lt;br&gt;
duration&lt;br&gt;
codec&lt;br&gt;
FPS&lt;br&gt;
file size&lt;br&gt;
bitrate where available&lt;/p&gt;

&lt;p&gt;The system then recommends settings such as:&lt;/p&gt;

&lt;p&gt;target codec&lt;br&gt;
CRF&lt;br&gt;
target resolution&lt;br&gt;
FPS&lt;br&gt;
estimated output size&lt;/p&gt;

&lt;p&gt;I also spent some time improving the output-size estimation.&lt;/p&gt;

&lt;p&gt;An early version could predict something like:&lt;/p&gt;

&lt;p&gt;4.7 MB → 700 KB&lt;/p&gt;

&lt;p&gt;while FFmpeg actually produced something closer to:&lt;/p&gt;

&lt;p&gt;4.7 MB → 2.1 MB&lt;/p&gt;

&lt;p&gt;That was obviously too optimistic.&lt;/p&gt;

&lt;p&gt;The estimation system is now more conservative and takes more properties of the source video into account.&lt;/p&gt;

&lt;p&gt;In one of my later tests:&lt;/p&gt;

&lt;p&gt;Original: 329,498 bytes&lt;br&gt;
Predicted: 166,045 bytes&lt;br&gt;
Actual output: 159,576 bytes&lt;br&gt;
Reduction: 51.6%&lt;/p&gt;

&lt;p&gt;That was much closer to the real output.&lt;/p&gt;

&lt;p&gt;🤖 AI / Smart Compression Architecture&lt;/p&gt;

&lt;p&gt;One important design choice is that the smart compression system does not require an AI API to work.&lt;/p&gt;

&lt;p&gt;It uses a hybrid approach.&lt;/p&gt;

&lt;p&gt;The basic pipeline can work with:&lt;/p&gt;

&lt;p&gt;ffprobe → video metadata → deterministic compression profiles&lt;/p&gt;

&lt;p&gt;So even without an OpenAI API key, it can still analyze the video and generate recommendations.&lt;/p&gt;

&lt;p&gt;An optional LLM layer can be used for richer recommendations, but the core functionality does not depend on it.&lt;/p&gt;

&lt;p&gt;I like this architecture because I don’t want an “AI feature” to stop working just because an external API is unavailable.&lt;/p&gt;

&lt;p&gt;The deterministic system remains the fallback.&lt;/p&gt;

&lt;p&gt;🎵 MOV to MP3 Converter&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://vidoro.io/mov-to-mp3-converter/" rel="noopener noreferrer"&gt;https://vidoro.io/mov-to-mp3-converter/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The MOV-to-MP3 converter is much simpler, and that is intentional.&lt;/p&gt;

&lt;p&gt;Its job is just:&lt;/p&gt;

&lt;p&gt;take a MOV video and extract the audio as MP3.&lt;/p&gt;

&lt;p&gt;The entire conversion happens inside the browser with ffmpeg.wasm.&lt;/p&gt;

&lt;p&gt;The MOV file is not uploaded to Vidoro.&lt;/p&gt;

&lt;p&gt;The workflow is:&lt;/p&gt;

&lt;p&gt;Select or drag in a MOV file&lt;br&gt;
Choose MP3 quality&lt;br&gt;
Convert it locally&lt;br&gt;
Download the MP3&lt;/p&gt;

&lt;p&gt;This can be useful for things like:&lt;/p&gt;

&lt;p&gt;extracting audio from iPhone videos&lt;br&gt;
interviews&lt;br&gt;
lectures&lt;br&gt;
voice recordings&lt;br&gt;
video podcasts&lt;br&gt;
saved clips&lt;br&gt;
music or audio recordings stored inside MOV files&lt;/p&gt;

&lt;p&gt;The default configuration is designed to be simple rather than expose every FFmpeg audio option.&lt;/p&gt;

&lt;p&gt;For this kind of task, I think that is the right tradeoff.&lt;/p&gt;

&lt;p&gt;Most users don’t want to configure sample rate, channels, codec profiles, and command-line flags.&lt;/p&gt;

&lt;p&gt;They just want the audio.&lt;/p&gt;

&lt;p&gt;🔒 Why I Like Browser-Side Processing&lt;/p&gt;

&lt;p&gt;One of the most interesting parts of building Vidoro has been deciding which jobs belong in the browser and which belong on the server.&lt;/p&gt;

&lt;p&gt;For tasks like:&lt;/p&gt;

&lt;p&gt;MOV → MP3&lt;br&gt;
normal video compression&lt;br&gt;
simple format conversion&lt;/p&gt;

&lt;p&gt;browser-side FFmpeg can work surprisingly well.&lt;/p&gt;

&lt;p&gt;There are several benefits.&lt;/p&gt;

&lt;p&gt;No upload time&lt;/p&gt;

&lt;p&gt;If someone has a 300 MB video, a server-based tool may require the entire 300 MB upload before processing even begins.&lt;/p&gt;

&lt;p&gt;With browser processing, work can start locally.&lt;/p&gt;

&lt;p&gt;Better privacy&lt;/p&gt;

&lt;p&gt;The media file can remain on the user’s machine.&lt;/p&gt;

&lt;p&gt;For private recordings, internal work videos, family videos, interviews, or other sensitive material, that is useful.&lt;/p&gt;

&lt;p&gt;Lower backend infrastructure requirements&lt;/p&gt;

&lt;p&gt;Simple media jobs don’t necessarily need to consume server CPU, storage, queues, and bandwidth.&lt;/p&gt;

&lt;p&gt;But there are tradeoffs&lt;/p&gt;

&lt;p&gt;WebAssembly processing is not magically faster than native FFmpeg.&lt;/p&gt;

&lt;p&gt;Large files can consume a lot of browser memory, and mobile devices can struggle with demanding workloads.&lt;/p&gt;

&lt;p&gt;That is why Vidoro also has a server-side architecture for jobs where browser processing is not the right choice.&lt;/p&gt;

&lt;p&gt;🧱 The Tech Stack&lt;/p&gt;

&lt;p&gt;Vidoro currently uses:&lt;/p&gt;

&lt;p&gt;Frontend&lt;/p&gt;

&lt;p&gt;Next.js 16&lt;br&gt;
React 19&lt;br&gt;
TypeScript&lt;br&gt;
Tailwind CSS&lt;br&gt;
App Router&lt;/p&gt;

&lt;p&gt;Browser Media Processing&lt;/p&gt;

&lt;p&gt;FFmpeg&lt;br&gt;
ffmpeg.wasm&lt;br&gt;
WebAssembly&lt;/p&gt;

&lt;p&gt;Backend&lt;/p&gt;

&lt;p&gt;FastAPI&lt;br&gt;
Celery&lt;br&gt;
Redis&lt;br&gt;
PostgreSQL&lt;/p&gt;

&lt;p&gt;Server Media Processing&lt;/p&gt;

&lt;p&gt;FFmpeg&lt;br&gt;
ffprobe&lt;/p&gt;

&lt;p&gt;Deployment&lt;/p&gt;

&lt;p&gt;The frontend is designed to run independently from the backend.&lt;/p&gt;

&lt;p&gt;Browser-local tools can work without sending media to the backend at all, while server-assisted features use the FastAPI/Celery pipeline.&lt;/p&gt;

&lt;p&gt;⚙️ How the Server Compression Pipeline Works&lt;/p&gt;

&lt;p&gt;For server-assisted compression, the architecture is roughly:&lt;/p&gt;

&lt;p&gt;Video upload&lt;br&gt;
→ FastAPI&lt;br&gt;
→ storage&lt;br&gt;
→ Celery task&lt;br&gt;
→ FFmpeg&lt;br&gt;
→ compressed result&lt;br&gt;
→ download&lt;/p&gt;

&lt;p&gt;Redis handles the task queue, while the backend and Celery worker share the same storage volume.&lt;/p&gt;

&lt;p&gt;That last part sounds obvious, but it caused one of the bugs I ran into.&lt;/p&gt;

&lt;p&gt;The backend successfully saved a file to:&lt;/p&gt;

&lt;p&gt;/app/storage/uploads/...&lt;/p&gt;

&lt;p&gt;but the worker had a different container filesystem and saw an empty directory.&lt;/p&gt;

&lt;p&gt;The API worked.&lt;/p&gt;

&lt;p&gt;The upload worked.&lt;/p&gt;

&lt;p&gt;The Celery task started.&lt;/p&gt;

&lt;p&gt;Then the worker reported:&lt;/p&gt;

&lt;p&gt;Input file missing&lt;/p&gt;

&lt;p&gt;The fix was to use a shared Docker volume between the backend and worker.&lt;/p&gt;

&lt;p&gt;That was one of those bugs where every individual component looked healthy, but the full workflow still failed.&lt;/p&gt;

&lt;p&gt;🧪 Things I Learned&lt;/p&gt;

&lt;p&gt;A few lessons from building the project so far:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Browser FFmpeg is useful, but it has limits&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For many everyday jobs, ffmpeg.wasm is genuinely useful.&lt;/p&gt;

&lt;p&gt;For very large 4K videos or CPU-heavy transformations, native server-side FFmpeg is still much more capable.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;“AI” works better when it solves a specific problem&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I don’t want Vidoro to add a chatbot just because AI is popular.&lt;/p&gt;

&lt;p&gt;The useful application here is helping users answer questions like:&lt;/p&gt;

&lt;p&gt;What settings should I use?&lt;/p&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;p&gt;How do I make this small enough for email?&lt;/p&gt;

&lt;p&gt;That is much more practical than adding a generic chat panel.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Output-size prediction is harder than it looks&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can’t simply say:&lt;/p&gt;

&lt;p&gt;output = original × 0.2&lt;/p&gt;

&lt;p&gt;Video content, existing bitrate, motion, codec, resolution, and CRF all matter.&lt;/p&gt;

&lt;p&gt;A prediction that looks impressive but is consistently wrong is worse than a conservative estimate.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Privacy can be a product feature&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Moving media processing into the browser is not only an implementation detail.&lt;/p&gt;

&lt;p&gt;It changes the user experience.&lt;/p&gt;

&lt;p&gt;“No upload required” is something users can actually understand.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep the interface simpler than FFmpeg&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;FFmpeg exposes hundreds of options.&lt;/p&gt;

&lt;p&gt;That doesn’t mean an online tool should.&lt;/p&gt;

&lt;p&gt;The job of the product is often to hide complexity rather than reproduce a command-line interface in a browser.&lt;/p&gt;

&lt;p&gt;🚧 What I’m Working on Next&lt;/p&gt;

&lt;p&gt;I’m continuing to expand Vidoro with more focused media tools.&lt;/p&gt;

&lt;p&gt;I’m also experimenting with a more intelligent workflow where users can describe what they want instead of choosing technical parameters.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;“Make this video small enough to email.”&lt;/p&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;p&gt;“Extract the audio from this MOV.”&lt;/p&gt;

&lt;p&gt;or:&lt;/p&gt;

&lt;p&gt;“Make this smaller but keep the text readable.”&lt;/p&gt;

&lt;p&gt;The long-term idea is that Vidoro can understand the task, choose the appropriate tool, and configure it automatically.&lt;/p&gt;

&lt;p&gt;Underneath, the actual media processing can still be handled by deterministic tools like FFmpeg.&lt;/p&gt;

&lt;p&gt;The AI layer would help with intent and parameter selection rather than replace the media-processing engine.&lt;/p&gt;

&lt;p&gt;🌍 Try Vidoro&lt;/p&gt;

&lt;p&gt;Homepage:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://vidoro.io/" rel="noopener noreferrer"&gt;https://vidoro.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;English Video Compressor:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://vidoro.io/compress-video-online/" rel="noopener noreferrer"&gt;https://vidoro.io/compress-video-online/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Portuguese Video Compressor:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://vidoro.io/pt/comprimir-video-online/" rel="noopener noreferrer"&gt;https://vidoro.io/pt/comprimir-video-online/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MOV to MP3 Converter:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://vidoro.io/mov-to-mp3-converter/" rel="noopener noreferrer"&gt;https://vidoro.io/mov-to-mp3-converter/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m still actively improving the project, especially browser performance, compression quality, UX, and the balance between local and server-side processing.&lt;/p&gt;

&lt;p&gt;I’d love feedback on:&lt;/p&gt;

&lt;p&gt;the browser-first approach&lt;br&gt;
ffmpeg.wasm performance&lt;br&gt;
the compression workflow&lt;br&gt;
privacy positioning&lt;br&gt;
the smart compression idea&lt;br&gt;
mobile usability&lt;br&gt;
which media tool would be useful to build next&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>nextjs</category>
      <category>ffmpeg</category>
    </item>
    <item>
      <title>I Built a Portuguese Video Compressor for Brazil Users</title>
      <dc:creator>高赫阳</dc:creator>
      <pubDate>Fri, 07 Aug 2026 06:40:06 +0000</pubDate>
      <link>https://dev.to/oscar_g/i-built-a-portuguese-video-compressor-for-brazil-users-2cka</link>
      <guid>https://dev.to/oscar_g/i-built-a-portuguese-video-compressor-for-brazil-users-2cka</guid>
      <description>&lt;p&gt;When I was building a video compression tool, I noticed something interesting.&lt;/p&gt;

&lt;p&gt;Many online tools are created mainly for English-speaking users. They work worldwide, but users from other languages often don't get a localized experience.&lt;/p&gt;

&lt;p&gt;Brazil is a good example.&lt;/p&gt;

&lt;p&gt;Video sharing is very common in Brazil, especially through WhatsApp and social media. Many users need to reduce video size before sharing, but there are not many simple tools designed for Portuguese speakers.&lt;/p&gt;

&lt;p&gt;So I created a Portuguese version of my video compressor:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vidoro.io/pt/compactar-video" rel="noopener noreferrer"&gt;https://vidoro.io/pt/compactar-video&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The tool works directly in the browser, allowing users to compress videos without installing additional software.
&lt;/h2&gt;

&lt;p&gt;🇧🇷 Versão em português&lt;/p&gt;

&lt;p&gt;Enquanto desenvolvia uma ferramenta de compactação de vídeos, percebi uma oportunidade interessante.&lt;/p&gt;

&lt;p&gt;Muitas ferramentas online são criadas principalmente para usuários de inglês. Elas funcionam globalmente, mas nem sempre oferecem uma boa experiência para pessoas que falam outros idiomas.&lt;/p&gt;

&lt;p&gt;No Brasil, muitas pessoas compartilham vídeos pelo WhatsApp, redes sociais e outras plataformas. Porém, encontrar uma ferramenta simples de compactação de vídeo em português nem sempre é fácil.&lt;/p&gt;

&lt;p&gt;Por isso, criei uma versão em português:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vidoro.io/pt/compactar-video" rel="noopener noreferrer"&gt;https://vidoro.io/pt/compactar-video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A ferramenta funciona diretamente no navegador e permite reduzir o tamanho dos vídeos sem precisar instalar programas.&lt;/p&gt;

&lt;p&gt;No futuro, também pretendo lançar uma versão em espanhol, pois existe uma grande demanda de usuários que falam espanhol na América Latina e em outras regiões.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
