<?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: qingwancong</title>
    <description>The latest articles on DEV Community by qingwancong (@congcong).</description>
    <link>https://dev.to/congcong</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%2F4023087%2Ff00d80b4-f79b-4e77-a3cd-e1979ea635a2.png</url>
      <title>DEV Community: qingwancong</title>
      <link>https://dev.to/congcong</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/congcong"/>
    <language>en</language>
    <item>
      <title>Birthday AI rap clips from authorized photos (a pre-send checklist)</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Mon, 09 Nov 2026 13:19:09 +0000</pubDate>
      <link>https://dev.to/congcong/birthday-ai-rap-clips-from-authorized-photos-a-pre-send-checklist-26ca</link>
      <guid>https://dev.to/congcong/birthday-ai-rap-clips-from-authorized-photos-a-pre-send-checklist-26ca</guid>
      <description>&lt;p&gt;Birthday clips are where photo-to-video tools get people into trouble fastest: a relative’s face, a friend’s photo from group chat, a “funny roast” that looks like an official track. I keep a short pre-send checklist for birthday-style AI rap demos so the clip stays a &lt;strong&gt;demo&lt;/strong&gt;, not a mess.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; everything below is about &lt;strong&gt;demo / AI sample&lt;/strong&gt; output from an independent web tool. It is &lt;strong&gt;not&lt;/strong&gt; affiliated with any artist, label, or studio.&lt;/p&gt;

&lt;h2&gt;
  
  
  The birthday job in one line
&lt;/h2&gt;

&lt;p&gt;Take &lt;strong&gt;1–2 authorized adult photos&lt;/strong&gt;, generate &lt;strong&gt;original AI audio&lt;/strong&gt; (not a scraped hit), and render a short performance-style clip for a birthday send. The product path I use for that job is &lt;a href="https://airapvideovip.com/birthday-rap-video/" rel="noopener noreferrer"&gt;Birthday Rap Video&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pre-send checklist (in this order)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Rights on the face&lt;/strong&gt; — only adult photos the sender owns or has explicit permission to use. No celebrity screenshots, no scraped social photos, no “they won’t mind.”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Original AI audio only&lt;/strong&gt; — lyrics and beat are synthesized for the clip. Do not paste someone else’s chart track and pretend it’s yours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One clear story&lt;/strong&gt; — birthday greeting / light roast / duo shout-out. Keep the ask narrow so the demo reads as a sample, not a release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Label it when you share&lt;/strong&gt; — say it’s AI / demo in the caption. Don’t imply an official artist drop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One product link if you mention the tool&lt;/strong&gt; — for this post that single link is &lt;a href="https://airapvideovip.com/birthday-rap-video/" rel="noopener noreferrer"&gt;Birthday Rap Video&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I refuse to claim
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No “official artist voice,” “signed with X label,” or studio affiliation.&lt;/li&gt;
&lt;li&gt;No fake download counts or store rankings.&lt;/li&gt;
&lt;li&gt;No promise that a blog post or directory listing grants distribution rights.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When to skip this flow
&lt;/h2&gt;

&lt;p&gt;Skip it if you only have unauthorized faces, want a copyrighted instrumental as if it were yours, or need a real studio master. Those are different products.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Consent → original AI audio → short birthday demo → honest disclosure. If you’re evaluating the tool, start at the birthday flow linked above and judge the sample yourself.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>showdev</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>A Quiet Map of MicroDuck Resources Before You Bookmark Random Repos</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Sat, 07 Nov 2026 11:45:16 +0000</pubDate>
      <link>https://dev.to/congcong/a-quiet-map-of-microduck-resources-before-you-bookmark-random-repos-10di</link>
      <guid>https://dev.to/congcong/a-quiet-map-of-microduck-resources-before-you-bookmark-random-repos-10di</guid>
      <description>&lt;p&gt;An unofficial field guide to sorting official software, simulators, RL repos, and community notes without mixing them up.&lt;/p&gt;

&lt;p&gt;Hobby robotics tabs multiply fast. One browser window holds a demo video. Another holds a fork of a training repo. A third holds a Discord invite that may or may not still be current. By the end of an evening you have bookmarks, but not a map.&lt;/p&gt;

&lt;p&gt;This note is a practical way to sort MicroDuck-related resources before you clone anything. It is written for builders who want a calm first pass over software, simulators, RL repositories, and community links. It comes from MicroDuck Robot Community, an independent unofficial site. It is not affiliated with Pollen Robotics or Hugging Face, and it does not invent metrics, shipping timelines, or user counts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate "official surface" from "community notes"
&lt;/h2&gt;

&lt;p&gt;Start by labeling what kind of page you are looking at. Official software pages, browser simulators, and primary repositories deserve one pile. Community write-ups, local-training notes, and DIY checklists deserve another. Mixing the two is how people treat a fan guide as a release channel, or treat a release channel as the only place to ask beginner questions.&lt;/p&gt;

&lt;p&gt;When a page is unclear, ask one question: who maintains this URL? If the answer is "the upstream project," keep it in the official pile. If the answer is "an independent community site or volunteer notes," keep it in the community pile and expect it to disclose that status.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prefer one hub link while you are still exploring
&lt;/h2&gt;

&lt;p&gt;During the first exploration pass, one curated hub beats ten parallel tabs. A single resources page that points at official software, a browser simulator, RL repositories, related communities, and a training-readiness tool lets you see the landscape without committing to a clone yet.&lt;/p&gt;

&lt;p&gt;That is the role of the &lt;a href="https://microduckrobot.org/resources/" rel="noopener noreferrer"&gt;MicroDuck resources hub&lt;/a&gt; on the unofficial community site: a map, not a substitute for upstream docs. Use it to decide what to open next, then go to the primary source for install commands.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check readiness before you treat RL repos as tonight's project
&lt;/h2&gt;

&lt;p&gt;RL repositories look inviting because they promise motion. They also assume a stack: Python version, lockfiles, CUDA discovery, and task registries. Before you schedule a long run, confirm that the repo you opened matches the revision you intend to follow, and that the environment questions (Python, CUDA availability, task names) are answerable from that checkout.&lt;/p&gt;

&lt;p&gt;A short install check is usually cheaper than discovering a broken stack after hours of silent compute. Treat community training notes as orientation; treat the pinned guide and primary repo as the copy-paste source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep DIY checklists boring on purpose
&lt;/h2&gt;

&lt;p&gt;BOM mistakes, prerelease image flashes, and "almost the right part number" failures are unglamorous. They are also the failures that waste weekends. Keep DIY checklists boring: quantity times unit price, connector families, battery rows, and spreadsheet formulas that accidentally omit a line. The goal is fewer cart surprises, not a more exciting story.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this map does not claim
&lt;/h2&gt;

&lt;p&gt;It does not claim that the unofficial hub is complete. It does not claim endorsement by Pollen Robotics, Hugging Face, or upstream maintainers. It does not invent traffic, stars, or benchmark scores. It only argues for a calmer order of reading: label the source, use one hub while exploring, then verify readiness before a heavy RL night.&lt;/p&gt;

&lt;p&gt;Disclosure: MicroDuck Robot Community (microduckrobot.org) is an independent unofficial community site. It is not affiliated with Pollen Robotics, Hugging Face, or the upstream MicroDuck maintainers. I help operate that community site. The resources map above points to public pages for orientation; it is not an official product listing and not a performance claim.&lt;/p&gt;

