Repository navigation
Commit 877ea1c
authored
ai-node-canvas: an infinite-canvas node graph for MiniMax model runs (#71)
* ai-node-canvas 0.56.0: add an infinite-canvas node graph for MiniMax model runs
* ai-node-canvas 0.57.0: take a finished video's link from its own task, and say so when the file is missing
* ai-node-canvas 0.59.0: a card holding a video carries no toolbar, and no empty strip below it
* ai-node-canvas 0.60.0: a saved file cannot walk out of the folder, a download cannot reach this machine, and the MCP server says what it really does
* ai-node-canvas 0.61.0: draw the icon of the board — three cards and the lines that carry what each one made to the next
* ai-node-canvas 0.62.0: the icon is now the little artist — a pink octopus with a beret, a brush and a palette, standing on the board
* ai-node-canvas 0.63.0: give the icon a board for each theme — a light one and a dark one
* ai-node-canvas 0.64.0: the icon is the little artist painting, in the dark and the light theme both drawn by the model
* ai-node-canvas 0.65.0: ship a Skill that tells the Agent how to use the canvas, and let it name the prompt template
* ai-node-canvas 0.66.0: the Skill in Chinese, and four more traps the Agent would otherwise walk into
* ai-node-canvas 0.67.0: a template is the skeleton of a chain — six ready-made workflows the user and the Agent can put on the canvas
* ai-node-canvas 0.68.0: the page asks in itself - a new canvas, a new name and a deletion are settled inside the board
* ai-node-canvas 0.69.0: a template travels as a file - the toolbar shares templates, and the runtime writes the file
* ai-node-canvas 0.70.0: the canvas is a workbench and it saves itself - no save button, the toolbar carries templates only
* ai-node-canvas 0.71.0: a template travels as a file - thirteen ready-made chains, a place to save it, and a canvas of its own when it comes back
* ai-node-canvas 0.72.0: a template is listed in one menu, not two - the ready-made chains stay in the template panel, the import panel is about files
* ai-node-canvas 0.73.0: one menu holds the templates - the template button is gone, the import panel carries the ready-made chains, your own and the files
* ai-node-canvas 0.74.0: a template of the user can be managed - it gets a name of your own, and a button that takes it away
* ai-node-canvas 0.75.0: a template file can be kept - the file on the machine is not yours yet, but one click puts it in your own list
* ai-node-canvas 0.76.0: one menu for the templates - the toolbar carries a single button, and it opens two ways in and two ways out
* ai-node-canvas 0.77.0: the reference set takes a picture, a clip and a sound - H3's one collection request, as the provider has it
* ai-node-canvas 0.78.0: a run must never look stuck - the poll cannot hang, a redraw that was held off is not lost, and a client file is registered in one place
* ai-node-canvas 0.79.0: a chain that waits holds on to the run it was given
A chain that runs one step and then stops was not a slow model. The page
forgets which run belongs to a node as soon as that run is over, so the
waiter that looked the run up again never saw it finish, and the chain stood
still until its own timeout. The waiter now holds the id of the run it was
given, and asks for that run by its id.
The runtime refuses a second run on a node that is already running. That is
not a failure but the node is busy, and the card keeps its own state instead
of being marked as failed.
The rules live in one place (run-watch.mjs) and are tested as plain rules,
not as text in the page.
* ai-node-canvas 0.80.0: a clip the provider cannot read in time is made smaller first
A clip read back into a prompt failed with a timeout: the Host stops a
connector call after thirty seconds, and the provider reads a clip frame by
frame. A phone recording is sixty frames a second at 1080x1920, so there are
six hundred frames to look at in ten seconds, and the call was cut off.
Two things were wrong. The clip was never measured, because ffprobe was asked
for the whole of every stream and every tag: that answer is longer than the
text an answer may hold, so it was cut off in the middle and could not be
read at all. And a clip that cannot be read in time was sent exactly as it
was.
Now the clip is measured by asking for the fields that are needed, a clip
that is too big for the time the Host gives is made smaller first (fewer
frames, a smaller frame, a smaller file) and the working copy is thrown away
afterwards, and a call that ran out of time is asked again with the next size.
The card that is empty is named as well, so "this picture" is not the whole
of the answer.
On the real machine: the user's own 视频模仿 canvas, with the 反推提示词 node
pressed, read the clip in 23.9s and wrote the prompt - the downstream node
carried it on.
* ai-node-canvas 0.81.0: the ready-made templates are the ones the user tuned
The thirteen ready-made workflows were written into the code, and they were
not the chains this user works with: his own seven - 图片复刻, 视频模仿 and the
five shapes of H3 - are the ones he opened, changed and kept. So the ready-made
set is now those seven, with his changes in them, and the other six are gone.
A template is data, so the shipped ones are data too. They lived in a
475-line array in templates.mjs; they are now seven files under
miniapp/templates/, each one saying the whole of itself - the title, what it
is for, the group it belongs to and the steps. Changing a shipped template is
a change to a file, and the file can be read, copied and handed to somebody
else.
On the real machine the panel shows 从素材出发 (图片复刻, 视频模仿) and H3 (T2VA,
I2VA, FL2VA, L2VA, the full-reference set), and the seven templates of the
user's own are still where they were.
* ai-node-canvas 0.82.0: the tools refuse what they cannot do, and say what they did
An audit of the whole MiniApp - the page, the Node service, the MCP surface,
the Skill and the two READMEs - found that several things did not say what
they did.
The MCP tools published a schema and did not enforce it: a missing argument,
a value outside an enumeration and an argument that was not in the schema all
reached the implementation. The schema the Agent reads is now the schema the
tool enforces. A mode the node does not have is said out loud instead of being
quietly ignored, and a named port is a slot of its own - the first frame
cannot be filled twice.
The canvas read gave the Agent a status and nothing else: not the reason a
run failed, not the material a node holds, not the template its prompt node
expands, and two picture ports that were the same port twice. All of that is
in the answer now, and a port that has a role says which one it is.
Two of the answers were wrong. A run the page did not acknowledge was
reported as "on its way", although a run is never repeated and may never have
started; and a node that is busy said nothing, so the caller could not tell
"it is busy" from "it did not start". A busy node now says so in its own
words, and a run without an answer is not on its way.
The cap on the references was a number of our own - ten - while the provider
takes twelve items in all, so a request it would have taken was refused. The
cap is the provider's now.
A template of the user could carry a step that removes a node, and a
template is the skeleton of a chain: it may make nodes and draw lines, and
nothing else.
The Skill named seven of the nine MCP tools, so the Agent could not see the
ready-made workflows or put one on the canvas. It names all nine now, and it
says what the canvas does that the MCP cannot reach. Both READMEs said
"eight kinds of node" (there are seven), "six modes" on the video node
(there are five), "four H3 shapes" (there are five) and "two reading tools
and five writing ones" (there are three and six), and the English one said a
run fills the node it was pressed on - it lands on a result node instead.1 parent 8418a10 commit 877ea1c
49 files changed
Lines changed: 30943 additions & 0 deletions
File tree
- plugins/antianqi/ai-node-canvas
- .minimax-plugin
- miniapp
- client
- node
- templates
- skills/ai-node-canvas
- tests
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
77 | 77 | | |
78 | 78 | | |
79 | 79 | | |
| 80 | + | |
80 | 81 | | |
81 | 82 | | |
82 | 83 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
77 | 77 | | |
78 | 78 | | |
79 | 79 | | |
| 80 | + | |
80 | 81 | | |
81 | 82 | | |
82 | 83 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
0 commit comments