Skip to content

Releases: nanoodlecom/nanoodle-py

v0.5.0 — parity with nanoodle-js 0.8.0, and timeouts that let go

Choose a tag to compare

@mikkel mikkel released this 30 Jul 03:02
deea945

Two changes: parity with nanoodle-js 0.8.0 (#11), and a timed-out run no longer hangs your process (#12).

⚠️ Breaking: a named node now advertises its own name as the input key

If you renamed a node in the editor, that name is now the input key — it used to fall back to a generic label. This matches nanoodle-js 0.8.0, so the same graph finally takes the same input names in both executors.

Confirmed renames on published workflows:

Workflow Was Now
pr-describe System prompt / System prompt 2 / System prompt 3 Drafter / Auditor / Final PR body
jingle System prompt / System prompt 2 Lyric writer / Style writer
visual-judge System prompt Verdict
narrated-poem System prompt Poet
video-teaser System prompt Shot writer

Run nanoodle-py inspect <graph> to see what any graph advertises now. Old keys still resolve where a label fallback covers them, but do not rely on that — use what inspect prints.

Parity with nanoodle-js 0.8.0 (#11)

  • Optional inputs. A node the author marked optional can be left unset, and consumers drop the empty value instead of failing.
  • Prompt caps. An over-cap prompt is trimmed to fit and the trim is reported — in the progress stream, in result.prompt_trims, and in --json. Your prompt text is never rewritten or paraphrased, only cut. Lengths are measured in UTF-16 code units so a prompt with emoji or CJK trims identically in Python and JavaScript.
  • --json on a failed run. A failed run now prints the same JSON object as a successful one — per-node status and error, the outputs that did complete, and the cost already spent — then exits non-zero. Pre-run validation failures print it too.

A timed-out run releases the process (#12)

run(timeout=…) used to return promptly and then leave the process alive, in the worst case for the full 600-second video timeout. It now exits in about 0.6 seconds.

  • Poll loops and their sleeps honour the run deadline, so an abandoned node stops instead of running to its own timeout.
  • A local ffmpeg or ffprobe child is killed at exit rather than orphaned.
  • Settled x402 deposits stay traceable. result.payments and --json carry every payment id, amount and explorer URL, with a status of sending, sent or failed — so a deposit that left your wallet is never silently lost, and a wallet callback that failed never claims money moved. A settled deposit still gets its request sent.
  • A paid retry that answers with a non-2xx status keeps the deposit unredeemed and names the payment id in the error you read.

Media fetching is deliberately not governed by the run deadline: a MediaRef you hold after run() returns still fetches its bytes, including partial results from a run that timed out.

Full diff: v0.4.0...v0.5.0

v0.3.0 — damaged share links salvage their graph

Choose a tag to compare

@mikkel mikkel released this 20 Jul 17:23

Share links mangled in transit (a character flipped or dropped by a chat app, a terminal line-wrap, or a manual copy) previously failed outright on the broken gzip CRC — even when the graph inside was intact.

Now strict-decode failures fall back to a best-effort salvage: the payload is lax-gunzipped (CRC trailer ignored, partial output kept on truncation) and the graph's nodes and links are recovered from the damaged JSON. Cosmetic editor state (pan/zoom, id counters) is sacrificed; Workflow.load surfaces a warning on wf.warnings suggesting a re-copy. Damage inside the graph itself still fails with the original clear error.

Mirrors nanoodle-js (nanoodlecom/nanoodle-js#22) — same semantics, same real-world regression fixture.

pip install -U nanoodle

PyPI: https://pypi.org/project/nanoodle/0.3.0/

v0.2.0 — share links, local media nodes, x402 accountless runs

Choose a tag to compare

@mikkel mikkel released this 17 Jul 03:27

What's new

  • Share-link loading — pass a nanoodle share URL straight to Workflow/the CLI; the URL is the package (#3)
  • Local media nodes via ffmpeg — resize, vframes, combine, soundtrack, trim, extractaudio run on your machine (#5)
  • x402 accountless runs--pay settles per call in Nano, no API key or account needed (#4)
  • Executor hardening for local media: wiredFramesFloor, deadlines, network-only inline cap (#6)
  • PyPI metadata: Documentation and Issues links (#2)

Install: pip install -U nanoodle — PyPI is current again as of this release.

https://pypi.org/project/nanoodle/0.2.0/

v0.1.3 — package metadata fix

Choose a tag to compare

@mikkel mikkel released this 11 Jul 20:00

Fixes package metadata that pointed at an unregistered domain.

  • Homepage nanoodle.io (never registered — NXDOMAIN) → nanoodle.com
  • Repository links moved from the 255BITS org to nanoodlecom

No code changes — executor behavior is identical to 0.1.2.

pip install --upgrade nanoodle

v0.1.2

Choose a tag to compare

@mikkel mikkel released this 11 Jul 03:59

nanoodle 0.1.2

Published on PyPI.

Changes

  • Agent skills: document npx skills add 255BITS/nanoodle-py@poster-generator, MIME-based Poster.<ext> output paths (do not hard-code .png), optional System prompt / --json, and JS vs Python skill-name coexistence
  • CLI: cost line prints remaining balance when the API reports it (cost: $… · balance: $…)
pip install -U nanoodle