</description>
      <category>robotics</category>
      <category>opensource</category>
      <category>diy</category>
    </item>
    <item>
      <title>From two authorized photos to a short AI rap video (consent-first workflow)</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Mon, 02 Nov 2026 13:29:05 +0000</pubDate>
      <link>https://dev.to/congcong/from-two-authorized-photos-to-a-short-ai-rap-video-consent-first-workflow-2f55</link>
      <guid>https://dev.to/congcong/from-two-authorized-photos-to-a-short-ai-rap-video-consent-first-workflow-2f55</guid>
      <description>&lt;p&gt;I built a small web tool for a narrow job: take &lt;strong&gt;1–2 photos the user owns rights to&lt;/strong&gt;, generate &lt;strong&gt;original AI audio&lt;/strong&gt; (not scraped vocals), and render a short “rap performance” style clip. This post is the checklist I use before anyone hits generate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; everything below is about &lt;strong&gt;demo / AI sample&lt;/strong&gt; output. The product is an independent tool. It is &lt;strong&gt;not&lt;/strong&gt; affiliated with any artist, label, or studio.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why consent comes first
&lt;/h2&gt;

&lt;p&gt;Photo-to-video tools fail socially when they treat any face as fair game. The rule I enforced in product copy and UX:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Only use &lt;strong&gt;authorized adult&lt;/strong&gt; photos (user owns the rights / has explicit permission).&lt;/li&gt;
&lt;li&gt;Never imply the clip is an official release from a known artist or brand.&lt;/li&gt;
&lt;li&gt;Label outputs as &lt;strong&gt;AI-generated demos&lt;/strong&gt; when sharing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If a workflow skips those three, I don’t publish it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The path that actually ships
&lt;/h2&gt;

&lt;p&gt;For a usable first clip, I keep the funnel short:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pick the landing for the job&lt;/strong&gt; — general flow is &lt;a href="https://airapvideovip.com/photo-to-rap-video/" rel="noopener noreferrer"&gt;Photo to Rap Video&lt;/a&gt;; birthday / duo variants exist when the story is different.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upload 1–2 licensed adult photos&lt;/strong&gt; — one subject or a duo; avoid third-party celebrity images.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate original AI audio&lt;/strong&gt; — lyrics/melody are synthesized for the clip; do not paste copyrighted tracks as if they were yours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render a short performance-style video&lt;/strong&gt; — treat it as a sample, not a label release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share with disclosure&lt;/strong&gt; — say it’s AI / demo when you post it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One product link for this whole post: &lt;a href="https://airapvideovip.com/photo-to-rap-video/" rel="noopener noreferrer"&gt;AI Rap Video VIP&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I deliberately do &lt;em&gt;not&lt;/em&gt; claim
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No “official artist voice” or “signed with X label” language.&lt;/li&gt;
&lt;li&gt;No fake user counts or store rankings.&lt;/li&gt;
&lt;li&gt;No promise that a directory listing or blog post equals distribution rights.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When this workflow is a bad fit
&lt;/h2&gt;

&lt;p&gt;Skip it if you only have scraped faces, want someone else’s hit instrumental, or need a real studio master. Those are different products.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Consent → original AI audio → short demo clip → honest disclosure. That order is the product. If you’re evaluating the tool, start at the photo-to-rap flow linked above and judge the sample quality yourself.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>showdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Keep the archive black and white: restoring a monochrome scan without inventing color</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Tue, 27 Oct 2026 10:22:00 +0000</pubDate>
      <link>https://dev.to/congcong/keep-the-archive-black-and-white-restoring-a-monochrome-scan-without-inventing-color-1fii</link>
      <guid>https://dev.to/congcong/keep-the-archive-black-and-white-restoring-a-monochrome-scan-without-inventing-color-1fii</guid>
      <description>&lt;p&gt;Family albums are full of black-and-white prints that still matter: a grandparent's wedding day, a class photo, a passport-style headshot from before color film was common. Someone scans them, opens an AI "restore" tool, and the model quietly does two things at once: it cleans the dust, and it invents color.&lt;/p&gt;

&lt;p&gt;That second step is the problem. A monochrome photograph is not an unfinished color photograph. The silver (or the ink) was the whole image. Adding color is a creative interpretation, not a repair. If your goal is to keep the archive honest, colorization is a different project and should stay optional.&lt;/p&gt;

&lt;p&gt;This post is a practical workflow for restoring a black-and-white scan &lt;strong&gt;while keeping it black and white&lt;/strong&gt;. Most of the steps are tool-agnostic. At the end I show one AI pass with its limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Start from the real scan
&lt;/h2&gt;

&lt;p&gt;Restoration works on what the scanner captured. Every re-save before that throws information away.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prefer the original scan file, not a screenshot of the print on a phone screen.&lt;/li&gt;
&lt;li&gt;Avoid chat-app forwards. Messaging apps re-compress, and JPEG blocks plus dust are harder to separate than dust alone.&lt;/li&gt;
&lt;li&gt;If the scan is crooked, straighten and crop &lt;em&gt;after&lt;/em&gt; you have a working copy, not before the first cleanup pass. Aggressive warp early can smear fine grain into mush.&lt;/li&gt;
&lt;li&gt;Do not run a heavy "auto enhance" or "vivid" preset first. Those presets often push saturation and contrast that fight a later decision to stay monochrome.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the only copy you have is a phone photo of the print under uneven light, lower expectations now. Glare, warp, and mixed lighting are separate problems from surface dust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Decide what "fixed" means before you touch anything
&lt;/h2&gt;

&lt;p&gt;Write down what you want to change and what must stay the same. For a black-and-white archive scan, mine usually looks like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Change:&lt;/strong&gt; dust spots, fine scratches, mild surface stains, blocked midtones that hide face detail that is still present in the grain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep:&lt;/strong&gt; strict black-and-white (no tint, no sepia unless the print itself is sepia), original film grain, every person's identity / age / expression, clothing, and the original framing. No invented teeth, hair, jewelry, or background objects.&lt;/p&gt;

&lt;p&gt;This list is your acceptance test. A result that looks "cleaner" but adds a warm tint or smooths a face into a different person fails, even if the dust is gone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Make one conservative pass
&lt;/h2&gt;

&lt;p&gt;Here is a sample from the MendTrue site: an aged monochrome portrait with dust and soft tonal separation. &lt;strong&gt;Both images below are AI-generated demo samples published on the site, not a customer photo.&lt;/strong&gt; The second image is the AI black-and-white archive result for the first.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3ih5karslt18hgk0mmb8.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3ih5karslt18hgk0mmb8.jpg" alt="INPUT: AI-generated demo of an aged black-and-white portrait scan with dust spots and soft tonal separation" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;INPUT: AI-generated demo sample. Note the dust marks and the flattened midtones; the image is already monochrome.&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgsv7ignhilgt16yl7hgz.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgsv7ignhilgt16yl7hgz.jpg" alt="RESULT: AI black-and-white archive output of the same demo, with reduced dust and clearer tonal separation while staying strictly monochrome" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;RESULT: AI edit of the same sample. Less dust, clearer tonal separation; still black and white, same face, same expression, same grain character.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The instruction behind that pass is deliberately narrow: repair dust and minor surface damage, gently restore tonal separation, keep the image strictly black and white with its original film grain, do not colorize, preserve identity / expression / age / clothing / composition, and do not invent missing facial detail or add objects. If you use a different tool, aim for the same idea: one weak, monochrome-preserving pass you can judge, not the strongest "restore everything" setting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Judge at 100%, in three zones
&lt;/h2&gt;

