Skip to content

Releases: SFCyris/VisualWeaver

v1.14.0 — reachable on the LAN by default, installer asks

Choose a tag to compare

@SFCyris SFCyris released this 30 Sep 03:26

v1.14.0 — VisualWeaver

The web UI is reachable from your network out of the box, and the installer asks
you whether that is what you want.

Reachable on the LAN by default

The local runtime now listens on all interfaces (0.0.0.0) by default, so a
fresh checkout can be opened from a phone, a second machine or a VM's host
without a per-machine override. start.sh prints the LAN address on every start.

VisualWeaver has no built-in authentication, so every start on all interfaces
also prints the one line that restricts it to the machine it runs on —
VISUALWEAVER_HOST=127.0.0.1, once per run or permanently in .visualweaver.env.

The installer asks

install.sh now asks who may open the web UI — only this machine, or any device
on the network — and records the answer in .visualweaver.env. Just pressing
Enter keeps it to this machine; a choice already recorded is kept, and a run
without a terminal is not asked. A new .visualweaver.env.example documents the
overrides.

v1.13.2 — installer picks a supported Python

Choose a tag to compare

@SFCyris SFCyris released this 30 Sep 02:38

v1.13.2 — VisualWeaver

A fresh Mac or Linux install no longer fails on a too-new Python.

A new Homebrew or apt now installs Python 3.13 or 3.14, for which the pinned
PyMuPDF has no prebuilt wheel. The installer then tried to compile MuPDF from
source, which fails on current macOS SDKs.

install.sh now:

  • picks the newest supported interpreter it can find — Python 3.11 or 3.12,
    including a Homebrew python@3.x that is not yet on PATH;
  • honours PYTHON=/path/to/python3.12 ./install.sh as an explicit choice;
  • refuses an unsupported Python up front, with the exact install command to run
    (brew install python@3.12 on macOS, apt-get install python3.12 python3.12-venv on Debian/Ubuntu) instead of a long source build that fails;
  • rebuilds a virtualenv left behind on an unsupported Python rather than reusing
    it.

pip also refuses Python 3.13 and newer up front, and the documentation now
states the supported versions (3.11 or 3.12).

v1.13.1 — scene controls, smooth geometry curves, verbatim labels

Choose a tag to compare

@SFCyris SFCyris released this 06 Sep 02:43

v1.13.1 — VisualWeaver

A 3-D scene you can actually turn — now with controls under the canvas — and a
geometry patch: smooth curves, verbatim labels and SVG-style dashes.

3-D scenes: interaction restored, controls added

In 1.13.0 a 3-D scene could not be rotated, zoomed or panned: the "3-D view
paused" overlay meant for a lost WebGL context was painted over every live scene
and took each drag and wheel. It now appears only when the context is actually
lost.

Every scene card also gains a control strip under the canvas: Rotate,
Tilt and Zoom sliders that show the current view and drive it — with the
keyboard, a finger, or for a precise angle — and follow a mouse orbit so the two
never disagree, plus ↻ Spin, which turns the scene continuously until you
touch it.

Smooth curves in geometry

New element types bezier / curve draw a cubic Bézier through their
control points, and spline draws a curve that passes through every point —
for light paths, trajectories and freehand shapes.

Fixes

  • A geometry text label is drawn exactly as written: R_s and x^2 stay R_s
    and x^2 instead of appearing as the literal strings R<sub>s</sub> and
    x<sup>2</sup>.
  • A geometry stroke set the SVG way — "dashArray": "5,5" — is now dashed
    instead of drawn solid.

v1.13.0 — seven new figure lanes and richer plots

Choose a tag to compare

@SFCyris SFCyris released this 04 Sep 00:16

v1.13.0 — VisualWeaver

Seven new kinds of figure render inline in an answer — 3-D scenes you rotate,
phase portraits, electrical schematics, biological sequences, phylogenetic trees,
reaction schemes and the statistical charts a plain bar/line chart cannot draw —
and the function plot gains parametric, polar, vector-field, contour and
implicit curves.

