<?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: FigCanvas</title>
    <description>The latest articles on DEV Community by FigCanvas (@figcanvas).</description>
    <link>https://dev.to/figcanvas</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3928140%2F5f9364c0-b3f8-49f6-b17d-d3c49ebd3814.png</url>
      <title>DEV Community: FigCanvas</title>
      <link>https://dev.to/figcanvas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/figcanvas"/>
    <language>en</language>
    <item>
      <title>A repeatable workflow for paper figures so you stop redrawing them every revision</title>
      <dc:creator>FigCanvas</dc:creator>
      <pubDate>Sun, 31 May 2026 02:24:15 +0000</pubDate>
      <link>https://dev.to/figcanvas/a-repeatable-workflow-for-paper-figures-so-you-stop-redrawing-them-every-revision-482h</link>
      <guid>https://dev.to/figcanvas/a-repeatable-workflow-for-paper-figures-so-you-stop-redrawing-them-every-revision-482h</guid>
      <description>&lt;p&gt;If you've shipped a paper, you know the figure tax: you build a beautiful schematic, a reviewer asks you to move one box, and you spend an afternoon re-aligning everything by hand. Do that across three revisions and you've spent more time nudging vectors than running the analysis.&lt;/p&gt;

&lt;p&gt;I started treating figures the way I treat code: as something that should be &lt;strong&gt;regenerable from a source&lt;/strong&gt;, not hand-crafted once and patched forever. Here's the workflow that stuck.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Write the figure as text first
&lt;/h2&gt;

&lt;p&gt;Before opening any drawing tool, I write the figure as a plain description in the repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ligand -&amp;gt; receptor (binding)
receptor -&amp;gt; kinase (activation)
kinase -&amp;gt; targetA, targetB (phosphorylation)
targetA -| receptor (inhibition, feedback)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This forces the logic to be explicit. If you can't write the relationships down cleanly, the figure isn't ready — and that's a science problem, not a drawing problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Generate a first draft instead of starting from a blank canvas
&lt;/h2&gt;

&lt;p&gt;I feed that description into a tool that will &lt;a href="https://figcanvas.com/" rel="noopener noreferrer"&gt;create scientific figures with AI&lt;/a&gt; and get a laid-out first draft. The point isn't "AI does my figure." The point is the boring geometry — consistent boxes, even spacing, arrow routing — is done before I start, so my time goes into the parts that need judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Keep the output editable and vector
&lt;/h2&gt;

&lt;p&gt;The non-negotiable: the result has to be &lt;strong&gt;editable vector&lt;/strong&gt;, not a flattened PNG. When the reviewer asks to move a box, I move a box. When a journal wants a different size, it scales without turning into mush.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Treat revisions as diffs
&lt;/h2&gt;

&lt;p&gt;Because the source description lives in the repo, "revision 2" is a diff, not a rebuild. I change the text, regenerate, fix the few labels that matter, export. Twenty minutes instead of an afternoon.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this doesn't solve
&lt;/h2&gt;

&lt;p&gt;It won't make a bad figure good — encoding, color logic, and what you choose to show are still on you. And the first draft always needs cleanup; anyone promising one-click publication figures is selling something.&lt;/p&gt;

&lt;p&gt;But moving the &lt;em&gt;source of truth&lt;/em&gt; from "a fragile vector file" to "a text description plus a generator" changed figures from a dreaded last step into something I can iterate on as fast as I iterate on the writing.&lt;/p&gt;

&lt;p&gt;How do you handle figure revisions? Still hand-editing in Illustrator, or have you found a more reproducible setup?&lt;/p&gt;

</description>
      <category>research</category>
      <category>productivity</category>
      <category>ai</category>
      <category>datascience</category>
    </item>
    <item>
      <title>How we test color palettes before they ship in scientific figures</title>
      <dc:creator>FigCanvas</dc:creator>
      <pubDate>Wed, 27 May 2026 00:57:06 +0000</pubDate>
      <link>https://dev.to/figcanvas/how-we-test-color-palettes-before-they-ship-in-scientific-figures-148j</link>
      <guid>https://dev.to/figcanvas/how-we-test-color-palettes-before-they-ship-in-scientific-figures-148j</guid>
      <description>&lt;p&gt;The journals don't reject papers because the palette is wrong. They just give you another revision round, and the senior reviewer writes "figures are difficult to read in print." Same outcome, slower.&lt;/p&gt;

&lt;p&gt;We work on FigCanvas, an AI tool for scientific figures, so we end up looking at a &lt;em&gt;lot&lt;/em&gt; of bad palettes. After a few hundred of them we built a checklist for testing a palette before any plot using it ever ships. Most of it is engineering-style: deterministic, runnable, fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four tests that catch ~90% of palette failures
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Colorblind simulation, not "ask someone with deuteranopia"
&lt;/h3&gt;

&lt;p&gt;The most common test people do is "send the figure to a friend." This is fine and you should still do it. But it's not a unit test — your friend isn't going to look at every iteration.&lt;/p&gt;