&lt;p&gt;Thumbnails lie. Open input and result side by side at 100% and check three areas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Flat tones&lt;/strong&gt; (sky, wall, coat): this is where dust spots hide. Spots should be calmer, but the area should still read as paper or fabric grain, not airbrushed plastic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faces&lt;/strong&gt;: look at eyes, mouth corners, and age lines. You want fewer scratches, not a younger or smoother stranger. If the model filled in a smile or sharpened teeth that were never sharp in the print, reject it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edges and grain&lt;/strong&gt;: hair against the background, collar edges, and the overall grain pattern. Smearing here means the pass was too strong. A sudden warm tint or purple cast means colorization leaked in — treat that as a hard fail for an archive copy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then do one identity check at normal viewing size: same eyes, same mouth shape, same age. Archive faces often have little real information in the shadows. A model that "helps" can change an expression in subtle ways. If anything looks like a slightly different person, keep the input.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Know when to stop — and when color is a separate job
&lt;/h2&gt;

&lt;p&gt;Some honest limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Remaining grain is fine.&lt;/strong&gt; Film grain is part of the photograph. Chasing a perfectly clean digital look is how you erase the medium.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing pieces stay missing.&lt;/strong&gt; A torn corner or a chemically blank area has no latent face detail to recover. Inpainting there is invention, not restoration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sepia and dye stains are not "color to restore."&lt;/strong&gt; If the print itself is sepia, keeping that warm cast can be honest. Inventing full color on top of a true B&amp;amp;W negative or silver print is a different editorial choice — do it in a separate file with a separate label.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't stack aggressive passes.&lt;/strong&gt; Running "max restore" twice usually costs more identity than it saves dust. Adjust the instruction and retry from the original scan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Colorization belongs in its own branch.&lt;/strong&gt; If you later want an interpretive color version, duplicate the cleaned monochrome file and colorize that copy. Never overwrite the archive master with a colorized result.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A short checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Real scan file, not a screenshot or chat copy&lt;/li&gt;
&lt;li&gt;[ ] Written "change / keep" list that includes &lt;strong&gt;stay monochrome&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;[ ] One conservative, non-colorizing pass&lt;/li&gt;
&lt;li&gt;[ ] 100% check: flat tones, faces, edges/grain&lt;/li&gt;
&lt;li&gt;[ ] Identity check at normal size&lt;/li&gt;
&lt;li&gt;[ ] Accept remaining grain; reject invented detail or surprise tint&lt;/li&gt;
&lt;li&gt;[ ] Keep colorization (if any) as a separate labeled file&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Trying it
&lt;/h2&gt;

&lt;p&gt;If you want to try the same monochrome-preserving pass on your own scan, the template I used is here: &lt;a href="https://mendtrue.com/photo-templates/black-white-archive" rel="noopener noreferrer"&gt;Black-and-white archive on MendTrue&lt;/a&gt;. You can read and edit the instruction before generating, and compare before/after before downloading.&lt;/p&gt;

&lt;p&gt;Whatever tool you use, the rule is the same: repair the damage the years added, and leave the black-and-white photograph a black-and-white photograph.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I work on MendTrue. Both images in this post are AI-generated demo samples from the MendTrue website, and the result image is an AI edit.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>tutorial</category>
      <category>ai</category>
      <category>imageprocessing</category>
    </item>
    <item>
      <title>Check the spreadsheet before the cart: 6 things I look for in a hobby robot BOM</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Mon, 26 Oct 2026 11:19:30 +0000</pubDate>
      <link>https://dev.to/congcong/check-the-spreadsheet-before-the-cart-6-things-i-look-for-in-a-hobby-robot-bom-1kib</link>
      <guid>https://dev.to/congcong/check-the-spreadsheet-before-the-cart-6-things-i-look-for-in-a-hobby-robot-bom-1kib</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I help run MicroDuck Robot Community, an unofficial, independent fan and maker site. It is not affiliated with Pollen Robotics or Hugging Face. Everything below comes from reading public maker files; I did not build this robot or place any orders for this post.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A bill of materials (BOM) looks like the most boring file in a hardware repo. It is also the file that decides how much money you spend before you find out whether your build works.&lt;/p&gt;

&lt;p&gt;Last week a community maker published a web preview of an assembly workbook for a small bipedal "duck" robot replica (the HD1910 servo route). Reading it closely turned into a useful checklist, so here it is in a generic form you can apply to any hobby robot BOM.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Rows are categories, not part counts
&lt;/h2&gt;

&lt;p&gt;The preview has 33 print-item rows and 23 purchased-item rows. That does not mean 56 parts. One row can be "servo × 15" or "M2 screws, assorted". Some rows are alternatives (for example, two ankle variants, or optional roller parts) where you pick one, not both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; before you add things to a cart, mark each row as &lt;em&gt;required&lt;/em&gt;, &lt;em&gt;pick one of&lt;/em&gt;, or &lt;em&gt;optional&lt;/em&gt; for &lt;em&gt;your&lt;/em&gt; build.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Re-add the totals yourself
&lt;/h2&gt;

&lt;p&gt;In this workbook the total cell is &lt;code&gt;SUM(I3:I58)&lt;/code&gt;, but there is a real line item at row 59 (a sole grip pad, CNY 16) that the formula skips. Nobody did anything wrong on purpose; a row got added below the range.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; select the whole amount column and compare your sum with the stated total. If they differ, find the row that falls outside the formula range.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Quantity × unit price should equal the line amount
&lt;/h2&gt;

&lt;p&gt;The battery row (an NP-F550-type pack) lists quantity 1, unit price 17, and line amount 47. One of those three numbers is wrong, or the line is really a bundle (battery plus charger, say) that the label doesn't describe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; recompute every &lt;code&gt;qty × unit = amount&lt;/code&gt; line. Mismatches usually mean a hidden bundle or a stale price, and you want to know which before ordering.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The part label should match the route you are building
&lt;/h2&gt;

&lt;p&gt;The servo label in the table reads HD1901M while the project route is HD1910. That might be a typo, or it might be a different SKU. With 15 servos in a build, guessing wrong is expensive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; confirm the exact servo SKU and voltage with the supplier listing, not just the BOM text.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Keep CAD, BOM and wiring on the same revision
&lt;/h2&gt;

&lt;p&gt;The same update split the print files into separate HD1910 and XL330 routes. A BOM from one route plus CAD from another, or wiring notes from an older board revision, is how people end up with parts that physically fit but electrically don't. Connector families (for example EH2.5 vs AMP2.0 harnesses) are not interchangeable just because both carry power.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; write down, in one place, the CAD route, ankle/roller variants, board revision and pinout you are following.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Treat author budgets as history, not a quote
&lt;/h2&gt;

&lt;p&gt;A second maker published a budget the same week: a body subtotal of CNY 2,529.70 (including a gamepad and spare stock, 15 servos at CNY 119 each), and a version with an assembled HAT/IMU board at CNY 2,827.70. Making boards yourself was estimated at CNY 3,400–3,700 once CNY 800–1,000 of tools and consumables are included.&lt;/p&gt;

