Skip to content

Discovery is hard enough. Expressing it shouldn’t be.

00.51.010−210−1100101102 Concentration (µM) Response (normalised) EC₅₀ = 6.0 µM Measured, mean ± s.d. (n = 3) Four-parameter Hill fit Legend 00.51.010−210−1100101102 Concentration (µM) Measured (n = 3) Hill fit

Tavotto is an open-source editor for scientific figures. It lets you finish the figure your script drew without rewriting the script. This page is about why we build it, and how you can help.

Fig. 1 Dose-response, illustrative data drawn for this page. Points, mean ± s.d. of three replicates; line, four-parameter Hill fit. The legend is selected: in Tavotto, everything around the data can be shaped.

Read on
IIThe problemII / VIII

The last millimetre shouldn’t take another night.

Every published figure carries hours that nobody sees.

A legend over the last data point, labels a size too small, panel (b) a millimetre out of line. Each fix is another edit, another run, another look.

Five runs from one evening, for a legend that moved three millimetres. An illustrative reconstruction, not data from any user.

IIIThe principleIII / VIII

Keep the source. Shape the figure.

Tavotto opens the figure your script has already drawn. You shape it directly; the script stays as it was.

In every step, the curves, points and error bars stay exactly where your script put them. Tavotto makes a figure easier to shape, never its data easier to change.

(a)00.51.010−210−1100101102 Concentration (µM) Response (b)0501000244872 Time (h) Viability (%) Control Treated

As drawn by fig_dose.py, no changes yetLegend moved to the upper left · data unchangedAxis labels 7 → 9 pt · data unchanged Panel (b) aligned to (a), labels added · script and data unchanged

fig_dose.pyunchanged
ax_a.errorbar(conc, mean, yerr=sd, fmt="o")
ax_a.plot(x, hill(x, *popt))
ax_b.plot(hours, control, "o-", label="Control")
ax_b.plot(hours, treated, "o--", label="Treated")
ax_b.legend()
Kept beside the figureoverrides
  • Nothing yet.
  • (b) legendupper left
  • axis labels7 → 9 pt
  • (b) panel top= (a)
  • panel labels(a) (b)
IVThe invisible workIV / VIII

Good tools take work you may never see.

A figure editor is mostly made of things that should never be noticed. Three of them shape everything we do.

Mission 01ongoing

Make every figure easier to open.

We keep improving how Tavotto adapts to Python environments, prepares dependencies, and copes with real scripts as researchers actually write them.

Mission 02ongoing

Make every edit worth keeping.

We keep improving how edits are kept, saved and restored, so the figure you come back to is the figure you left.

Mission 03ongoing

Make every export faithful.

We keep improving fonts, layout, formats and export quality, so what reaches the journal is what you saw.

Much of this work is invisible when everything goes right. All of it matters.

VThe people behind the workV / VIII

A note from the maintainer.

Tavotto began with a very ordinary frustration. The script has drawn the figure and the result is settled, yet moving one legend or changing one font size still means editing code and running it again, and again. I want to take that repetition out of research work, so that good results can be shown freely and precisely. Doing this well takes a long time, and I intend to keep doing it carefully.

What we’ve been working on

v0.18

Saving writes the layout into your project, and a project file changed by another program is never silently overwritten.

Release notes ↗
v0.17

Rendering and export moved to RenderCore; mirrored and semi-transparent panels now stay vector; the first desktop app for Intel Macs.

Release notes ↗
v0.16

Missing packages are prepared before the first run, all at once, and every exported file is reopened and checked.

Release notes ↗
All releases ↗
VIThe invitationVI / VIII

Help us keep building.

The open-source edition of Tavotto will remain free. Your support helps us continue maintaining and improving it.

Where your support goes

Development & maintenance

Keeping Tavotto under steady development: fixing problems and improving how it feels to use.

Compatibility & testing

Checking how Tavotto behaves on different operating systems, Python environments and real research scripts.

Infrastructure & distribution

Keeping the releases, downloads and project infrastructure that Tavotto needs running.

One-time

Give once on Ko-fi(opens ko-fi.com)

Any amount from $3; $10 or more in one payment adds your avatar to the supporters wall.

Monthly

Support monthly on Ko-fi(opens ko-fi.com in a new tab)
  • Reader$3 / monthYour name on the acknowledgements, if you ask for it.
  • Colleague$8 / monthReader, plus a monthly development note.
  • Patron$20 / monthColleague, plus a quarterly roadmap survey and your avatar on the wall.
  • Sponsor$50 / monthPatron, plus your avatar and name in the Sponsors section of the README on GitHub.

Cancel any time. Tiers never unlock software features.

  • Support is entirely voluntary.
  • It is not a purchase of a software licence.
  • It does not include any future paid features.
  • You don’t have to make your name public.
  • For monthly support, the terms shown on Ko-fi apply.
  • We make no claim that it is tax-deductible.
VIIAcknowledgementsVII / VIII

Acknowledgements

To those who help this work continue.

Thank you to everyone who supports Tavotto, including those who chose to do so anonymously. Your help is what lets us keep refining this tool with care.

And to everyone who contributes in other ways: through code, testing, feedback and sharing.

VIIIThe continuationVIII / VIII

The next discovery is still unwritten.

most recent measurement most recent measurement

Tavotto exists so that whatever is found next can be shown as clearly as it was found. Thank you for reading this far.

Support Tavotto

Support Tavotto on Ko-fi

Open in a new tab

Payment is handled by Ko-fi, inside Ko-fi’s own page.