<?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: no-chili</title>
    <description>The latest articles on DEV Community by no-chili (@nochili).</description>
    <link>https://dev.to/nochili</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%2F4079826%2Fd910e578-5b9a-4318-af57-4e9203e6a585.jpg</url>
      <title>DEV Community: no-chili</title>
      <link>https://dev.to/nochili</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nochili"/>
    <language>en</language>
    <item>
      <title>I Built Video Compress Kit: A Free, Private Media Toolkit That Runs in Your Browser</title>
      <dc:creator>no-chili</dc:creator>
      <pubDate>Thu, 17 Sep 2026 04:47:00 +0000</pubDate>
      <link>https://dev.to/nochili/i-built-video-compress-kit-a-free-private-media-toolkit-that-runs-in-your-browser-4oml</link>
      <guid>https://dev.to/nochili/i-built-video-compress-kit-a-free-private-media-toolkit-that-runs-in-your-browser-4oml</guid>
      <description>&lt;p&gt;I kept running into the same problem: I needed to make a video smaller, trim a clip, or extract its audio, but many online tools introduced another problem first.&lt;/p&gt;

&lt;p&gt;They asked me to create an account, added a watermark, or required uploading a private media file to an unknown server.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://videocompresskit.com/" rel="noopener noreferrer"&gt;Video Compress Kit&lt;/a&gt;: a free collection of browser-based video, image, and audio tools. There is no sign-up, no watermark, and media processing happens on the user's device.&lt;/p&gt;

&lt;p&gt;The idea behind the project is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Free. Simple. Yours.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What Video Compress Kit does
&lt;/h2&gt;

&lt;p&gt;The first release includes six focused tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://videocompresskit.com/" rel="noopener noreferrer"&gt;video compressor&lt;/a&gt; with quality and resolution controls&lt;/li&gt;
&lt;li&gt;An &lt;a href="https://videocompresskit.com/image-compressor" rel="noopener noreferrer"&gt;image compressor&lt;/a&gt; for common web image formats&lt;/li&gt;
&lt;li&gt;An &lt;a href="https://videocompresskit.com/audio-compressor" rel="noopener noreferrer"&gt;audio compressor&lt;/a&gt; with MP3 as the default output&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://videocompresskit.com/video-trimmer" rel="noopener noreferrer"&gt;video trimmer&lt;/a&gt; for removing unwanted beginnings and endings&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://videocompresskit.com/crop-video" rel="noopener noreferrer"&gt;video cropper and resizer&lt;/a&gt; for changing dimensions and aspect ratios&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://videocompresskit.com/extract-audio" rel="noopener noreferrer"&gt;video-to-audio extractor&lt;/a&gt; for MP3, M4A, AAC, OGG, WAV, FLAC, and WebM audio&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interface is available in English and Japanese. Files can be selected from the device, and a public direct media URL can also be imported when the source allows browser access.&lt;/p&gt;

&lt;p&gt;Each tool has its own workflow and explanation. I did not want one generic converter page with a different heading pasted on top. A person trimming a video has different questions from someone compressing an image, so the surrounding guidance, examples, and controls should reflect that task.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why process media in the browser?
&lt;/h2&gt;

&lt;p&gt;My main product decision was to keep media files on the user's device.&lt;/p&gt;

&lt;p&gt;With the usual cloud workflow, a user has to upload a large file, wait for server processing, and download the result. That creates three sources of friction:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload time can be longer than the actual processing time.&lt;/li&gt;
&lt;li&gt;Private or client media leaves the device.&lt;/li&gt;
&lt;li&gt;Server costs eventually push a supposedly free tool toward queues, credits, or file-size paywalls.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Video Compress Kit downloads the application code, then processes the selected media locally. Cloudflare serves the website, but the media file itself is not uploaded to the Video Compress Kit server.&lt;/p&gt;

&lt;p&gt;That makes the privacy promise concrete: the video stays in the browser tab where the user selected it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building it with Mediabunny
&lt;/h2&gt;

&lt;p&gt;The media layer uses &lt;a href="https://mediabunny.dev/" rel="noopener noreferrer"&gt;Mediabunny&lt;/a&gt;, a JavaScript media toolkit designed around modern browser APIs.&lt;/p&gt;