&lt;p&gt;Those are useful reference points, but they are one person's prices on one date. They leave out filament and printed parts, a computer, unpriced items like the microSD card, and shipping or losses. And you should not merge two different makers' lists into one "cheapest possible robot" number; they assume different boards and wiring.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check:&lt;/strong&gt; list what you already own (printer, soldering tools, a spare computer) and what's missing from the budget, then price only the gap.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short version
&lt;/h2&gt;

&lt;p&gt;Before ordering parts for any hobby robot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Classify rows: required, pick-one, optional.&lt;/li&gt;
&lt;li&gt;Re-sum the totals and recheck qty × unit price.&lt;/li&gt;
&lt;li&gt;Confirm SKUs and voltages against the supplier, not the label.&lt;/li&gt;
&lt;li&gt;Pin CAD, BOM, board revision and wiring to one route.&lt;/li&gt;
&lt;li&gt;Treat budgets as dated examples and price your own gap.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Buying parts doesn't finish a build; assembly, per-servo setup, IMU calibration and recovery checks still come after. I keep the full source-checked notes for this route, including the BOM preview, both budgets and the calibration steps, on one page: &lt;a href="https://microduckrobot.org/diy/tutorials/" rel="noopener noreferrer"&gt;MicroDuck DIY: BOM checks, build budget and calibration&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you've been burned by a BOM detail I didn't list, I'd like to hear it in the comments.&lt;/p&gt;

</description>
      <category>robotics</category>
      <category>hardware</category>
      <category>diy</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Before You Flash a Prerelease Robot Image: A Checklist From the MicroDuck Replica 20261023 Build</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Fri, 23 Oct 2026 11:17:12 +0000</pubDate>
      <link>https://dev.to/congcong/before-you-flash-a-prerelease-robot-image-a-checklist-from-the-microduck-replica-20261023-build-7k6</link>
      <guid>https://dev.to/congcong/before-you-flash-a-prerelease-robot-image-a-checklist-from-the-microduck-replica-20261023-build-7k6</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I help run MicroDuck Robot Community, an independent, unofficial community site. It is not affiliated with Pollen Robotics or Hugging Face. Everything below comes from the replica author's public release notes as summarized on our page; we did not download or flash the large image ourselves.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;On October 23, 2026 (Beijing time), the author of a community MicroDuck replica published &lt;strong&gt;image 20261023&lt;/strong&gt; for the Feetech HD1910 / Radxa Zero 3W build. It is explicitly marked as a prerelease. That makes it a good example for a habit worth building whenever a hobby-robot image drops: separate "what changed" from "what has actually been verified on hardware".&lt;/p&gt;

&lt;p&gt;Here is the checklist I now use.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Confirm the image is for your hardware route
&lt;/h2&gt;

&lt;p&gt;This image targets the HD1910 / Radxa Zero 3W replica route. It is not an image for an official XL330 robot or for Open Duck Mini. If your build is different, stop here.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Verify the file before you write it to a card
&lt;/h2&gt;

&lt;p&gt;The compressed file is &lt;code&gt;microduck-replica-20261023.img.xz&lt;/code&gt; (712,183,896 bytes). Download the checksum companion from the same release and check it in the same directory.&lt;/p&gt;

&lt;p&gt;macOS / Linux:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;shasum &lt;span class="nt"&gt;-a&lt;/span&gt; 256 &lt;span class="nt"&gt;-c&lt;/span&gt; microduck-replica-20261023.img.xz.sha256
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Windows PowerShell (compare the output with the published SHA-256):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;Get-FileHash&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-Algorithm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;SHA256&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;\microduck-replica-20261023.img.xz&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Read which components actually changed
&lt;/h2&gt;

&lt;p&gt;A new image number does not mean everything inside it is new. In this release, the Studio/build source and helper (0.7.0) changed, but the custom runtime stays at the previous fork revision with the same runtime hash as the earlier 21b image. Its Armbian 26.2.1 / Debian 13 base and the official 0.15.1 base runtime are also separate from the current official daemon 0.17.8. In short, a new Studio image is not a new robot daemon.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Keep a working card and your calibration backup
&lt;/h2&gt;

&lt;p&gt;The author's offline acceptance record covers packaging, software tests and filesystem inspection. A fresh-card standing and walking run, plus real camera and ToF checks, had not been completed for this exact image. So keep the card that already works, and keep your calibration backup.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Treat "service online" as different from "sensor working"
&lt;/h2&gt;

&lt;p&gt;The new Studio adds camera and ToF pages and seven device indicators (battery, servos, IMU, camera, ToF, gamepad, board). Those are diagnostic states, not seven passed hardware tests. The image still defaults to a camera test picture, so a running media service does not prove a real camera feed.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Use the supported flows, not manual shortcuts
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IMU direction:&lt;/strong&gt; there is a new "Recalibrate direction" flow that needs Studio and helper 0.7.0 together. Start with the body supported and torque off, and don't replace it with a manual mode edit. If it's interrupted, resolve it through the recovery entry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Models:&lt;/strong&gt; training and export still happen on your computer. Import a package with the model and its matching manifests, not a bare ONNX file. "Installed", "selected" and "currently executing" are three different states.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSH:&lt;/strong&gt; it's optional. Register your own public key (the &lt;code&gt;.pub&lt;/code&gt; line, never a private key). There's no usable default remote SSH password, and the hotspot password is not an SSH password.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Record what you skipped
&lt;/h2&gt;

&lt;p&gt;The checklist now lets you skip steps. A skipped step is not a validated step. For example, skipping IMU orientation just uses a default mounting assumption. Write down exactly what you skipped so a later failure report makes sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. If something fails, report precisely and privately
&lt;/h2&gt;

&lt;p&gt;Note the exact image, the Studio and runtime versions, the checklist stage, and a redacted error. Export diagnostics privately rather than posting a full bundle in public.&lt;/p&gt;




&lt;p&gt;The full, regularly updated notes (including first-boot hotspot steps, the bus-IMU bench record and earlier image history) are on our unofficial community page: &lt;a href="https://microduckrobot.org/diy/microduck-replica/" rel="noopener noreferrer"&gt;MicroDuck replica build notes&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>robotics</category>
      <category>hardware</category>
      <category>opensource</category>
      <category>diy</category>
    </item>
    <item>
      <title>Night noise is a sensor/signal problem — not a reason to invent smoother skin</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Fri, 16 Oct 2026 10:28:53 +0000</pubDate>
      <link>https://dev.to/congcong/night-noise-is-a-sensorsignal-problem-not-a-reason-to-invent-smoother-skin-18a4</link>
      <guid>https://dev.to/congcong/night-noise-is-a-sensorsignal-problem-not-a-reason-to-invent-smoother-skin-18a4</guid>
      <description>&lt;p&gt;High-ISO noise looks ugly, so denoise tools are tempting. The failure mode is not “still noisy.” It is &lt;strong&gt;quietly replacing texture with a wax portrait&lt;/strong&gt; while claiming the same person and the same room.&lt;/p&gt;

&lt;p&gt;I treat denoise as a &lt;strong&gt;conservative signal estimate&lt;/strong&gt;: reduce chroma speckles and harsh luminance grain that the sensor added, keep edges and intentional grain, and refuse to invent pores, lashes, or clothing weave that were not recoverable.&lt;/p&gt;

