<?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>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>
    <item>
      <title>A board-by-board method for building an 87 87 white cat bead pattern</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Tue, 28 Jul 2026 15:56:33 +0000</pubDate>
      <link>https://dev.to/congcong/a-board-by-board-method-for-building-an-87x87-white-cat-bead-pattern-1fo3</link>
      <guid>https://dev.to/congcong/a-board-by-board-method-for-building-an-87x87-white-cat-bead-pattern-1fo3</guid>
      <description>&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%2Fuhrltwmq369xoeoacpvw.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%2Fuhrltwmq369xoeoacpvw.png" alt="White cat and red camellia - PDF page 2 artwork reference, not a finished bead piece" width="800" height="1131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PDF page 2: the artwork reference for the subject and color balance. It is not a photograph of a finished fuse bead piece.&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%2Fsp1hvpmlmk6w2twdjfcw.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%2Fsp1hvpmlmk6w2twdjfcw.png" alt="Complete numbered 87 by 87 white cat and camellia bead map from PDF page 1" width="800" height="1131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PDF page 1: the complete numbered placement map. Use this page for exact bead positions and 29 × 29 board boundaries.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A mostly white bead pattern looks forgiving until you start placing it. The silhouette is easy to recognize, but three pale colors can collapse into one under warm room light. The mistakes are rarely dramatic; they are usually a row of White placed where Toasted Marshmallow should have carried the shadow.&lt;/p&gt;

&lt;p&gt;This white cat and camellia pattern is 87×87 cells. It spans nine 29×29 square boards, uses 16 colors, and contains 3,155 beads. The printable pack is three pages: a full view, a numbered placement map, and a material key. Here is the workflow I would use before touching the first peg.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sort by code, not by color name
&lt;/h2&gt;

&lt;p&gt;The four largest groups are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;White: 1,782 beads&lt;/li&gt;
&lt;li&gt;Toasted Marshmallow: 735&lt;/li&gt;
&lt;li&gt;Tomato: 152&lt;/li&gt;
&lt;li&gt;Tan: 115&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;White and Toasted Marshmallow account for almost four fifths of the project. Put them in separate opaque trays and label each tray with both the symbol from the PDF and the color code. Do not rely on visual memory after sunset; pale beads change surprisingly much under yellow light.&lt;/p&gt;

&lt;p&gt;The material list includes an 8% allowance. White needs two bags at that margin, while each of the other major colors fits into one. I still keep a small “unknown” cup beside the board. If a bead rolls away and I cannot identify it immediately, it goes there instead of being guessed back into the pattern.&lt;/p&gt;

&lt;h2&gt;
  
  
  Place the anchors before the white field
&lt;/h2&gt;

&lt;p&gt;Do not begin by filling the largest empty-looking area. Start with the eyes, nose, ear edges, the red camellia, and the dark outline around the flower. These high-contrast landmarks make it obvious if the design has shifted by one column.&lt;/p&gt;

&lt;p&gt;Once the anchors line up with the numbered map, fill the pale regions outward from them. A wrong white bead inside a large white area is hard to notice. A wrong bead beside a black eye or red petal is obvious immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give the nine boards names
&lt;/h2&gt;

&lt;p&gt;Label the 3×3 board layout A1–A3, B1–B3, and C1–C3. Add the same labels to a printed copy of the map. When one board is finished, check only two things before moving on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Compare the final two rows on every shared edge.&lt;/li&gt;
&lt;li&gt;Take one overhead photo in the same orientation as the PDF.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That photo is not for social media. It is a cheap checkpoint. If the next session begins two days later, it tells you which board was finished and whether it was accidentally rotated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat the PDF pages as different tools
&lt;/h2&gt;

&lt;p&gt;The full image is for checking the cat’s pose and balance. The numbered map is for placement. The material table is for shopping and refilling trays. Trying to use the attractive preview as the placement guide is what makes a large project feel harder than it is.&lt;/p&gt;

&lt;p&gt;Small isolated cells deserve a manual check, especially around eyes, whisker roots, and flower edges. In a face, a cluster of three dark beads may carry more identity than a patch of fifty white beads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the iron before the cat
&lt;/h2&gt;

&lt;p&gt;Make a tiny test patch from spare beads. Start with a dry iron at medium heat, always use ironing paper, and move the heat evenly without pressing hard. If the center holes close immediately, reduce the temperature. For a nine-board piece, uneven heat at the outer edges is more dangerous than taking an extra minute.&lt;/p&gt;