&lt;p&gt;It provides a cleaner way to inspect tracks, decode media, transform video and audio, and write output containers without building the product around a large command-line program compiled to WebAssembly.&lt;/p&gt;

&lt;p&gt;The rest of the application uses React 19 and TanStack Start. It is deployed on Cloudflare Workers, while the tool interface is built from reusable shadcn/ui components.&lt;/p&gt;

&lt;p&gt;At a high level, the processing path looks like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Select a local file or import a public URL
                ↓
         Inspect media tracks
                ↓
    Apply the selected tool settings
                ↓
    Encode the result in the browser
                ↓
          Download the output
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;I lazy-load optional MP3 and FLAC encoders so people only download those components when they need them. The application also avoids silently returning a video without its audio track when the browser cannot encode the requested combination.&lt;/p&gt;

&lt;h2&gt;
  
  
  Local processing has real trade-offs
&lt;/h2&gt;

&lt;p&gt;Running everything locally is not a magic performance trick. It moves the work from a remote server to the user's device.&lt;/p&gt;

&lt;p&gt;That means processing speed depends on the browser, codec support, hardware, file length, and selected output settings. A recent desktop browser will usually have a better experience than an older phone processing a long 4K recording.&lt;/p&gt;

&lt;p&gt;The current web tools accept one file at a time, up to 500 MB. I chose that boundary because a clear limit is better than promising unlimited processing and letting a browser tab run out of memory without explanation.&lt;/p&gt;

&lt;p&gt;Format support also depends partly on the browser. When an encoder is unavailable, the interface should explain the limitation rather than pretend every format works everywhere.&lt;/p&gt;

&lt;p&gt;These constraints are part of the product design, not details to hide in a footer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Designing for people who just need the file fixed
&lt;/h2&gt;

&lt;p&gt;Media settings can become technical very quickly. Bitrate, codecs, containers, frame rates, and sample rates are useful, but most people arrive with a simpler goal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make this video small enough to share&lt;/li&gt;
&lt;li&gt;Remove the first few seconds&lt;/li&gt;
&lt;li&gt;Turn this video into an MP3&lt;/li&gt;
&lt;li&gt;Resize a clip for a different screen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interface starts with presets and plain language, then exposes more control where it is useful. It also shows the original and output file sizes after processing so the result is understandable immediately.&lt;/p&gt;

&lt;p&gt;There is no login wall before the download. A tool that promises a quick result should not reveal an account requirement only after the user has waited for processing.&lt;/p&gt;

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

&lt;p&gt;Three lessons have shaped the project so far.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Privacy works best as architecture
&lt;/h3&gt;

&lt;p&gt;A privacy sentence is stronger when the system does not need the file in the first place. Local processing reduces what the service has to collect and protect.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. A focused tool needs focused content
&lt;/h3&gt;

&lt;p&gt;Duplicating the same marketing copy across every tool is easy, but it is not helpful. Each page should answer the questions that belong to its actual task.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Honest limits improve the experience
&lt;/h3&gt;

&lt;p&gt;Browser media APIs are improving quickly, but compatibility and device performance still vary. Clear errors and realistic limits are more useful than a long list of formats that has not been tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is next?
&lt;/h2&gt;

&lt;p&gt;I am currently exploring a video frame extractor for saving a precise frame or exporting images at selected intervals. I also want to improve compatibility, add more practical presets, and use real user feedback to decide which workflows deserve their own tools.&lt;/p&gt;

&lt;p&gt;If you regularly compress, trim, crop, or convert media, you can try &lt;a href="https://videocompresskit.com/" rel="noopener noreferrer"&gt;Video Compress Kit&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I would especially like to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which browser and device did you use?&lt;/li&gt;
&lt;li&gt;Which format worked or failed?&lt;/li&gt;
&lt;li&gt;What media task still takes too many steps?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That feedback will shape the next release.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The “Too Perfect” Problem: 6 Clues That Make AI Images Feel Synthetic</title>
      <dc:creator>no-chili</dc:creator>
      <pubDate>Sun, 23 Aug 2026 09:11:40 +0000</pubDate>
      <link>https://dev.to/nochili/the-too-perfect-problem-6-clues-that-make-ai-images-feel-synthetic-bdf</link>
      <guid>https://dev.to/nochili/the-too-perfect-problem-6-clues-that-make-ai-images-feel-synthetic-bdf</guid>
      <description>&lt;p&gt;AI image models have become very good at producing impressive pictures. That creates a strange new problem: an image can be detailed, sharp, beautifully lit—and still feel fake within half a second.&lt;/p&gt;