&lt;p&gt;I tested MendTrue’s gentle denoise template on the public synthetic night-interior sample — not a customer photo.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbrxhw05gfoiwnqculfla.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbrxhw05gfoiwnqculfla.jpg" alt="Official MendTrue synthetic night interior portrait used as denoise input: cool window light, visible high-ISO chroma and luminance noise" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;INPUT — synthetic site sample (&lt;code&gt;/assets/tool-examples/v1/adult-night-noise-before-v1.webp&lt;/code&gt;). Dual sources are already visible; chroma noise sits in the shadows.&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbu19exu24qhfzlv2fx3p.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbu19exu24qhfzlv2fx3p.jpg" alt="AI gentle-denoise result for the same synthetic sample: reduced chroma speckles while keeping skin texture and room geometry" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AI RESULT — same person, same room, same dual lighting; less chroma noise, not a remade face (&lt;code&gt;/assets/tool-examples/v1/adult-night-denoise-after-v1.webp&lt;/code&gt;).&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I check before trusting a denoise
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Identity invariants&lt;/strong&gt; — eyes, age cues, hairline, clothing logos stay put.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Texture, not plastic&lt;/strong&gt; — skin should not look airbrushed; fabric weave should survive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edges first&lt;/strong&gt; — window frames, hair strands, and lamp rims should not smear.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No invented detail&lt;/strong&gt; — if a shadow was empty, the model must not mint freckles or jewelry.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Failure modes that look “cleaner”
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Global beauty-filter smoothing sold as denoise.&lt;/li&gt;
&lt;li&gt;Over-sharpening that recreates false grain after wiping real texture.&lt;/li&gt;
&lt;li&gt;Relighting the room while “just cleaning noise.”&lt;/li&gt;
&lt;li&gt;Changing expression or mouth shape in low light.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this matters for product photo tools
&lt;/h2&gt;

&lt;p&gt;A repair tool that invents a smoother person is a different product from one that estimates sensor noise. Users who cannot retake the night shot need the second kind: &lt;strong&gt;recover what is still there&lt;/strong&gt;, disclose the estimate, and leave gaps alone.&lt;/p&gt;

&lt;p&gt;Template used (sole product link): &lt;a href="https://mendtrue.com/photo-templates/gentle-denoise" rel="noopener noreferrer"&gt;Gentle noise cleanup on MendTrue&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Prepared instruction on that page (paraphrased for review): reduce visible digital chroma noise and harsh luminance speckles conservatively; preserve fine texture, edges, and intentional film grain; avoid aggressive smoothing or sharpening; preserve every person’s identity, expression, age, clothing, and the original composition; do not invent missing facial detail or add objects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; both images are MendTrue’s public synthetic demo samples. The result is an AI-edited estimate, not a reshoot and not a customer photo.&lt;/p&gt;

&lt;p&gt;If you build image pipelines, gate denoise on the same invariants you would use for relight or glare repair: change the noise layer, keep the person.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>imageprocessing</category>
      <category>webdev</category>
      <category>design</category>
    </item>
    <item>
      <title>Print glare is a surface reflectance problem — not a face to invent</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Sat, 10 Oct 2026 10:45:17 +0000</pubDate>
      <link>https://dev.to/congcong/print-glare-is-a-surface-reflectance-problem-not-a-face-to-invent-3i24</link>
      <guid>https://dev.to/congcong/print-glare-is-a-surface-reflectance-problem-not-a-face-to-invent-3i24</guid>
      <description>&lt;p&gt;Photographing a paper print often adds a broad specular sheen. Treating that sheen as “fix the face” invents identity instead of repairing the print.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do instead
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Decide which regions still show print detail under the sheen.&lt;/li&gt;
&lt;li&gt;Reduce glare only there.&lt;/li&gt;
&lt;li&gt;Leave fully wiped areas alone rather than hallucinating features.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The images below are synthetic demo + AI-edited samples from MendTrue’s public demo assets.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7hbxidjcldobxgcuba5n.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7hbxidjcldobxgcuba5n.jpg" alt="INPUT" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;INPUT&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4i4t7531c0x61pz45gs3.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4i4t7531c0x61pz45gs3.jpg" alt="AI RESULT — print glare only" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI RESULT — print glare only&lt;/p&gt;

&lt;p&gt;If you want the same print-glare template: &lt;a href="https://mendtrue.com/photo-templates/photo-print-glare" rel="noopener noreferrer"&gt;https://mendtrue.com/photo-templates/photo-print-glare&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before you keep a result, check paving and paper texture consistency. Glare fill is an estimate of the print surface, not recovered detail.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>imageprocessing</category>
      <category>design</category>
    </item>
    <item>
      <title>Treat AI Relight as a Photometric Hypothesis, Not a New Portrait</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Mon, 07 Sep 2026 06:14:01 +0000</pubDate>
      <link>https://dev.to/congcong/treat-ai-relight-as-a-photometric-hypothesis-not-a-new-portrait-1ap8</link>
      <guid>https://dev.to/congcong/treat-ai-relight-as-a-photometric-hypothesis-not-a-new-portrait-1ap8</guid>
      <description>&lt;p&gt;The 23 August DEV post was about splitting a prompt into change versus preserve. This one is narrower: &lt;strong&gt;light is a physical claim&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If a model "relights" a portrait, it is asserting a new key, a new fill, and a new set of shadows on the same objects. That is closer to a renderer than to a filter. It can be useful. It can also mint a different evening, a different room, or a different person while still looking like photography.&lt;/p&gt;

&lt;p&gt;I tested the current MendTrue relight preset on the public synthetic night-interior sample — not a customer photo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1qskwvc274mcosqh8m87.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1qskwvc274mcosqh8m87.webp" alt="Official MendTrue synthetic night interior portrait used as relight input, cool window light versus warm lamp" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Input: dual sources are already visible — cool window on one side, warm lamp on the other. Synthetic site sample.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The extra instruction was a single photometric request:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add a soft key light from camera left. Keep identity, pose, clothing, background geometry, crop and time of day.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fph756dyub951byy0byjs.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fph756dyub951byy0byjs.webp" alt="Official MendTrue synthetic night-interior relight after sample; same person and room, shifted key light" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Official site after sample for the &lt;code&gt;relight&lt;/code&gt; preset (same synthetic scene as the input). Treat new highlights as a hypothesis until catchlights and wall geometry agree with the source. AI photometric edit, not a reshoot.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Invariants that are cheaper to name than to repair
&lt;/h2&gt;

&lt;p&gt;A relight job fails in a different way than a prompt-contract job. The face can remain "the same" while the physics rot.&lt;/p&gt;

&lt;p&gt;I write the invariants down before generating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;identity and expression;&lt;/li&gt;
&lt;li&gt;hair volume and clothing edges;&lt;/li&gt;
&lt;li&gt;window, lamp, table, plant, picture frame — count and placement;&lt;/li&gt;
&lt;li&gt;camera height and crop;&lt;/li&gt;
&lt;li&gt;outdoor time of day (blue hour stays blue hour);&lt;/li&gt;
&lt;li&gt;number of practical lights in the room.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then the &lt;em&gt;change set&lt;/em&gt; is allowed to include only: intensity, softness, and direction of light on surfaces that already exist.&lt;/p&gt;