&lt;p&gt;Run the palette through a deterministic simulator first. For each color in the palette, compute the deuteranopia and protanopia versions (these cover ~95% of the colorblind population). Then check pairwise distance in CIELAB. If any two colors collapse to a distance under ~10 in either simulation, the palette is broken — pick another.&lt;/p&gt;

&lt;p&gt;A few tools that do this server-side: &lt;code&gt;colorspace&lt;/code&gt; in R has &lt;code&gt;deutan()&lt;/code&gt; / &lt;code&gt;protan()&lt;/code&gt;; in Python, &lt;code&gt;colorblind&lt;/code&gt; or &lt;code&gt;daltonize&lt;/code&gt;. You can hand-roll the transform from the Brettel/Viénot matrices in about 20 lines.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Grayscale fallback
&lt;/h3&gt;

&lt;p&gt;A surprising number of reviewers print papers. A larger number of journals still publish print editions. If two colors in your palette collapse to similar lightness, they will be indistinguishable when the journal's production team rasters everything to grayscale for proofing.&lt;/p&gt;

&lt;p&gt;Test it the dumb way: take a 1×N strip of swatches, desaturate, look. Or compute the L* channel for each and make sure the spread is &amp;gt;5 between adjacent categorical colors.&lt;/p&gt;

&lt;p&gt;Both Okabe-Ito and viridis pass this. Most "I built a custom palette for our lab" palettes fail.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Perceptual uniformity (continuous only)
&lt;/h3&gt;

&lt;p&gt;For continuous scales — heatmaps, density plots, anything with a colorbar — the palette needs to be perceptually uniform. Equal numerical steps should look like equal visual steps. Rainbow / jet famously aren't, which is why every modern visualization library has moved away from them as default.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;viridis&lt;/code&gt;, &lt;code&gt;magma&lt;/code&gt;, &lt;code&gt;inferno&lt;/code&gt;, &lt;code&gt;cividis&lt;/code&gt;, and &lt;code&gt;plasma&lt;/code&gt; all pass. So does &lt;code&gt;mako&lt;/code&gt; from seaborn. The deltaE-2000 metric is the right one if you want to check programmatically.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Shape stress test
&lt;/h3&gt;

&lt;p&gt;Palettes that look fine as 200×200 swatches in a swatch grid often collapse when applied to actual chart shapes. A small scatter point picks up far less color than a large bar. Lines on a noisy background read worse than filled areas.&lt;/p&gt;

&lt;p&gt;We test every palette on five shapes before shipping:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bar chart (large filled regions)&lt;/li&gt;
&lt;li&gt;scatter (small isolated points)&lt;/li&gt;
&lt;li&gt;line plot (thin lines)&lt;/li&gt;
&lt;li&gt;heatmap (large continuous gradient)&lt;/li&gt;
&lt;li&gt;volcano plot (mixed sparse + dense)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This catches palettes where, e.g., the "light blue" you picked reads fine in a bar but vanishes as scatter points against the gridlines.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we ended up shipping
&lt;/h2&gt;

&lt;p&gt;After enough manual testing we wrapped this into a small in-browser tool — a &lt;a href="https://figcanvas.com/tools/scientific-color-palette-generator" rel="noopener noreferrer"&gt;figure tool for researchers&lt;/a&gt; that runs all four tests on any palette you paste in, including Okabe-Ito, viridis variants, and Nature/Science-style limited sets. The interesting part is the preview pane: it renders each candidate palette on all five shape types simultaneously, so you can see at a glance which palette holds up under your actual chart type.&lt;/p&gt;

&lt;p&gt;This is not a deep technical contribution. It's tooling around the boring testing step that everyone skips because it takes 20 minutes by hand. Compressed to 5 seconds, it suddenly becomes worth doing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reviewer time is the bottleneck
&lt;/h2&gt;

&lt;p&gt;The reason any of this matters is that figure review costs reviewer time, which is the most expensive resource in the academic publication pipeline. A figure that's wrong by half a deltaE in deuteranopia simulation is going to send a paper back for one more revision round. That's two weeks. For one color choice.&lt;/p&gt;

