Tavotto
AI drew your research figure. Tavotto makes it publication-ready: edit matplotlib figures on a canvas, lay out in mm, check journal rules. Free, open source.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Local vector paint app for designing and coloring mosaics with a custom palette
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A vector editor for designing and coloring mosaics with your own palette.
Use it online: https://honza03210.github.io/mosaic-paint/
It can be installed as an app ("Install app" button, or the browser's install icon), and then it also works offline.
To run it from a download instead, open index.html in Chrome / Edge / Firefox; there's no build step.
The switch in the top-left corner chooses how much of the app you see.查看完整 README ↗Two editors for designing and coloring mosaics with your own palette:
index.html): tiles are shapes – draw, snap, pattern, paint, print real-size templates.raster.html): paint with pixels – brush, pencil, bucket, and a one-click mosaic effect for any picture.Switch between them with Vector | Raster in the top bar. They look and work alike, share your palettes, and pass pictures to each other through the clipboard.
Use it online: https://honza03210.github.io/mosaic-paint/
It can be installed as an app ("Install app" button, or the browser's install icon), and then it also works offline.
To run it from a download instead, open index.html (or raster.html) in Chrome / Edge / Firefox; there's no build step.
The raster editor can also run inside Discord as an Activity: right-click a message with an image, a GIF or a video (also Tenor / Giphy GIFs) › Apps › Edit image (for a GIF or a video, choose the frame first), draw on it, and Post to the channel – in servers, DMs and group DMs, with no bot needed (the picture is posted as an answer to the command, like Wordle's results). The app switch works there too: in the vector app the picture becomes the photo layer to draw shapes on. Compress video (right-click a message with a video › Apps) and /compress-video (a video from your device) make a video small enough for Discord – 20 MB or 10 MB, worked out on your device with the browser’s own encoders (H.264 in MP4, else VP9 in WebM) – and post it. The backend is a small Cloudflare Worker (free plan) in discord/, with step-by-step setup.
The first time you open an app, a short guide points out its parts; the ? button in the top bar shows it again. Examples… opens ready-made projects to look at or start from: a coaster, a sign and “Your photo” (load a photo, then Mosaic from photo) in the vector app, a pixel-art heart and a sunset mosaic in the raster app (your current work is kept in History).
Both apps can be used from the keyboard (every tool has a key, see Keyboard & mouse; palette swatches take Tab, Enter / Space to pick – Shift for the stroke color – and Delete to remove), buttons that only show a symbol are named for screen readers, keyboard focus is always visible, and animations stop when the system asks for less motion. The end-to-end tests check both apps and their dialogs with axe-core (WCAG 2.1 A and AA).
Both apps are in English, Czech (čeština), German (Deutsch), Slovak (slovenčina) and Polish (polski). They follow the browser’s language; the language menu in the top bar switches it.
The switch in the top-left corner chooses how much of the app you see.
A page of its own – the editors stay as they are – that teaches every raster tool with a small task: 20 tasks in five units (painting, shapes, selecting and moving, text, photo magic), from finding a ladybird with the zoom to swirling a lake with Twist. The editor opens in a frame with a starting picture drawn for the task; everything is dimmed except the one thing to use next – the tool, its setting, or the part of the picture – with one short instruction beside it (🔊 reads it aloud). Taps elsewhere don't go through, so a child can't get lost; each step moves on by itself as soon as the editor shows it is done, and the checks are forgiving. On a phone the side panel opens and closes by itself, and zooming becomes "spread two fingers". A lesson never touches the child's own picture, versions or settings (the editor runs as raster.html?lesson=… with settings in memory only), and the stars for finished tasks are kept in the browser. The raster app's ? guide links to it.
The Shards button under the tools (both modes) draws every line as tapered pieces, as if glass shards had been laid by hand: each piece of a line between two crossings – a tile's edge – gets its own width, wider at one end and narrower at the other. Shuffle gives other widths, Unevenness how much they vary. The lines themselves stay as they are underneath (they still make the tiles and can be edited); the pieces follow every change, and a saved SVG or PNG looks the same (the pieces are a group of their own over the hidden lines). With the grout preview on, the pieces take its color and width.
Palette: paste colors into the box under the swatches, or press Ctrl+V anywhere on the canvas.
It accepts #hex, bare hex, rgb()/hsl(), color names, coolors.co links and GIMP .gpl rows.
Keep several named palettes and switch between them with the drop-down.
Click a swatch to use it as the fill, right-click to use it as the stroke, and double-click to edit it, which also recolors the drawing.
Choose… (or a click on the current fill or stroke color) picks any color from a color area, a hue slider or a color code, and can add it to the palette.
Page: set the real size and unit (mm, cm or in). Saved files and printouts use that real size.
Photo (optional): load a reference photo, set its opacity, and trace over it. Or let the app do it: Make a mosaic from the photo… lays out tiles over the whole page (squares, bricks, hexagons or irregular "crazy paving", smaller where the photo has detail) and colors them, using your palette or a palette it suggests from the photo. It is one undo step.
Draw the tiles with any of these tools:
Snap (S) puts points exactly on ends, corners, crossings, midpoints or anywhere along a line.
Paint:
Plan… splits a large mosaic into numbered panels of the size of your work surface or mesh sheets (shown on the drawing while you choose). The print has an overview with the panel numbers, every panel at real size (on several overlapping sheets if it is bigger than the paper) with color numbers, a table of how many tiles of each color every panel needs, and the color legend.
Ctrl+C / Ctrl+X / Ctrl+V copy shapes and their colors between pages, drawings and browser tabs (they arrive under the mouse, at real size even if the other drawing uses different units). Copied shapes also go on the clipboard as a picture, for the raster app and other programs; Copy image (or Ctrl+C with nothing selected) copies the whole drawing as a picture. Pasting a picture (from the raster app, a screenshot, a web page) makes it the photo to trace. Save a selection as a motif to reuse it: click it in the Motifs section, then click on the drawing to place copies (R turns them). The library can be exported and imported as a file.
A project can have several pages (front and back, color variants, …): the bar under the drawing switches between them, and ⋯ renames, duplicates, moves or deletes a page. Each page has its own drawing, size, photo, undo steps and view; palettes are shared. All pages are saved in one SVG file (other programs show the current page).
Share packs the whole drawing (all pages) into a link. Nothing is uploaded: the drawing travels inside the link itself. Whoever opens it sees the mosaic read-only and can make their own copy to edit; their own drawing is never touched. Very large mosaics make long links – on phones, "Share file…" sends the SVG file instead.
The drawing is autosaved in the browser, and History keeps the last 40 versions, each with its size and number of colors. Name a version with ✎, and pin it with ★ to keep it when old versions are cleared (pinned versions don't count toward the 40). The raster app's History works the same way. A version is saved every few minutes while you work, and before you open, start or restore another drawing.
Draw with one finger; pinch with two fingers to zoom and pan. The ☰ button opens the side panel. The Done / Cancel bar finishes chained lines and free polygons. Double-tap the drawing with a finger for the quick menu, right where you draw: undo / redo, fit, the main tools, the paint (fill) and outline (line) colors with the palette, and the size. The first tap of the double-tap leaves no mark. While a polygon or curve is being drawn, a double-tap finishes it as before.
3D… exports the mosaic as a 3D model (3MF or STL) for printing in several colors on an ordinary single-nozzle printer: every color stands at its own height, so you change the filament at a few layers and each tile's top comes out in its color.
The raster app paints pixels. It has the same layout, palettes (shared with the vector app) and Simple / Expert switch.
Some features need a one-time download. Nothing is downloaded until you agree to a dialog that says how much; the files are kept in the browser (so they work offline afterwards) and the Add-ons list in the side panel removes them again. Everything runs on your device – pictures are never uploaded.
| Add-on | What it does | Download |
|---|---|---|
| Select object (AI) | Select › Object (AI): tap an object to select it (MobileSAM – light enough for phones) | 45 MB |
| Object removal (AI) | Remove › Fill with AI: a trained model fills the spot (MI-GAN) | 28 MB |
| Background removal – people / any subject | Remove background…: transparent background, or select the subject (MODNet / U²-Netp) | 7 / 5 MB |
| Read text (OCR) | Read text…: the text in the image or selection, to copy (Tesseract) | 7 MB + 2–3 MB per language |
| Depth for 3D relief (AI) | 3D relief… from AI depth (Depth Anything V2 small) | 27 MB |
The AI add-ons share one engine (ONNX Runtime Web, downloaded once: 27 MB with WebGPU, 14 MB without – iPhone and iPad use the one without). On phones it works in less memory (slower, but iOS closes tabs that take much more than a gigabyte) and keeps one feature's models at a time. 3D relief… also works without any download, from the picture's brightness (light or dark high – a lithophane).
The apps are written in TypeScript and bundled into one script each: dist/mosaic.js (vector) and dist/raster.js (raster). The bundles are committed, so GitHub Pages and opening the pages straight from disk need no build step. Heavy work – the mosaic effect, tracing raster tiles, and building the 3D model – runs in a worker, so the page stays responsive and shows progress: the worker (src/worker/) is bundled first and goes into each app as a string, which the app starts from a blob URL (so it works from disk too); without workers the same jobs run on the page.
index.html, raster.html, style.css: UI of the two apps (one stylesheet)src/main.ts: vector entry point; loads the editor core, then the featuressrc/shared/: shared by both apps – page helpers, the palette panel (palette-ui.ts), images on the clipboard (clipboard.ts), the phone layout / install / offline shell (shell.ts), the 3D print dialog (export3d.ts), the version history (history-ui.ts), the examples dialog (examples-ui.ts) and the guide (guide.ts), print pages, color legends and CSV files (printing.ts), the 3D view (view3d.ts, plain WebGL), languages (i18n.ts: t(), word forms, translating the page; i18n-cs.ts, i18n-de.ts, i18n-sk.ts, i18n-pl.ts: the texts of each language, keyed by the English text), running jobs in the worker (work.ts)src/discord/activity.ts: the editor as a Discord Activity (dist/activity.js, loaded only inside Discord); compress-ui.ts and compress.ts (dist/compress.js, loaded when a video is compressed – Mediabunny and WebCodecs; src/lib/video-plan.ts picks the bitrate and size); its backend, a Cloudflare Worker, is in discord/src/worker/: the worker – its jobs (jobs.ts: plain data in and out) and its entry point (worker.ts)src/lib/: pure logic with no page or editor access (unit-tested in Node)
geometry.ts: geometry math, including finding closed areas for the bucketpatterns.ts: tiling patternscontour.ts: rows following an outline (distance field, marching squares)automosaic.ts: tile layouts for a mosaic from a photo (quadtree, Voronoi) and palette suggestion (k-means)colors.ts: color parsing, closest-color matching, color-blind simulationprint.ts: splitting the print-out across sheets, print pageslayplan.ts: laying-plan panels and per-panel countspack.ts: compressing a drawing into a share linkstore.ts: browser storage for the autosave and versionsnpm install # build and test tools; the app itself has no dependencies
npm run build # bundle src/ into dist/mosaic.js (node build.mjs --watch rebuilds on change)
npm run serve # http://localhost:4173/
npm run lint # ESLint
npm test # build, type check, lint, unit tests, then end-to-end tests
Commit dist/ and sw.js together with the source change: CI checks that they match the build.
Releases. The version is the one in package.json; the apps show it in the status bar (v1.1.0), and its button opens What’s new. To release: raise the version, add what changed at the top of RELEASES in src/shared/whats-new.ts (and its translations), and run npm run build – it also names the offline cache in sw.js after the version and the files it keeps, so every release replaces the offline copy. After an update, people who used the app before see the version button marked until they open What’s new.
The end-to-end tests (tests/e2e/) drive the real app with mouse, keyboard and touch input:
drawing, snapping, painting, painted areas following edits, files, autosave, history, printing, the photo tools, the phone layout and offline start.
They run on every push (GitHub Actions) in Chrome, Firefox and WebKit, plus emulated Android and iPhone. See TESTING.md, including the checklist for real devices.
Check:
Output:
raster.tsmodel3d.ts: the 3D print model – colors as height bands, one closed surface (no T-junctions), binary STL, 3MF with PrusaSlicer color changes, the filament-change plan; the flat multi-filament model (one part per color) as a PrusaSlicer or Bambu Studio 3MF; finishing (frame, rounded corners, hanging hole, magnet pockets)build3d.ts: the 3D model as the dialog builds it – thin towers lowered, finishing, the solids of either kind of model, the filesvectorize.ts: raster tiles as a Mosaic Paint SVG (one polygon per piece)examples.ts: the example projects, made on the spotgcode.ts: reading sliced G-code back (filament and tool changes, heights per tool) and checking it against the planphoto.ts: reading a photo over the drawing – colors, detail, palette suggestions, the tile layout of Mosaic from photohtml.ts: escaping text for HTMLzip.ts: a small ZIP writer (3MF files are ZIP archives)trace.ts: outlines of pixel areas as polygons (corner points only, holes, diagonal pixels kept apart)src/core/: the editor
env.ts: page elements, settings and state, small helpers, events between modulesdoc.ts: shapes and their geometry, painting, regular-polygon dataview.ts: zoom / pan, page, layers, symmetrysnap.ts: snapping and the size labels shown while drawingselection.ts: selecting, moving, the selection commandsareas.ts: closed areas, the paint bucket, painted areas following edited linestools.ts: the drawing toolshistory.ts: undo / redo, autosave, versionspalette.ts: palettes, swatches, fill and line colorsphoto.ts, grout.ts: the tracing photo and the grout previewfiles.ts: reading / writing SVG, open, save, PNG export, modeinput.ts, panel.ts: mouse, touch, keyboard, paste, drop; the side panelapi.ts: startup and the MZ interface used by the featuressrc/features/: one module per vector feature: report, print, history-ui, rulers, shell (phone layout, install), photo-tools, automosaic, layplan, mix, vision, pages, snippets, motifs, share, image-clipboard, export3d, raster-importsrc/raster/: the raster app – state, canvas (image, zoom, drawing on screen), history (undo, autosave), paint (painting tools), select (selection, clipboard), palette, mosaic, export3d, report, print, share, vectorize, files, tools, input, panel, mainsw.js, manifest.webmanifest, icons/: offline / install support