&lt;p&gt;Let the piece cool before lifting the paper slowly. If children are involved, the ironing step belongs to an adult.&lt;/p&gt;

&lt;p&gt;The useful part of a large pattern is not the thumbnail. It is the combination of a readable map, board boundaries, exact counts, and a material key. The cat pattern library and its printable workflow are available 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>diy</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Designing a Roblox Player Companion Around Verifiable Information</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Fri, 24 Jul 2026 16:12:59 +0000</pubDate>
      <link>https://dev.to/congcong/designing-a-roblox-player-companion-around-verifiable-information-46il</link>
      <guid>https://dev.to/congcong/designing-a-roblox-player-companion-around-verifiable-information-46il</guid>
      <description>&lt;p&gt;Player guides for a fast-moving Roblox game have a reliability problem: a useful page can become wrong as soon as an update lands.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Merge a Black Hole Companion&lt;/strong&gt;, an independent, unofficial resource for players of XAF Games’ Merge a Black Hole. The project is deliberately scoped around information a guide can stand behind: current game status, codes with a source/verification label, beginner and raid routes, update notes, and small planning tools.&lt;/p&gt;

&lt;p&gt;The central product decision was to separate &lt;em&gt;facts&lt;/em&gt; from &lt;em&gt;assumptions&lt;/em&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A live status surface uses the Roblox Games and Votes APIs rather than copying a number into a page.&lt;/li&gt;
&lt;li&gt;Codes and update notes are labelled by source and verification state instead of being presented as permanent truth.&lt;/li&gt;
&lt;li&gt;The upgrade tools run privately in the browser. They help a player reason about ROI or compare two upgrade paths without requiring an account.&lt;/li&gt;
&lt;li&gt;Pages avoid publishing unverified progression tables, exploits, or fake “community” activity.&lt;/li&gt;
&lt;li&gt;Every important route keeps the unofficial fan-site disclaimer close to the relevant player action and points people back to official links.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That sounds conservative, but it is a better fit for a game whose meta changes often. A companion does not need to pretend it knows every number; it needs to make its evidence clear and help players make a decision with the information currently available.&lt;/p&gt;

&lt;p&gt;The implementation is a small Cloudflare Worker app with server-rendered, indexable guides, JSON-LD, a sitemap, and an Open Graph asset. The hard part is not the framework. It is maintaining the boundary between a useful player tool and an authoritative-looking page with no evidence behind it.&lt;/p&gt;

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

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>Why I Built a Free Printable Bead Pattern Library Instead of a Gallery</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Tue, 21 Jul 2026 16:58:23 +0000</pubDate>
      <link>https://dev.to/congcong/why-i-built-a-free-printable-bead-pattern-library-instead-of-a-gallery-4pe8</link>
      <guid>https://dev.to/congcong/why-i-built-a-free-printable-bead-pattern-library-instead-of-a-gallery-4pe8</guid>
      <description>&lt;h2&gt;
  
  
  A usable craft template needs more than a pretty preview
&lt;/h2&gt;

&lt;p&gt;A lot of digital craft resources stop at the image. They give you a small preview, perhaps a color approximation, and then leave the difficult translation to the person at the pegboard.&lt;/p&gt;

&lt;p&gt;That is fine for inspiration. It is not enough for a pattern someone can actually start, pause, and finish.&lt;/p&gt;

&lt;p&gt;The update I have been working on is a free printable pattern library for Toonbead. Each entry begins as original Toonbead Studio artwork and becomes a deliberately constrained 29 × 29 fuse-bead project. The point is not to generate a large collection of decorative thumbnails. The point is to publish templates with the missing handoff details included.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat the placement map as the source of truth
&lt;/h2&gt;

&lt;p&gt;A finished-looking pattern image is helpful for seeing the result, but it is a weak build instruction. Small colors merge, visual counting is error-prone, and two similar shades can become indistinguishable once the image is printed.&lt;/p&gt;

&lt;p&gt;Each library pattern therefore has a complete numbered placement map. Every colored cell uses the same symbol that appears in the printable PDF and in the material key. That lets the builder work from an unambiguous grid rather than trying to reverse-engineer a scaled-down preview.&lt;/p&gt;

&lt;p&gt;The initial collection deliberately stays at one 29 × 29 board. That constraint is part of the product design: it keeps the project approachable, makes the page honest about the required footprint, and avoids presenting a multi-board undertaking as a quick afternoon craft.&lt;/p&gt;