&lt;p&gt;Palette testing is the cheapest leverage point in scientific figure work. It's also the one most authors skip because the existing tooling is annoying. Most of the engineering value of "AI for science" right now is just removing the annoyance from steps that, in principle, were always doable.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run pairwise colorblind simulation, fail if any pair collapses&lt;/li&gt;
&lt;li&gt;Desaturate, fail if L* spread is too narrow&lt;/li&gt;
&lt;li&gt;For continuous palettes, check perceptual uniformity (deltaE-2000)&lt;/li&gt;
&lt;li&gt;Render on all five chart shape types before shipping&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Doing this once per palette saves us at least one revision round per paper we touch. Easy ROI.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>dataviz</category>
      <category>research</category>
      <category>a11y</category>
    </item>
    <item>
      <title>Why text-to-image AI keeps failing at scientific figures (and what actually works)</title>
      <dc:creator>FigCanvas</dc:creator>
      <pubDate>Wed, 13 May 2026 00:12:02 +0000</pubDate>
      <link>https://dev.to/figcanvas/why-text-to-image-ai-keeps-failing-at-scientific-figures-and-what-actually-works-2m9e</link>
      <guid>https://dev.to/figcanvas/why-text-to-image-ai-keeps-failing-at-scientific-figures-and-what-actually-works-2m9e</guid>
      <description>&lt;p&gt;Over the past month I've been trying to replace my "spend half a day in Illustrator drafting figures" workflow with AI tools. I tried Midjourney, GPT-Image-1, DALL-E, Stable Diffusion fine-tunes, generic diagram-from-text tools, and finally a purpose-built &lt;a href="https://figcanvas.com/" rel="noopener noreferrer"&gt;scientific illustration tool&lt;/a&gt;. Only the last one actually worked for figures destined for a peer-reviewed paper. This post is the autopsy on why.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three failure modes of generic image AI on figures
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Label hallucinations
&lt;/h3&gt;

&lt;p&gt;You ask for a figure showing "PCR cycling steps: denaturation, annealing, extension," and the model writes "Denaturition", "Aneling", and "Estention" inside the boxes. Or it gets the words right but spells "DNA" as a five-letter blob. This happens because image-gen models treat text as pixels; they don't know it's text.&lt;/p&gt;

&lt;p&gt;Workarounds people try:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate the image, then edit text in Photoshop. Works, but it's manual and removes the speed advantage.&lt;/li&gt;
&lt;li&gt;Use models with stronger text rendering (Flux 1.1 Pro, Ideogram). Better, but still wrong ~20% of the time, and you don't see which 20% until you've already exported.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a journal figure, the failure mode is invisible until a reviewer screenshots a mislabeled box and tells you to redo Figure 3.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Layouts don't iterate
&lt;/h3&gt;

&lt;p&gt;This is the real killer. Say the model gives you a four-panel figure: A, B, C, D. Reviewer asks: "Add a fifth panel showing the control condition."&lt;/p&gt;

&lt;p&gt;In pixels, there is no "add a panel." The only way to edit is to re-prompt. The new image will not preserve the exact layout, colors, fonts, or sizing of panels A-D. Every revision starts from scratch.&lt;/p&gt;

&lt;p&gt;Real-world cost: in a recent paper I had three revisions over six months. With pixel-AI tools, that's three from-scratch redraws. With Illustrator, it's three quick edits. With a structured-canvas tool that holds the figure as boxes/arrows/labels under the hood, it's three "add panel E" instructions, no redrawing.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Wrong visual vocabulary
&lt;/h3&gt;

&lt;p&gt;General image AIs are trained on stock photos, art, memes — not on scientific publications. The "diagram" they produce is the cartoony kind you'd see on a tech blog: 3D glossy boxes, comic-style arrows, gradient fills. Journals expect 2D, line-weight-controlled, color-restrained, vector outputs.&lt;/p&gt;

&lt;p&gt;You can prompt your way around some of this ("flat, minimal, journal style"), but the visual primitives the model knows are still pop-art primitives. It doesn't know what a cell membrane looks like in a methods schematic, or what a Sankey diagram for ecological flow should look like.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually works: a structured canvas with science-aware primitives
&lt;/h2&gt;

&lt;p&gt;The pattern that breaks all three problems: keep the figure as a &lt;strong&gt;structured representation&lt;/strong&gt; (boxes, arrows, labels, panels) underneath the natural-language prompt, and only render to pixels at export time.&lt;/p&gt;

&lt;p&gt;That way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text is text. It can't hallucinate spelling.&lt;/li&gt;
&lt;li&gt;"Add panel E" is a real operation on the structure.&lt;/li&gt;
&lt;li&gt;The library of primitives can be science-shaped: receptor cartoons, organelles, pathway arrows, multi-panel grids with consistent spacing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tool I landed on after the experiment is &lt;a href="https://figcanvas.com/" rel="noopener noreferrer"&gt;figcanvas.com&lt;/a&gt; — paste a Methods paragraph, get a structured first draft, iterate per panel with plain English, export vector. The first-draft quality isn't perfect (it sometimes drops a label when reshuffling), but the iteration loop is the win: I went from "empty Illustrator file" to a clean methods schematic in 25 minutes that used to be a half-day job. More importantly, when the second reviewer asks for changes, those changes take 10 minutes instead of two hours.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;Image-gen AI is great for thumbnails, blog hero images, and concept art. For scientific figures it's a trap because:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Text inside images is unreliable.&lt;/li&gt;
&lt;li&gt;Edits aren't compositional.&lt;/li&gt;
&lt;li&gt;The visual style is wrong for journals.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pick a tool that treats the figure as structure, not pixels.&lt;/p&gt;




&lt;p&gt;If you write papers and resent every minute spent in Illustrator, the structured-canvas approach is worth a weekend trial. Even if you don't switch tools long-term, you'll learn what the AI tooling actually can and can't do for academic work in 2026.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>science</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
