Changelog¶
v1.0.0 — Public release¶
The first public release of Octo Vector Bridge — the line-art bridge between Blender, Maya, and Toon Boom Harmony.
Highlights¶
- 3D line art → native Harmony pencils — Blender (Grease Pencil or Pencil+) and Maya (Pencil+) strokes become editable Harmony vector pencil lines, camera-accurate and frame by frame.
- Variable width preserved — real per-point pressure from Grease Pencil; for Pencil+, the flattened EPS width and colour are reconstructed by sampling the raster render. WYSIWYG: what the Previewer shows is what lands.
- Subartlayers — one export output becomes one track stacked inside a Harmony art layer. Several subartlayers can share an art layer (they become its stack, in list order) or spread across Line Art / Colour Art / Overlay / Underlay. On disk each is a numbered
NN_subfolder; the numbering is stable, and an opt-in Clean Art Folders removes stale ones. - Export (Harmony → SVG / PDF / AI) — the bridge runs both ways. A button beside the importer exports a Read node's vector art — all four art layers, exact per-point thickness, real colours and alpha — to SVG (keeps the pressure for round-trip), PDF or AI. Reads the drawing, not the render, so rigs and effects never turn it black. Bitmap art layers are shown greyed with the reason; PDF/AI carry a standing note that they draw one width per line. Blender and Maya gain the AI container too.
- The Structure tree — one tree of drawings → art layers → passes, authored in Blender or Maya and read back by the Harmony importer as the same tree. It is the folder layout on disk: reorder with the arrows or by drag, and the position becomes the
NN_stack index. - Bitmap passes — a pass can produce a PNG sequence as well as vectors: a Blender Render Pass or Compositor node, or a Maya Materials render (any renderer, with its Render Layer and AOV). Lines and renders land in the same drawing, on different art layers.
- Per-subartlayer recipe (Grease Pencil) — each subartlayer stores how its Line Art / Thickness modifiers are configured: stack order, on/off, edge types, and width — so one Line Art modifier serves an outline and an inline. Its Content filters the scene by collection / object / layer (with an Except toggle and a scoped layer dropdown); a Live Preview toggle (off by default) keeps your viewport and undo history untouched until export; Restore Defaults and Update Defaults from Scene manage the artist's own baseline.
- Pencil+ subartlayers — one unified mode (Blender and Maya) — a subartlayer filters your Pencil+ setup by Line and Line Set (with an Except toggle), and its Line Sets panel is the per-Line-Set recipe: which edge types each generates (Outline, Object, Intersection, …), Visible and Hidden independently, plus a Thickness multiplier that scales the whole Line Set's brushes at once. Generators create one subartlayer per Line or per Line + Line Set; a Live Preview and Restore / Update Defaults keep the preview from dirtying your setup.
- Occlusion — camera raycast removes strokes hidden behind geometry (the cull Blender's native SVG export can't do). Every solid mesh blocks lines; turn a mesh's render icon off to exempt it. It is decided per layer — a Line Art layer exports as-is, hand-drawn art gets the raycast — with a WYSIWYG kept-vs-culled overlay and a per-subartlayer Export as-is opt-out.
- Bundled Potrace tracer — Image-Trace-style raster → vector in Black & White, Greyscale, and Colour (farthest-point median-cut). B&W traces filled shapes with Potrace and pencil centrelines with Zhang–Suen thinning.
- Bitmap import — bring a raster in as a self-contained Toon Boom bitmap (default) or keep it linked to the original file.
- Original Bitmap drawings — a drawing can be one flat bitmap instead of four art layers; the art-layer selector becomes a Recipe naming the stack it is flattened from, and vector tracks never enter it.
- Import (Blender) — one OVB tab with an Export | Import switch at the top. The import is a queue shaped like the Harmony importer: Add
.svgfiles, a drawing's folder or a whole OVB export (Add Folder), then Import. Vector tracks become Grease Pencil — per-point widths as stroke radius, colours and gradients as materials, curves kept as Bezier — and bitmap tracks become image planes, both on the active camera's plane so an export re-imports where the camera saw it. Art layers come in as separate Objects in a Collection per drawing, or as Layers of one object; frame numbers can be kept; Lights is off by default so the art matches the file. Reload re-reads the source in place while your edits to the object stay. - Fills and gradients cross the bridge (Blender) — the Blender exporter writes Grease Pencil fills as filled paths and two-colour gradient materials as SVG gradients; the importer turns SVG gradients into gradient materials with the axis on the stroke, and keeps curves as Bezier. In Harmony, the Line and Fill colour swatches show the source's colours as stripes and count them on hover.
- WYSIWYG Previewer — field-space camera framing, cursor-anchored zoom, middle-mouse / Space pan, onion skin (vector and bitmap), snapping and field grid.
- Outliner = node graph — the tree you build is the Harmony network written on Apply: pegs, groups, composites, and sibling aggregation by paint order. Delete Node (lift children) vs Delete Hierarchy.
- Per-art-layer Inspector — thickness envelope + pressure detail, point cleanup, tip taper, and whole-drawing/peg transforms, each per subartlayer.
- Gizmo pivot — both the art-layer (blue) and peg (green) gizmos carry a draggable pivot: a corner drag scales from it, so a character scales from the soles of their feet without drifting. Alt scales from the centre instead.
- Palettes — import into any scene palette or a new one, and create, rename and recolour colours right in the drawing's card. They become real on Apply, and an existing colour with the same RGBA is reused, never duplicated.
- Weight-paint brushes + Thickness brush — Relax, Simplify, and Pressure paint a
0..1heat-mapped mask; the non-weighted Thickness brush sculpts line weight directly. All non-destructive with a one-click Clear. - Merge split lines — optionally rejoin Harmony's planar-split pieces into single editable strokes, with a tri-state master toggle and per-art-layer overrides.
- One import dialog — a single browse handles a folder, loose files, an image sequence, or a single frame, classifying art layers by folder/name and defaulting loose art to Line Art.
- 30-day trial + perpetual licence — one machine-bound activation covers Blender, Maya, and Harmony (a DCC-neutral licence file), with Return License to move machines. Reachable from a License button in Maya, an Activate License panel in Blender, and a License card in Harmony's Preferences.
Architecture¶
- One shared, DCC-neutral core (
ovc_core) with thin per-host adapters for Blender, Maya, and Harmony. - Pure, shared width/point/taper functions run identically in the Previewer and the Harmony writer — the guarantee behind WYSIWYG.
- Node graph emitted through a ported OSA-style emitter (peg / group / composite, MPI/MPO, sibling aggregation).
- Bundled
potracebinary — no external install.
Fixes — build 5cf356d (2026-09-15)¶
- Harmony: drawings inside a group landed outside it, unconnected — a drawing placed under a group in the Structure tree was created at Top, and Harmony silently refuses a cable across a group boundary. It is now created inside its group and cabled to its peg, and that peg gets its scale and offset.
- Harmony: two drawings with the same name in different groups — the second one came in blank, linked to the first one's drawing. Names are now checked per group (
A/HeadandB/Headcoexist), and a real duplicate is a warning showing the name it will get, not a block. - Harmony: vector import defaults — Simplify 10% and Corners 90% (were 55 / 55): a touch of cleanup that keeps corners sharp. Image Trace keeps its own values.
- Harmony: the Message Log is no longer flooded with
file does not exists ()once per imported frame. - Blender: Export failures are shown — a pass that refused to run reported to nobody, so the Export button looked dead. The reason now appears in a popup.
- Blender: Clean Art Folders runs before the clash check, and also removes the other kind's files from folders whose pass switched between vector and bitmap — previously the check refused first, telling you to tick the box you had already ticked.
- Blender: exports always carry a file extension — with Output › File Extensions off, renders came out as
0001and the importers never saw them. OVB forces it during export and restores your setting after. - Licence: Activation limit reached on a machine that was already activated — the machine id included the network adapter, so switching Wi-Fi, Ethernet or VPN made the same computer look new. It now uses the system's own machine id (Windows MachineGuid, macOS hardware UUID). An existing licence file is healed once, online, with no new activation.
Fixes — build b79313d (2026-09-03)¶
- Maya: the panel can no longer outgrow its window — creating a pass stretched the tree and pushed License / Convert off the right edge; the scroll body is now pinned to the window width at any size. (build f561fbe)
- Maya: drag & drop in the Structure tree — drag a pass above/below another, onto a container (lands last in it) or onto a drawing (its default container). Containers and drawings stay put; the arrows still work. (build f561fbe)
- Maya:
+puts the new pass in the container you selected — it always landed in Line Art, whatever was highlighted in the tree. (build 0af2a9a) - Maya: no more flash when clicking between passes — rebuilding the settings section briefly showed retired widgets as a stray top-level window; they are hidden before they are dropped. Row tooltips in the tree are gone too (the icon and Produces already say it). (build 377c3fe)
- Maya: changing Produces updates the settings below it immediately — the Pencil+ pickers or the Materials layer/pass pickers only appeared after clicking another pass. (build cf7e545)
- Harmony: deleting an app-created palette colour with − — after any list refresh the − button kept a stale enabled state with nothing selected (a click did nothing), and a colour created from an art layer's picker did not show in the drawing's palette list until the page was re-asked. Both fixed. (build ac25ffc)
- Harmony: a bitmap import could leave a scene that refuses to save — Missing folder …/ovb_raster_… / Cannot write palette list. The intermediate drawings were written to a temp folder, so the palette Harmony wrote beside them pointed there, and the import deleted that folder on the way out. They now live in the element folder, where the palette belongs. (build 947b18e)
- Harmony: long bitmap sequences import far faster and no longer exhaust memory — every frame launched up to two
utransformprocesses (about 1700 for an 840-frame sequence, over an hour), and the whole import was held in a single undo block. The already-converted drawing is now reused instead of reconverted (one launch per frame, or none), and long imports commit the undo block in slices so Harmony can release memory. (build 947b18e) - Harmony: long vector sequences no longer run out of memory (Import JS error: bad allocation, then Harmony closing with no message). The import now streams: every 25 frames are parsed, written, given their line thickness and released before the next 25 are read — measured on a real 840-frame export, the parser's peak fell from ~0.9 GB held for the whole import to ~44 MB. Imports over 100 frames also clear Harmony's undo history as they go, so the stroke copies kept for undo no longer pile up (such an import is not undoable — save first). A chunk that fails now stops the import with a message instead of carrying on into a crash. (build cec0dd0)
- Harmony: Checkpoint save (opt-in) — a new box beside Merge split lines saves the scene every 100 frames of a long import, so Harmony can release the drawings already written instead of holding all of them until the end. It stays locked (hover it for why) until the scene has been saved on disk. (build cec0dd0)
-
Harmony: bitmap frames came in empty after the first checkpoint save — the vector art was fine. Harmony renames an element's folder and physical name when the scene is saved (its docs say so), and the bitmap path had read both once before the loop, so every later TVG was written where Harmony no longer looks. Both are re-read after each save. (build 8ed7e63)
-
Pencil+ is optional — Grease Pencil is the default source and needs nothing extra. The Pencil+ source now warns instead of blocking, and says plainly that PSOFT's paid Pencil+ 4 Render App (not just the free Line add-on) is what draws the lines.
- Blender add-on failed to enable on a fresh install (
No module named pencil_plus) — the vendored core is now imported relatively, which also clears Blender's Policy violation warnings in Preferences. - A load-time traceback printed on every file open is gone.
- Installer — the shared Octo Tools toolbar in Harmony is rebuilt from every installed tool, so uninstalling one tool no longer removes the others' buttons; Blender add-ons are enabled automatically after install; downloads are named by release id (
1.0.0-<id>) and the installer window shows the same id. - Maya panel clipped on the right once a Pencil+ pass was selected — the recipe card's two labelled checkbox columns forced the window wider than 480 px. The card now lists each edge type once with bare Visible / Hidden boxes. (build 8fd672d)
Known issues¶
- Exporter and UI work is validated in real Blender and via offscreen Qt for Maya; end-to-end validation in a live Harmony scene is ongoing.
- Pencil+ variable-width reconstruction depends on a clean raster Line render element; a noisy render can soften the recovered width.
- With two DCCs open at once, a licence returned in one refreshes the other's on-screen status only when its panel is reopened (the licence file itself is always correct).
- Windows installer is the primary target; macOS packaging and code-signing are still to come.
Pre-release history¶
Octo Vector Bridge was developed privately through late 2025 and 2026. Public history begins with v1.0.0.