&lt;h2&gt;
  
  
  Material counts should be measured, not guessed
&lt;/h2&gt;

&lt;p&gt;The next gap in many free patterns is materials. “Use some blue and brown beads” is enough for an illustration, but not enough for someone preparing a project.&lt;/p&gt;

&lt;p&gt;A pattern page should tell the person how many beads it contains, which real palette it maps to, and how to retrieve an exact color-by-color list. In the library, each template includes counted materials and a downloadable CSV with a small spare-bead allowance. The printable PDF is a four-page build document rather than a single poster: overview, board map, symbol key, and material information have different jobs.&lt;/p&gt;

&lt;p&gt;This also creates a useful standard for future templates. A visual has not earned the label “free pattern” merely because it exists as a picture. It should be possible to check the grid, gather materials, and begin without inventing missing instructions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the origin of the artwork clear
&lt;/h2&gt;

&lt;p&gt;The library templates are original Toonbead Studio digital artwork. They are not user submissions, and they are not photographs of completed physical pieces. That disclosure matters because a source artwork and a real-world build are different kinds of evidence.&lt;/p&gt;

&lt;p&gt;Showing the source alongside the bead pattern makes the transformation understandable without pretending that the physical craft has already been completed. It also protects the library from drifting into an opaque feed of generated images with no clue how they became buildable.&lt;/p&gt;

&lt;h2&gt;
  
  
  A template should be a starting point, not a dead end
&lt;/h2&gt;

&lt;p&gt;A useful free template does not need an account, an AI generation, or a credit balance to load. But a builder may still want to change the colors, alter the size, inspect another bead brand, or export the result again.&lt;/p&gt;

&lt;p&gt;That is why the final link in the workflow matters: opening a library template in the Maker transfers a real pattern into a local editing context. Loading, recoloring, resizing, and exporting the public template remain local operations. Optional AI remains separate and requires an explicit choice later; it is not silently attached to a free pattern.&lt;/p&gt;

&lt;p&gt;The result is a smaller promise than “unlimited AI art,” but it is more useful to a maker. A person can select a recognisable project, see the exact work involved, print it, and still adapt it for their own materials.&lt;/p&gt;

&lt;p&gt;The first free library templates, including owl, butterfly, dinosaur, hedgehog, watermelon, cupcake, ghost, flower, star, heart, crown, and alphabet patterns, are available in Toonbead’s Pattern Library: &lt;a href="https://toonbead.com/patterns" rel="noopener noreferrer"&gt;https://toonbead.com/patterns&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>Designing an Own-Voice Consent Flow for an API-First TTS Product</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Sat, 18 Jul 2026 16:03:26 +0000</pubDate>
      <link>https://dev.to/congcong/designing-an-own-voice-consent-flow-for-an-api-first-tts-product-207c</link>
      <guid>https://dev.to/congcong/designing-an-own-voice-consent-flow-for-an-api-first-tts-product-207c</guid>
      <description>&lt;h2&gt;
  
  
  Voice cloning is a product-design problem before it is a model problem
&lt;/h2&gt;

&lt;p&gt;It is tempting to describe voice cloning as a simple pipeline: collect a sample, create a voice, synthesize some text. That description is technically tidy, but it skips the part that determines whether the workflow deserves trust.&lt;/p&gt;

&lt;p&gt;A voice is not merely another media asset. It is recognisable, personal, and easy to mistake for identity. So the interface has to make the boundaries of the system legible before anyone reaches the satisfying moment of pressing “generate.”&lt;/p&gt;

&lt;p&gt;This is the set of constraints I use when designing an own-voice text-to-speech workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  Put consent inside the action, not after it
&lt;/h2&gt;

&lt;p&gt;A generic terms checkbox at account creation is weak context. The meaningful decision happens when a person uploads or records the sample that will become a reusable voice.&lt;/p&gt;

&lt;p&gt;The flow should therefore make three things concrete at that point:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user is supplying their own voice, or has the authority to use it.&lt;/li&gt;
&lt;li&gt;The sample is being used to create a synthetic voice for the requested purpose.&lt;/li&gt;
&lt;li&gt;The user understands that generated speech is a new output, not a recording of something they said.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A short spoken verification phrase is useful here. It makes the experience more intentional than a silent upload, and it gives the product a natural place to explain the boundary. The goal is not to pretend that one phrase solves every identity question. It is to avoid an interface that treats the source voice as an anonymous file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate the clone from the script
&lt;/h2&gt;