A 3-D scene you can rotate

The new scene block draws a small 3-D scene of primitives — boxes, spheres,
cylinders, cones, tori, planes and the regular polyhedra — from a short JSON
description. Drag to orbit, wheel to zoom, shift-drag to pan, arrow keys and Home
to move and reset from the keyboard, ⟲ Reset view to return to the starting
camera and ⬇ PNG to save the current view. It follows the page's light/dark
theme and re-renders crisply when the card resizes.

Statistical charts, phase portraits and more

  • plotly — histograms, box and violin plots, heatmaps, contours, sankey,
    treemap, sunburst, candlestick, waterfall and funnel charts. Give it raw values
    and the browser bins them and computes the quartiles.
  • ode — a phase portrait of a 2-D system: the direction field plus
    trajectories integrated forward and backward from each starting point, with
    param: sliders that re-integrate the portrait as you drag, exactly as in
    plot.
  • sequence — a DNA, RNA or protein sequence, or several shown as an
    alignment with the differing columns marked; residues are coloured by base or by
    amino-acid class and numbered, and a long sequence wraps and scrolls inside the
    card.
  • phylo — a phylogenetic tree from a Newick string: a phylogram with a scale
    bar when branch lengths are given, a cladogram otherwise.
  • reaction — a reaction scheme drawn from reaction SMILES, the structures
    sized to the card with a labelled arrow between reactants and products.
  • circuit — an electrical schematic on a grid: resistors, capacitors,
    inductors, batteries, sources, diodes, LEDs, switches, lamps, fuses, meters,
    ground and wires, with junction dots and labels. Coordinates run with y upward,
    the way graph paper does.

Richer function plots

The plot block now draws parametric curves (x = f(t), y = g(t)),
polar curves (r = f(theta)), vector fields (field: fx, fy), contour plots
(contour: f(x, y)) and implicit curves (implicit: f(x, y) = g(x, y)), with an
optional y = a .. b window; a curve with no domain is framed to fit, and a
formula that names an undeclared symbol says which one.

More mermaid diagram types

mermaid now also renders mindmaps, quadrant charts, XY charts, and sankey,
block and kanban diagrams.

Fixes

  • A saved base instruction from an earlier version no longer hides the newer
    blocks: their instructions are added to each turn automatically, so a circuit is
    drawn as a circuit even when the saved copy never mentioned it. Settings →
    Templates offers ↺ Reset to shipped default to fold them in permanently.
  • The embedding model and the reranker load from the local cache without
    contacting Hugging Face when they are already on disk, so a restart with no
    internet no longer leaves the first page load waiting on network retries.
  • A geometry text label written with its position nested, [[x, y], "…"], is
    drawn instead of being dropped.

v1.12.0 — VisualWeaver

Choose a tag to compare

@SFCyris SFCyris released this 03 Sep 00:05

v1.12.0 — VisualWeaver

Fractals stop being static pictures and become something you can explore, and the
Source pane behind every rendered figure becomes an editor.

Fractals are interactive

Escape-time fractals now navigate. On a Mandelbrot or Julia card, drag a box
over the region you want and it zooms into it — the selection is locked to the
card's proportions, so the zoom never distorts. A plain click still zooms in and
shift-click zooms out, and ⟲ Reset zoom returns to the starting view.

Every fractal also carries a slider under the canvas that re-renders it in place,
with no round trip to the model — so you can dial a fractal in yourself:

Mandelbrot, Julia Iterations — how deep the escape test runs
L-system curves (Koch, dragon, tree, …) Depth — how many rewrite generations
Barnsley fern and other chaos-game figures Iterations — how many points are plotted
Strange attractors (Lorenz, Rössler, …) Steps — how far the orbit is integrated

The Sierpinski triangle and carpet build up like the Koch snowflake