&lt;p&gt;If the window grows, the lamp shade changes species, or a third sconce appears, the hypothesis is already false. Pretty skin will not save it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three tests that do not need a lab
&lt;/h2&gt;

&lt;p&gt;These are the checks I actually run at 100% zoom.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Catchlights.&lt;/strong&gt; Eyes pick up the lights that exist. If the source had a window and a lamp, a result with a studio octabox and no window reflection is a different shoot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadow direction.&lt;/strong&gt; Nose, collar, and table legs should agree with each other. Mixed shadows from imaginary overheads are a tell.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contact with the room.&lt;/strong&gt; The lamp still sits on the same table. The plant still occupies the same corner. Relight is not set dressing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Only after those three do I look at whether the new key is actually softer or merely brighter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure modes I would log like bugs
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symptom&lt;/th&gt;
&lt;th&gt;Likely broken invariant&lt;/th&gt;
&lt;th&gt;Next retry&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Face looks younger or smoother&lt;/td&gt;
&lt;td&gt;identity / skin texture&lt;/td&gt;
&lt;td&gt;Relight only; forbid retouch words&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Window view becomes a different city&lt;/td&gt;
&lt;td&gt;background geometry&lt;/td&gt;
&lt;td&gt;Name the window as frozen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Warm lamp turns into daylight&lt;/td&gt;
&lt;td&gt;time of day&lt;/td&gt;
&lt;td&gt;State "keep blue hour + practical lamp"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crop recenters the subject&lt;/td&gt;
&lt;td&gt;camera&lt;/td&gt;
&lt;td&gt;Repeat with explicit crop lock&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Noise vanishes into plastic&lt;/td&gt;
&lt;td&gt;material&lt;/td&gt;
&lt;td&gt;Relight ≠ denoise; do not combine yet&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I generated denoise as a &lt;em&gt;separate&lt;/em&gt; 1-credit run on the same source file, on purpose. Mixing both in one request would hide which tool invented the smoothness.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I store with the result
&lt;/h2&gt;

&lt;p&gt;For a lighting experiment that might be reused in a product shot or a profile crop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the untouched source;&lt;/li&gt;
&lt;li&gt;the exact relight sentence;&lt;/li&gt;
&lt;li&gt;the approved output under a filename that says &lt;code&gt;relight&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;a note that outdoor twilight was an input fact, not a style LUT.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can run the same photometric loop in the &lt;a href="https://mendtrue.com/relight-photo" rel="noopener noreferrer"&gt;MendTrue relight workspace&lt;/a&gt;. Approve the room and the catchlights before you approve the mood.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>photography</category>
    </item>
    <item>
      <title>A Change-and-Preserve Prompt Pattern for Safer AI Photo Editing</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Sun, 23 Aug 2026 08:14:47 +0000</pubDate>
      <link>https://dev.to/congcong/a-change-and-preserve-prompt-pattern-for-safer-ai-photo-editing-14em</link>
      <guid>https://dev.to/congcong/a-change-and-preserve-prompt-pattern-for-safer-ai-photo-editing-14em</guid>
      <description>&lt;p&gt;AI photo editing is easy to demo and surprisingly hard to trust.&lt;/p&gt;

&lt;p&gt;A request such as “make this photo better” sounds harmless, but it gives a generative model permission to reinterpret almost everything: facial features, clothing, objects, background geometry, light direction, crop, and even the number of people.&lt;/p&gt;

&lt;p&gt;While designing the MendTrue Photo Workspace, I found a more reliable pattern: treat every edit as a small contract with three parts — &lt;strong&gt;change, preserve, review&lt;/strong&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvz7pqbw98w2ievb8db24.jpg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvz7pqbw98w2ievb8db24.jpg" alt="Original rooftop portrait before prompt-based editing" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Synthetic source image used for this workflow test.&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftphvp11juzg57typy80k.webp" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftphvp11juzg57typy80k.webp" alt="Rooftop portrait after a restrained clarity, tone, and color edit" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The result improves existing clarity, exposure, and color while keeping the same person, clothing, skyline, and crop.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Change: ask for one visible outcome
&lt;/h2&gt;

&lt;p&gt;Start with the smallest edit that would make the image useful.&lt;/p&gt;

&lt;p&gt;Good first requests include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;improve mild exposure and white balance;&lt;/li&gt;
&lt;li&gt;reduce a reflection;&lt;/li&gt;
&lt;li&gt;remove one distracting person;&lt;/li&gt;
&lt;li&gt;recover moderate blur;&lt;/li&gt;
&lt;li&gt;restore faded color.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A focused edit is easier to evaluate than a prompt that changes the weather, background, wardrobe, and face at the same time. It also gives a retry a clear target.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Preserve: make invariants explicit
&lt;/h2&gt;

&lt;p&gt;The second half of the prompt should name what must not move. For a portrait, that usually means identity, expression, pose, clothing, important objects, light direction, framing, and aspect ratio.&lt;/p&gt;

&lt;p&gt;I use a prompt shape like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Change: improve mild exposure and white balance.

Preserve: the same face, expression, denim jacket, skyline,
sunlight direction, composition, crop, and aspect ratio.

Do not add or remove people, objects, text, or logos.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not magic syntax. Its value is separation: the model receives one transformation goal and a readable list of invariants instead of an ambiguous aesthetic wish.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Match settings to risk
&lt;/h2&gt;

&lt;p&gt;Not every photo should get the same amount of generative freedom.&lt;/p&gt;

&lt;p&gt;For recognizable people, I start conservatively. A damaged historical scan may justify more reconstruction, but a modern portrait usually needs less. If a reference image is supplied, its role must be explicit: for example, “use the second burst-frame image only as evidence for the open eyes.”&lt;/p&gt;

&lt;p&gt;A reference without a declared role can quietly introduce the wrong expression, pose, or crop.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Review locally and globally
&lt;/h2&gt;

&lt;p&gt;The review loop matters as much as the prompt.&lt;/p&gt;

&lt;p&gt;At 100%, inspect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;eyes, teeth, and hands;&lt;/li&gt;
&lt;li&gt;hair boundaries and jewelry;&lt;/li&gt;
&lt;li&gt;text and logos;&lt;/li&gt;
&lt;li&gt;edges around the requested change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then return to normal viewing size and compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;identity and expression;&lt;/li&gt;
&lt;li&gt;subject and object count;&lt;/li&gt;
&lt;li&gt;body proportions and pose;&lt;/li&gt;
&lt;li&gt;perspective, horizon, and light direction;&lt;/li&gt;
&lt;li&gt;the complete crop.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A technically crisp local patch can still fail if the full image feels like a different moment or a different person.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Retry by changing one variable
&lt;/h2&gt;

&lt;p&gt;If the result is faithful but slightly too warm, revise only the color instruction. If an untouched region changed, repeat the preservation rule and narrow the requested edit. Do not fix drift by adding five new aesthetic goals.&lt;/p&gt;

&lt;p&gt;This one-variable loop makes failures diagnosable and keeps each generation comparable with the previous one.&lt;/p&gt;

&lt;h2&gt;
  
  
  A useful product boundary
&lt;/h2&gt;