&lt;p&gt;There are two different decisions in this category of tool. The first is whether a voice should be created. The second is what text that voice should say.&lt;/p&gt;

&lt;p&gt;Keeping those stages separate improves both the user experience and the auditability of the product. A creation step can focus on sample quality, consent, and what is retained. A synthesis step can focus on pronunciation, pacing, language, and the actual script. Combining them in one opaque button makes it harder for a user to understand what happened and harder for the product team to set responsible defaults.&lt;/p&gt;

&lt;p&gt;This distinction also makes errors easier to communicate. “We could not create the voice from this sample” and “we could not synthesize this script” are different failures. They should not collapse into a vague loading state or, worse, a plausible-looking fake result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make failure honest
&lt;/h2&gt;

&lt;p&gt;Generative products are often judged by their happy path, but trust is built in the unhappy path. If the voice provider is unavailable, the product should return a clear temporary error. If a sample is too short or unusable, explain the next useful action. If the request cannot meet the product's consent rules, stop before generation.&lt;/p&gt;

&lt;p&gt;That may feel less magical than silently substituting a generic voice, but it respects the user. A workflow that creates media should always make the origin of its output clear.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy is part of the interface
&lt;/h2&gt;

&lt;p&gt;People reasonably want to know what happens to a sample after upload. The answer cannot live only in a policy page. The UI should say, in plain language, what the current action sends, what is processed remotely, and what the user can expect to keep locally.&lt;/p&gt;

&lt;p&gt;For small creator tools, clarity has another benefit: it prevents product scope from drifting toward “clone any voice” as a growth shortcut. A focused own-voice workflow is not just a safer message; it gives the interface a coherent job to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  The best use case is often continuity
&lt;/h2&gt;

&lt;p&gt;The most grounded use cases are practical: recording accessible narration in a familiar voice, drafting a corrected pickup after a recording session, or turning a prepared script into an audio version without losing the creator's identity.&lt;/p&gt;

&lt;p&gt;Those are not reasons to remove safeguards. They are reasons to build safeguards into the workflow people actually use. When a tool asks for explicit intent, separates creation from synthesis, and reports failure honestly, it feels less like a trick and more like a piece of creator infrastructure.&lt;/p&gt;

&lt;p&gt;I am applying these constraints in ClonaTuVoz, a Spanish-first own-voice cloning workspace: &lt;a href="https://clonatuvoz.com/" rel="noopener noreferrer"&gt;https://clonatuvoz.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>ChatWorkSkin: a free Codex skin builder with automatic macOS and Windows installers</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Fri, 17 Jul 2026 18:29:34 +0000</pubDate>
      <link>https://dev.to/congcong/chatworkskin-a-free-codex-skin-builder-with-automatic-macos-and-windows-installers-47dn</link>
      <guid>https://dev.to/congcong/chatworkskin-a-free-codex-skin-builder-with-automatic-macos-and-windows-installers-47dn</guid>
      <description>&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%2Fhcjyjed46lc4ehcay55m.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%2Fhcjyjed46lc4ehcay55m.png" alt="ChatWorkSkin current homepage" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ChatWorkSkin is now focused on one simple workflow: build a free Codex skin in the browser, download a layered .dreamskin package, and install it with a guided macOS or Windows path.&lt;/p&gt;

&lt;p&gt;The current homepage positions it around these keywords: free Codex skin, ChatGPT skin for coding, Codex desktop theme, AI coding workspace theme, and automatic Codex skin installer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the page offers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A local visual builder for layered .dreamskin themes&lt;/li&gt;
&lt;li&gt;Built-in original artwork presets for Codex desktop customization&lt;/li&gt;
&lt;li&gt;A live Codex-style preview before installing&lt;/li&gt;
&lt;li&gt;Automatic installer guidance for macOS and Windows&lt;/li&gt;
&lt;li&gt;A restore path that keeps native Codex controls and app files intact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key point is that the skin is not a fake screenshot overlay. It is built for a coding workspace where the sidebar, project picker, tasks, menus, and composer still need to work normally.&lt;/p&gt;