Both are now drawn as nested outlines with a Depth slider: each level
divides the figure into smaller copies of itself — the gasket as nested triangles,
the carpet as nested squares — the way the Koch snowflake's depth already worked,
instead of a fixed cloud of points. Slide the depth up and watch the structure
refine one generation at a time.

A fern, two ways

The classic fern stays exactly what it was — the Barnsley iterated-function
system, drawn as its dense point cloud. Alongside it there is a new frond
preset: the same fern built the L-system way, where a stem segment is replaced by
a branching frond over and over, drawn as lines with its own Depth slider.

Every figure's Source is editable

Every rendered figure already had a Source toggle. Now the source is an
editor. Open Source on a plot, abc (music), svg or latex card — as on
the other rendered blocks — change the markup or the spec, and press ▶ Apply
to re-render the figure in place; ↺ Reset puts the original back. A re-applied
plot rebuilds its parameter sliders and its function list, and a re-applied
score is what the ▶ Play button plays. Edits are local to the page: the stored
conversation is unchanged, and a reload shows the original again.

v1.11.0 — VisualWeaver

Choose a tag to compare

@SFCyris SFCyris released this 02 Sep 01:04

v1.11.0 — VisualWeaver

The ```fractal block learns most of the shapes people actually ask it for, and
tables stop misreading their own numbers.

Fractals it can now draw by name

Asking for a Hilbert curve, a Peano curve or a Lorenz attractor used to produce a
red error box. Each is exactly what the ```fractal block is for — the first two
are L-systems the renderer could already walk — but only seven shapes had names,
so anything else had to be written out as a raw L-system or IFS.

Fourteen more are named now:

Space-filling curves hilbert, peano, moore
Self-similar curves gosper, levy, arrowhead, tree
Chaos game carpet
Strange attractors lorenz, rossler, thomas, halvorsen, clifford, dejong

Naming one is enough — {"type":"hilbert","order":5} draws a fifth-order Hilbert
curve. Strange attractors are a new kind of fractal here: the orbit is integrated
and drawn graded along its trajectory, a three-dimensional one takes plane to
choose its projection, and each takes its own coefficients. Common spellings
resolve to the same shape, so Hilbert Curve, flowsnake, Koch snowflake and
lorenz_attractor all work.

Tables read their own numbers

A column of $3,400.75 totalled to 5791.35 — the right figure, formatted as a
different kind of thing. Totals now take the column's own prefix, suffix,
grouping and decimals.

Underneath that, the two kinds of table had different ideas of what a number is.
They now share one, and it reads 99,25 EUR, 1.234,50, (50.25), 12 345 and
12,34,567 as the numbers they are. Version strings and dotted dates sort as
versions and dates instead of being taken for decimals.

Also fixed

  • A value of the wrong type in config.json could stop the settings screen
    loading and stop every answer, and a save from that state could overwrite your
    web sources, watch folders and stored API keys. Saving is now refused until the
    configuration has been read.
  • A saved Base Instruction replaced the shipped one permanently, so blocks and
    options added later quietly stopped reaching the model. Settings → Templates
    now says what a saved copy is missing, and leaves a deliberate customisation
    alone.
  • A fractal card kept its dark background after a switch to the light theme, and
    recomputed its whole orbit whenever it was resized.
  • An attractor given coefficients that blow it up drew an empty card; it now
    draws the part that stayed bounded, or says the system diverged. The largest
    integration step the app accepted produced no orbit at all for several systems.
  • An IFS map given a probability of 0 was still drawn.

Upgrading

Nothing to move. Pull the image or the source and restart.

docker pull ghcr.io/sfcyris/visualweaver:1.11.0

If you have saved Settings at any point, open Settings → Templates: a saved
Base Instruction shadows the shipped one, so the fractal names above will not
reach the model until you take the current text with ↺ Reset to shipped
default
. The panel now tells you when that applies.

v1.10.0 — VisualWeaver

Choose a tag to compare