&lt;p&gt;Usually the problem is not a dramatic mistake like an extra finger. It is the accumulation of small signals. Surfaces are a little too clean. Light behaves too politely. Every object receives the same amount of attention. The result looks less like a photograph and more like a photograph that has been aggressively optimized.&lt;/p&gt;

&lt;p&gt;After comparing a lot of generated portraits, interiors, product concepts, and 3D renders, these are the six clues I notice most often.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Every surface has the same “finished” texture
&lt;/h2&gt;

&lt;p&gt;Real materials do not age or reflect light in the same way. Skin has pores and tiny color changes. Painted walls have unevenness. Fabric compresses around seams. Metal may be clean, but its reflections still depend on the surrounding space.&lt;/p&gt;

&lt;p&gt;AI images often replace those differences with one generalized finish: smooth, sharp, and slightly glossy. It is attractive at thumbnail size, but it makes skin, plastic, wood, and stone feel as if they came from the same material library.&lt;/p&gt;

&lt;p&gt;A useful editing question is: &lt;strong&gt;What would this surface do differently from the surface next to it?&lt;/strong&gt; If the answer is “nothing,” the image probably needs more material separation.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The lighting explains everything too clearly
&lt;/h2&gt;

&lt;p&gt;Photography contains ambiguity. A face may be brighter than the background, but one side still falls away. A product can have a clean key light while picking up a weak reflection from a nearby wall. Shadows are rarely identical in softness and direction across a whole scene.&lt;/p&gt;

&lt;p&gt;Generated images often use light to describe every form equally well. It is as if the scene were designed to make every object readable. That can look cinematic, but not necessarily photographic.&lt;/p&gt;

&lt;p&gt;Try reducing local clarity in secondary areas. Let part of the image be less informative. Real cameras do not give every object equal priority.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The depth of field feels painted on
&lt;/h2&gt;

&lt;p&gt;A shallow depth of field is more than a blurred background. Focus changes gradually with distance, and objects on the same plane usually share similar sharpness. AI-generated blur sometimes ignores that geometry: one edge is sharp, the neighboring edge is soft, and a distant object suddenly returns to focus.&lt;/p&gt;

&lt;p&gt;When reviewing an image, trace a line from the nearest object to the farthest one. The focus transition should make spatial sense. If it does not, a subtler and more consistent depth treatment usually feels more natural than stronger blur.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Small imperfections are missing—or added everywhere
&lt;/h2&gt;

&lt;p&gt;A perfectly clean scene can feel synthetic, but randomly adding grain is not a complete fix. Real imperfections have causes. A fingerprint appears where someone touched a glossy surface. Fabric wrinkles where it bends. Dust collects in specific places. Sensor noise depends on exposure, not on the semantic importance of an object.&lt;/p&gt;

&lt;p&gt;The goal is not “more noise.” It is &lt;strong&gt;evidence of use, physics, and capture&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is why a uniform film-grain layer can make an image look vintage without making it look real. The underlying materials and lighting still need believable variation.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Color harmony is suspiciously complete
&lt;/h2&gt;

&lt;p&gt;AI models are excellent at palettes. Sometimes they are too excellent. Clothing, props, background accents, and skin tones all cooperate with the same color scheme. In real environments, there is usually at least one color that did not receive the art director’s memo.&lt;/p&gt;

&lt;p&gt;That does not mean making the image ugly. A small neutral shift, a cooler reflection, or a less coordinated background object can keep the scene from feeling like a single prompt rendered every pixel.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Composition and realism get edited together
&lt;/h2&gt;

&lt;p&gt;This is the most expensive mistake in a good generated image. The composition is already working, so a creator asks for “more realism” and gets a new image with a different face, changed product shape, moved furniture, or altered camera position.&lt;/p&gt;

&lt;p&gt;Realism is often a finishing problem, not a regeneration problem.&lt;/p&gt;