&lt;p&gt;Try it here: &lt;a href="https://chatworkskin.com/" rel="noopener noreferrer"&gt;https://chatworkskin.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
    </item>
    <item>
      <title>Correction: ChatWorkSkin 1.2.2 latest UI uses the new fine-tune panel</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Fri, 17 Jul 2026 07:23:07 +0000</pubDate>
      <link>https://dev.to/congcong/correction-chatworkskin-122-latest-ui-uses-the-new-fine-tune-panel-2ba2</link>
      <guid>https://dev.to/congcong/correction-chatworkskin-122-latest-ui-uses-the-new-fine-tune-panel-2ba2</guid>
      <description>&lt;p&gt;I reposted ChatWorkSkin with the correct latest UI screenshot.&lt;/p&gt;

&lt;p&gt;The current 1.2.2 build is about layered .dreamskin themes and native Codex controls, but the visual detail that matters is the new fine-tune panel. It shows optional foreground layers, theme name, theme copy, colors, and focal point controls in the current studio UI.&lt;/p&gt;

&lt;p&gt;This replaces the older workbench screenshot I shared earlier.&lt;/p&gt;

&lt;p&gt;Current product page: &lt;a href="https://chatworkskin.com/" rel="noopener noreferrer"&gt;https://chatworkskin.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Search-intent mirror: &lt;a href="https://chatgptskin.org/" rel="noopener noreferrer"&gt;https://chatgptskin.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Keywords: Codex skin, Codex theme, Codex desktop customization, AI coding workspace theme, dreamskin theme package.&lt;/p&gt;

</description>
      <category>showdev</category>
    </item>
    <item>
      <title>ChatWorkSkin update: a visual Codex skin studio with layered .dreamskin packages</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Fri, 17 Jul 2026 06:45:38 +0000</pubDate>
      <link>https://dev.to/congcong/chatworkskin-update-a-visual-codex-skin-studio-with-layered-dreamskin-packages-2b80</link>
      <guid>https://dev.to/congcong/chatworkskin-update-a-visual-codex-skin-studio-with-layered-dreamskin-packages-2b80</guid>
      <description>&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%2Fxngxtidcfhjk3pc10qcv.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%2Fxngxtidcfhjk3pc10qcv.jpg" alt="ChatWorkSkin Codex theme preview" width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I pushed a new visual update for ChatWorkSkin / Codex Dream Skin. The project is still focused on one narrow job: make a Codex desktop workspace feel personal without breaking native controls.&lt;/p&gt;

&lt;p&gt;The latest version is no longer just a background swap. It is a small local studio for Codex skins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;choose original artwork&lt;/li&gt;
&lt;li&gt;preview the Codex desktop theme before installing&lt;/li&gt;
&lt;li&gt;export a verifiable layered .dreamskin package&lt;/li&gt;
&lt;li&gt;install on macOS or Windows with a prefilled Codex task&lt;/li&gt;
&lt;li&gt;keep the native sidebar, task list, input box, and restore path intact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The product angle is for people searching for a Codex skin, Codex theme, Codex desktop customization, or an AI coding workspace theme.&lt;/p&gt;

&lt;p&gt;Try it here: &lt;a href="https://chatworkskin.com/" rel="noopener noreferrer"&gt;https://chatworkskin.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Search-intent mirror: &lt;a href="https://chatgptskin.org/" rel="noopener noreferrer"&gt;https://chatgptskin.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The implementation deliberately avoids modifying the official app package. The skin package and install flow stay reversible so the desktop workspace can be customized without turning the app into a fragile fork.&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
    <item>
      <title>Building a free Codex skin installer without touching the official app package</title>
      <dc:creator>qingwancong</dc:creator>
      <pubDate>Thu, 16 Jul 2026 16:12:58 +0000</pubDate>
      <link>https://dev.to/congcong/building-a-free-codex-skin-installer-without-touching-the-official-app-package-49lm</link>
      <guid>https://dev.to/congcong/building-a-free-codex-skin-installer-without-touching-the-official-app-package-49lm</guid>
      <description>&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%2F72v74vtn2pfoygc3edui.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%2F72v74vtn2pfoygc3edui.png" alt="Codex Dream Skin preview" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I shipped a small tool for a very specific search intent: people looking for a &lt;strong&gt;ChatGPT skin&lt;/strong&gt; or a &lt;strong&gt;free Codex skin&lt;/strong&gt; for their coding workspace.&lt;/p&gt;

&lt;p&gt;The result is &lt;a href="https://chatgptskin.org/" rel="noopener noreferrer"&gt;Codex Dream Skin&lt;/a&gt;: a free Codex desktop theme with original artwork, a local preview, and an automatic installer for macOS and Windows.&lt;/p&gt;