@SFCyris SFCyris released this 24 Aug 12:52

v1.10.0 — VisualWeaver

RediRecall is now VisualWeaver. The old name carried part of the Redis trademark,
which Redis Ltd.'s policy does not permit, and the Settings panel carried an imitation
of the Redis logo, which it permits still less. Both are gone, and a non-endorsement
notice is in their place.

Alongside the rename, the semantic cache stops refusing to cache whole classes of
question, and the retrieval settings now advise you from your own retrieval history
rather than from a table of recommended values.

Upgrading

This release moves your data directory and the container image. Neither is done for
you — take both steps before starting the new version.

1. Move your data. Everything you own lives here: your configuration and API keys,
your ingestion logs, your uploads, and the Redis data directory holding every chunk you
have ingested. Starting VisualWeaver without moving it looks exactly like total data
loss, because the new build looks in a new place.

# macOS
mv ~/Library/"Application Support"/RediRecall ~/Library/"Application Support"/VisualWeaver

# Linux
mv "${XDG_DATA_HOME:-$HOME/.local/share}"/redirecall "${XDG_DATA_HOME:-$HOME/.local/share}"/visualweaver

Then fix the three absolute paths inside redis/redis.conf, which still point at the
old directory and will stop Redis starting:

sed -i '' 's|/RediRecall/|/VisualWeaver/|g' ~/Library/"Application Support"/VisualWeaver/redis/redis.conf   # macOS
sed -i    's|/redirecall/|/visualweaver/|g' "${XDG_DATA_HOME:-$HOME/.local/share}"/visualweaver/redis/redis.conf  # Linux

2. Pull from the new image path. ghcr.io/sfcyris/redirecall is not updated any
further:

ghcr.io/sfcyris/visualweaver:1.10.0

Environment variables are renamed from REDIRECALL_* to VISUALWEAVER_*. Nothing in
Redis is rewritten and no re-ingest is needed.

Semantic cache

  • Asking to visualise something is cached again. It was excluded outright, so asking
    the same question twice cost two model calls — and because nothing was ever stored, a
    later plain-text rewording of it could not match either. Those turns are cached now and
    matched on the question itself rather than on similarity: two different drawing
    requests score closer together than any threshold that would still match anything, so
    plot f(x) = sin(x) must never be answered with sin(2x).
  • Ordinary questions are no longer excluded for mentioning a picture. "What is graph
    theory", "explain knowledge graphs in Redis" and "how do I read a flame graph" were all
    treated as requests to draw something and paid again for answers already produced.
  • The similarity threshold follows the embedding model. The models do not share a
    scale — two unrelated questions score about 0.10 apart under all-MiniLM-L6-v2 and
    about 0.80 apart under multilingual-e5-base — so a single fixed number was permissive
    under one and admitted unrelated questions under another.
  • Threshold and TTL changes take effect without a restart. They were read once when
    the cache was first built, so changing them in Settings did nothing.
  • Changing the embedding model clears the cache and its threshold. The stored vectors
    come from the previous model and are not comparable.
  • An answer says whether it came from the cache, and if not, why — nothing similar
    stored, an attachment on the turn, or a deliberate regenerate.

Retrieval settings

  • Each corpus states the threshold it needs, and the panel reports the value all of
    them can meet. When two genuinely disagree, that disagreement is the finding, with both
    named.
  • Scores are kept separately per retrieval mode. Question-mode and HyDE-mode searches
    score differently, and pooling them produced a threshold that suited neither.
  • The score distribution is drawn under the slider, with a marker that follows it and
    a live reading of what that value keeps.
  • Copy diagnosis puts every measurement behind the verdicts on the clipboard as text.
  • The panel says how much traffic its numbers cover when questions were answered from
    cache, since those run no retrieval.
  • A setting with nothing measured behind it gets no colour and no suggested value.
  • Retrieval statistics survive a restart, and deleting a corpus removes its statistics.