&lt;p&gt;Generative repair is not forensic recovery. A model can create plausible detail where the source contains weak evidence. For important family or historical photos, keep the untouched source, exact instruction, and approved output as separate files, and describe generated reconstruction honestly.&lt;/p&gt;

&lt;p&gt;You can try the change-and-preserve workflow in the &lt;a href="https://mendtrue.com/photo-workspace" rel="noopener noreferrer"&gt;MendTrue Photo Workspace&lt;/a&gt;, or read the &lt;a href="https://mendtrue.com/blog/how-to-edit-a-photo-with-a-prompt" rel="noopener noreferrer"&gt;complete prompt-based photo editing guide&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>imageprocessing</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>87 87 月牙抱橡果龙猫：九板分区拼豆接缝检查法</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Sun, 02 Aug 2026 13:27:24 +0000</pubDate>
      <link>https://dev.to/congcong/87x87-yue-ya-bao-xiang-guo-long-mao-jiu-ban-fen-qu-pin-dou-jie-feng-jian-cha-fa-4lga</link>
      <guid>https://dev.to/congcong/87x87-yue-ya-bao-xiang-guo-long-mao-jiu-ban-fen-qu-pin-dou-jie-feng-jian-cha-fa-4lga</guid>
      <description>&lt;p&gt;把一只蜷在月牙里、双手抱橡果的龙猫做成 87×87 拼豆图纸，最大的难点不是配色，而是把整张图拆成可铺、可校对的小块，并在熨烫前发现接缝错位。这篇按九板分区的思路，讲清楚备料、铺板顺序和边界校对三个环节。&lt;/p&gt;

&lt;h2&gt;
  
  
  先看清参考原画
&lt;/h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F555gl06gzeg9e9zlt5wn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F555gl06gzeg9e9zlt5wn.png" alt="月牙抱橡果龙猫参考原画，PDF 标注为 AI artwork reference，87×87、9块板、16色、3360颗，非实体成品" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这张是配色与造型参考原画，PDF 里标注为 AI artwork reference，对应 87×87、9 块 29×29 板、16 色、3,360 颗的图纸。需要说明：它只是配色和造型的参考，不是已经制作完成的实体拼豆作品，准确的颗粒摆放以下方编号图为准。&lt;/p&gt;

&lt;h2&gt;
  
  
  九块板的命名与铺板顺序
&lt;/h2&gt;

&lt;p&gt;87×87 的画布切成三行三列，每块 29×29，按 A1–C3 命名：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;第一行：A1（左上）、B1（中上）、C1（右上）&lt;/li&gt;
&lt;li&gt;第二行：A2（左中）、B2（正中）、C2（右中）&lt;/li&gt;
&lt;li&gt;第三行：A3（左下）、B3（中下）、C3（右下）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;铺板顺序建议从左上往右上逐行推进：A1 → B1 → C1 → A2 → B2 → C2 → A3 → B3 → C3。这样每铺完一块，右手边的相邻列永远是下一块要对接的边界，方便即时比对。&lt;/p&gt;

&lt;h2&gt;
  
  
  备料与分装
&lt;/h2&gt;

&lt;p&gt;16 色里有两色用量很大，务必提前分装，避免铺到一半才发现不够：&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;颜色&lt;/th&gt;
&lt;th&gt;颗数&lt;/th&gt;
&lt;th&gt;含余量袋数&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;80-19057&lt;/td&gt;
&lt;td&gt;Cheddar&lt;/td&gt;
&lt;td&gt;1,306&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-19092&lt;/td&gt;
&lt;td&gt;Dark Grey&lt;/td&gt;
&lt;td&gt;1,048&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-15249&lt;/td&gt;
&lt;td&gt;Honey&lt;/td&gt;
&lt;td&gt;265&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-19056&lt;/td&gt;
&lt;td&gt;Pastel Yellow&lt;/td&gt;
&lt;td&gt;179&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-19021&lt;/td&gt;
&lt;td&gt;Light Brown&lt;/td&gt;
&lt;td&gt;163&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-19012&lt;/td&gt;
&lt;td&gt;Brown&lt;/td&gt;
&lt;td&gt;81&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-15239&lt;/td&gt;
&lt;td&gt;Mocha&lt;/td&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-19018&lt;/td&gt;
&lt;td&gt;Black&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-15274&lt;/td&gt;
&lt;td&gt;Rich Butter&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-15207&lt;/td&gt;
&lt;td&gt;Charcoal&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-19035&lt;/td&gt;
&lt;td&gt;Tan&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-19004&lt;/td&gt;
&lt;td&gt;Orange&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-15250&lt;/td&gt;
&lt;td&gt;Gingerbread&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-15260&lt;/td&gt;
&lt;td&gt;Stone&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-15220&lt;/td&gt;
&lt;td&gt;Olive&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;80-15268&lt;/td&gt;
&lt;td&gt;Sunflower&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cheddar 1,306 颗和深灰 1,048 颗各备两袋，先按每块板的用量预估分到小盒里，铺板时就不必反复回到大袋数数，也降低溢洒风险。&lt;/p&gt;

&lt;h2&gt;
  
  
  编号图怎么读
&lt;/h2&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faeo3uvbaq6yu77a0mi33.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faeo3uvbaq6yu77a0mi33.png" alt="月牙抱橡果龙猫完整编号摆放图，格子数字对应16色色表，橙色粗线划分九块29×29板，页脚保留toonbead.com" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这张是同一图案的完整编号摆放图。格子里的小数字对应上方 16 色色表，橙色粗线划分九块 29×29 板的边界。铺每一块时，先定位三个锚点：龙猫的耳尖、月牙的内缘弧线、橡果帽的轮廓——这三个位置一旦坐准，周围的填色就有了参照。&lt;/p&gt;

&lt;h2&gt;
  
  
  三个接缝校对技巧
&lt;/h2&gt;

&lt;p&gt;每完成一块板，沿橙色粗线把相邻的两列或两行再数一次，确认边缘色块对齐；熨烫前用主色（Cheddar 或深灰）在废板上做一小块小样，试好温度和时长再正式熨；如果发现接缝处颜色对不上，回到编号图核对该坐标，多数情况是相邻板之间错了一格而非颜色选错。&lt;/p&gt;

&lt;p&gt;按这个流程，一只月牙抱橡果的龙猫就能分九块稳定地拼出来。更多图纸和材料清单可以在 &lt;a href="https://toonbead.com/patterns" rel="noopener noreferrer"&gt;Toonbead 图纸库&lt;/a&gt; 查看。&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Plan an 87x87 Umbrella Totoro Fuse Bead Pattern Across Nine Boards</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Thu, 30 Jul 2026 10:12:36 +0000</pubDate>
      <link>https://dev.to/congcong/how-to-plan-an-87x87-umbrella-totoro-fuse-bead-pattern-across-nine-boards-3l9l</link>
      <guid>https://dev.to/congcong/how-to-plan-an-87x87-umbrella-totoro-fuse-bead-pattern-across-nine-boards-3l9l</guid>
      <description>&lt;p&gt;Large fuse-bead patterns usually fail quietly. A single misplaced bead near the middle of one board may look harmless, but the error can shift a face, break an umbrella rib, or leave two finished boards one cell out of alignment.&lt;/p&gt;