&lt;p&gt;The important constraint was not visual. It was safety.&lt;/p&gt;

&lt;p&gt;A theme tool for a coding assistant should not ask users to replace the official app, patch an app bundle, edit &lt;code&gt;app.asar&lt;/code&gt;, or take ownership of protected Windows app files. That kind of shortcut may work once, but it is brittle across updates and hard to restore.&lt;/p&gt;

&lt;p&gt;So I built the workflow around a different rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Change the mood around Codex, but keep Codex itself intact.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What the site does
&lt;/h2&gt;

&lt;p&gt;The public page is built around the keywords already used on the website: &lt;strong&gt;Codex skin&lt;/strong&gt;, &lt;strong&gt;Codex theme&lt;/strong&gt;, &lt;strong&gt;free Codex skin&lt;/strong&gt;, &lt;strong&gt;automatic Codex skin installer&lt;/strong&gt;, &lt;strong&gt;Codex desktop customization&lt;/strong&gt;, &lt;strong&gt;ChatGPT coding theme&lt;/strong&gt;, &lt;strong&gt;Codex macOS&lt;/strong&gt;, and &lt;strong&gt;Codex Windows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The flow is deliberately simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose one of the bundled original themes.&lt;/li&gt;
&lt;li&gt;Preview the Codex skin in the browser.&lt;/li&gt;
&lt;li&gt;Prepare the one-command installer.&lt;/li&gt;
&lt;li&gt;Paste it into Terminal or PowerShell.&lt;/li&gt;
&lt;li&gt;Restore the original Codex appearance whenever needed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The tool also supports a custom-image path on macOS, so users can turn their own artwork into a Codex desktop theme.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why native controls matter
&lt;/h2&gt;

&lt;p&gt;A lot of visual demos can fake a full app with a screenshot. That is not useful for daily work.&lt;/p&gt;

&lt;p&gt;Codex Dream Skin keeps the real Codex controls in place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sidebar&lt;/li&gt;
&lt;li&gt;task list&lt;/li&gt;
&lt;li&gt;project picker&lt;/li&gt;
&lt;li&gt;menus&lt;/li&gt;
&lt;li&gt;composer&lt;/li&gt;
&lt;li&gt;restore path&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The theme changes the surrounding visual layer and background treatment. It does not replace the workflow with a static mockup.&lt;/p&gt;

&lt;h2&gt;
  
  
  The safety boundary
&lt;/h2&gt;

&lt;p&gt;The installer is designed around a local loopback session and a reversible restore step.&lt;/p&gt;

&lt;p&gt;It does not modify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the official Codex app package&lt;/li&gt;
&lt;li&gt;&lt;code&gt;app.asar&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;WindowsApps files&lt;/li&gt;
&lt;li&gt;code signatures&lt;/li&gt;
&lt;li&gt;conversation data&lt;/li&gt;
&lt;li&gt;login state&lt;/li&gt;
&lt;li&gt;API keys or model-provider configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point matters. A skin should stay separate from credentials and model routing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I also use ChatWorkSkin
&lt;/h2&gt;

&lt;p&gt;The search-domain angle is &lt;a href="https://chatgptskin.org/" rel="noopener noreferrer"&gt;chatgptskin.org&lt;/a&gt;: it is for people typing things like “ChatGPT skin”, “free ChatGPT skin”, or “free Codex skin”.&lt;/p&gt;

&lt;p&gt;The brand/workspace angle is &lt;a href="https://chatworkskin.com/" rel="noopener noreferrer"&gt;chatworkskin.com&lt;/a&gt;: it frames the same project as &lt;strong&gt;AI coding workspace theme&lt;/strong&gt; and &lt;strong&gt;Codex desktop customization&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Same product, two discovery angles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current state
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Free to use&lt;/li&gt;
&lt;li&gt;No account required&lt;/li&gt;
&lt;li&gt;macOS and Windows installers&lt;/li&gt;
&lt;li&gt;Built-in original themes&lt;/li&gt;
&lt;li&gt;Custom image workflow on macOS&lt;/li&gt;
&lt;li&gt;One-command install&lt;/li&gt;
&lt;li&gt;One-click restore&lt;/li&gt;
&lt;li&gt;Unofficial, not affiliated with OpenAI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you use Codex Desktop and want the workspace to feel less default, the early version is here:&lt;/p&gt;

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

</description>
      <category>opensource</category>
    </item>
  </channel>
</rss>
