Repository navigation
Releases: SFCyris/VisualWeaver
Release list
v1.14.0 — reachable on the LAN by default, installer asks
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
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 Homebrewpython@3.xthat is not yet onPATH; - honours
PYTHON=/path/to/python3.12 ./install.shas an explicit choice; - refuses an unsupported Python up front, with the exact install command to run
(brew install python@3.12on macOS,apt-get install python3.12 python3.12-venvon 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
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
geometrytext label is drawn exactly as written:R_sandx^2stayR_s
andx^2instead of appearing as the literal stringsR<sub>s</sub>and
x<sup>2</sup>. - A
geometrystroke set the SVG way —"dashArray": "5,5"— is now dashed
instead of drawn solid.
v1.13.0 — seven new figure lanes and richer plots
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 acircuiteven 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
geometrytext label written with its position nested,[[x, y], "…"], is
drawn instead of being dropped.
v1.12.0 — VisualWeaver
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
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.jsoncould 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
0was still drawn.
Upgrading
Nothing to move. Pull the image or the source and restart.
docker pull ghcr.io/sfcyris/visualweaver:1.11.0If 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
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}"/visualweaverThen 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 # Linux2. 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 underall-MiniLM-L6-v2and
about 0.80 apart undermultilingual-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.