&lt;p&gt;I built my own workflow around that distinction. I first decide whether the idea and framing are worth keeping. If they are, I work on texture, lighting, color, materials, and camera depth without redesigning the scene. A browser tool such as &lt;a href="https://imagetorealistic.com" rel="noopener noreferrer"&gt;Image to Realistic&lt;/a&gt; can help with this composition-preserving pass when the source is a portrait, product concept, interior, illustration, or render.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical review order
&lt;/h2&gt;

&lt;p&gt;When an image feels synthetic, I now check it in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Composition:&lt;/strong&gt; Is the framing already good enough to preserve?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Materials:&lt;/strong&gt; Do skin, fabric, glass, metal, and wood behave differently?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Light:&lt;/strong&gt; Is every area explained too clearly?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Depth:&lt;/strong&gt; Does focus change consistently with distance?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Imperfections:&lt;/strong&gt; Do they have a physical reason to exist?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Color:&lt;/strong&gt; Is the palette a little too coordinated?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This order matters. It prevents a strong composition from being destroyed by unnecessary regeneration, and it turns “make it realistic” into a set of smaller decisions that can actually be evaluated.&lt;/p&gt;

&lt;p&gt;The best realistic result is rarely the one with the most detail. It is the one where the details agree with each other—and where a few parts of the scene are allowed to be ordinary.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>design</category>
      <category>imageprocessing</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why AI influencers need a character system, not another image generator</title>
      <dc:creator>no-chili</dc:creator>
      <pubDate>Sun, 16 Aug 2026 07:35:33 +0000</pubDate>
      <link>https://dev.to/nochili/why-ai-influencers-need-a-character-system-not-another-image-generator-4a12</link>
      <guid>https://dev.to/nochili/why-ai-influencers-need-a-character-system-not-another-image-generator-4a12</guid>
      <description>&lt;p&gt;A convincing AI influencer is not just a good portrait. It is a character that stays recognizable across posts, campaigns, and formats.&lt;/p&gt;

&lt;p&gt;That sounds obvious, but most image-generation workflows begin from a blank prompt every time. The result may look impressive in isolation while the face, styling, tone, or audience changes from one asset to the next.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real problem is continuity
&lt;/h2&gt;

&lt;p&gt;For a reusable virtual creator, continuity has several layers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visual identity:&lt;/strong&gt; facial features, hair, proportions, wardrobe, and recurring details&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creative direction:&lt;/strong&gt; aesthetic, lighting, locations, and camera language&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice:&lt;/strong&gt; personality, vocabulary, and the way the character addresses an audience&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Positioning:&lt;/strong&gt; niche, target audience, and the topics the character should or should not cover&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If those details live only inside a long prompt, they are easy to lose. A better approach is to treat them as structured character data that can be reused whenever a new scene or campaign asset is created.&lt;/p&gt;

&lt;h2&gt;
  
  
  A repeatable workflow
&lt;/h2&gt;

&lt;p&gt;The workflow I settled on has three steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Define the character once.&lt;/strong&gt; Store the face, style, voice, niche, and audience as a reusable profile.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Describe the campaign asset.&lt;/strong&gt; Focus the prompt on the new scene, message, or format instead of rebuilding the identity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate and compare.&lt;/strong&gt; Check new images or videos against the established character before publishing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This separation makes iteration much easier. You can change a location, pose, or campaign concept without unintentionally redesigning the person.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned while building it
&lt;/h2&gt;

&lt;p&gt;The biggest product lesson was that more generation controls do not automatically create a better workflow. Users need fewer decisions at the moment of creation, because the important identity decisions should already have been made and saved.&lt;/p&gt;

&lt;p&gt;It also helps to show the character reference beside the current asset. Consistency is much easier to judge when the source identity and the new output are visible in the same workspace.&lt;/p&gt;

&lt;p&gt;I built &lt;a href="https://aiinfluencercreator.app" rel="noopener noreferrer"&gt;AI Influencer Creator&lt;/a&gt; around this character-first idea. It lets creators define a reusable virtual persona and then generate images and videos for different scenes while preserving that identity.&lt;/p&gt;

&lt;p&gt;I would love feedback from anyone working with generative media: which part of character consistency is hardest in your current workflow—appearance, voice, or creative direction?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>startup</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