&lt;p&gt;This 87×87 umbrella Totoro pattern is a useful example because it combines three very different structures: a wide geometric canopy, a mostly solid dark body, and small rain details separated by empty space. The right workflow is not simply “start at the top and keep going.” It is to prepare the materials, name the boards, establish anchors, and protect every seam before any heat is applied.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the PDF contains
&lt;/h2&gt;

&lt;p&gt;The printable file has three A4 pages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a complete numbered placement map;&lt;/li&gt;
&lt;li&gt;the artwork used as a shape and color reference;&lt;/li&gt;
&lt;li&gt;a counted material list with Perler color codes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pattern is 87×87 cells, divided into nine 29×29 board regions. It uses 16 colors and 2,766 beads.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkz9ar8mxbw89pzhsscfn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkz9ar8mxbw89pzhsscfn.png" alt="AI-styled artwork reference of an umbrella Totoro-style forest character. The PDF labels it as a reference rather than a finished physical bead piece and lists an 87 by 87 grid, nine boards, 16 colors, and 2,766 beads." width="800" height="1131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Artwork reference for the umbrella character and color relationships. This is not a photograph or simulation of a finished physical bead piece; use the numbered map below for exact placement.&lt;/em&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3250f2rcu73cnl6usi71.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3250f2rcu73cnl6usi71.png" alt="Complete numbered 87 by 87 placement map for the same umbrella character. Thick amber lines divide the map into nine 29 by 29 board regions, and each occupied cell contains a number matching the 16-color key." width="800" height="1131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Complete numbered placement map. Each cell number points to the color key, while the thicker amber lines mark the 29×29 board boundaries.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sort by job, not only by color
&lt;/h2&gt;

&lt;p&gt;The shopping list immediately shows which colors deserve their own large trays:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dark Grey: 1,053 beads, so the 8% spare estimate requires two 1,000-bead bags;&lt;/li&gt;
&lt;li&gt;Honey: 435;&lt;/li&gt;
&lt;li&gt;Creme: 432;&lt;/li&gt;
&lt;li&gt;Cheddar: 253;&lt;/li&gt;
&lt;li&gt;Mist: 136;&lt;/li&gt;
&lt;li&gt;Light Brown: 120.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The remaining ten colors total only 337 beads, but several of them carry important information. Black and Charcoal define facial and outline details. Robin’s Egg and Mist separate the rain and puddle from the warmer umbrella. Olive, Slate Blue, and Stone appear only in small quantities, so losing one symbol in a large grey field is easy.&lt;/p&gt;

&lt;p&gt;I would therefore use two material groups:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;large open trays for colors 1–6;&lt;/li&gt;
&lt;li&gt;small labelled cups for colors 7–16.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keep the printed color key beside the small cups. Similar dark neutrals are much easier to confuse when their names are remembered but their numbers are not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give every board a permanent address
&lt;/h2&gt;

&lt;p&gt;Name the boards before placing the first bead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A1  A2  A3
B1  B2  B3
C1  C2  C3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Write the same address on a removable note under each physical board. The complete map retains the original 87×87 coordinates, with thicker lines after columns 29 and 58 and rows 29 and 58. Those lines are not decorative; they are the hand-off points between boards.&lt;/p&gt;

&lt;p&gt;For each shared edge, copy a four-cell-wide inspection strip onto scrap paper. For example, the A2/B2 seam check should include the final two rows of A2 and the first two rows of B2. A four-row strip catches more mistakes than comparing only the two touching rows because it preserves the direction of diagonals and umbrella ribs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build anchors before filling large areas
&lt;/h2&gt;

&lt;p&gt;This design has broad regions of Dark Grey, Honey, and Creme. Filling those blocks first feels efficient, but it removes the landmarks that make counting reliable.&lt;/p&gt;

&lt;p&gt;Use this order instead:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;place the umbrella’s outer curve and the main rib intersections;&lt;/li&gt;
&lt;li&gt;mark the eyes, nose, belly symbols, feet, and umbrella handle;&lt;/li&gt;
&lt;li&gt;place the isolated raindrops and the ends of the puddle;&lt;/li&gt;
&lt;li&gt;complete the character’s outer contour;&lt;/li&gt;
&lt;li&gt;fill the large Dark Grey, Honey, and Creme regions last.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The isolated rain marks are especially useful anchors. Because they sit in empty cells, a one-column error is obvious there but can disappear inside the body.&lt;/p&gt;

&lt;p&gt;Work in short runs of five or ten cells and stop at a symbol change. Do not count a continuous row of grey as one long task. Resetting the count at each contour change prevents an early mistake from moving the rest of the row.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat each seam as a small independent pattern
&lt;/h2&gt;

&lt;p&gt;Before moving from one board to the next, perform three checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;compare the last two rows or columns with the numbered map;&lt;/li&gt;
&lt;li&gt;verify that every contour crossing reaches the same coordinate on both boards;&lt;/li&gt;
&lt;li&gt;check that empty cells remain empty, particularly around the umbrella and raindrops.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The wide canopy crosses both vertical board boundaries, so its curved edge is the best seam indicator in the top row of boards. The character body and belly cross the lower boundaries. If those outlines meet correctly, the large interior fills are unlikely to drift.&lt;/p&gt;

&lt;p&gt;Photograph each finished, unheated board from directly above. The photo is not proof that the full assembly is correct, but it gives you a stable reference if a bead is knocked loose while another board is being checked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test heat before committing nine boards
&lt;/h2&gt;

&lt;p&gt;Dark and pale beads can appear equally placed but react differently under the same heat and pressure. Make a small test swatch containing Dark Grey, Honey, Creme, Cheddar, Mist, and Light Brown. Use the same iron, paper, surface, temperature, and pressing time intended for the final piece.&lt;/p&gt;

&lt;p&gt;Look for three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hole closure is similar across light and dark colors;&lt;/li&gt;
&lt;li&gt;the swatch stays flat after cooling under weight;&lt;/li&gt;
&lt;li&gt;edge beads remain joined without spreading so far that board alignment becomes difficult.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not heat a board just because it is complete. First dry-align all nine unheated boards, inspect every shared edge, and confirm the outer silhouette from a few steps away. If the final method involves heating separate sections, test that exact seam method on spare beads before applying it to the pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  A compact build checklist
&lt;/h2&gt;

&lt;p&gt;Before placement:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;print the PDF at 100% scale;&lt;/li&gt;
&lt;li&gt;label all nine boards;&lt;/li&gt;
&lt;li&gt;sort colors by number;&lt;/li&gt;
&lt;li&gt;reserve two bags of Dark Grey;&lt;/li&gt;
&lt;li&gt;prepare seam strips and a row counter.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before heating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;verify the facial anchors and umbrella ribs;&lt;/li&gt;
&lt;li&gt;compare all twelve shared board edges;&lt;/li&gt;
&lt;li&gt;confirm isolated raindrops against their coordinates;&lt;/li&gt;
&lt;li&gt;dry-align the full 3×3 layout;&lt;/li&gt;
&lt;li&gt;complete a heat swatch with both dark and pale colors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same board-first method works for any large printable fuse-bead pattern. The important idea is to move uncertainty forward: materials, coordinates, seams, and heat behavior should all be settled before the piece becomes difficult to correct.&lt;/p&gt;

&lt;p&gt;The matching PDF workflow and other printable designs are collected in the &lt;a href="https://toonbead.com/patterns" rel="noopener noreferrer"&gt;Toonbead printable pattern library&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>design</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
