Skip to content

Releases

Tramme Beta v0.20.0-beta.3

Pre-release

Choose a tag to compare

@github-actions github-actions released this 05 Nov 18:51

A beta build of the desktop app, made from develop at b433b8f. It is its own app, Tramme Beta, and does not replace Tramme.

Tramme Beta v0.20.0-beta.2

Pre-release

Choose a tag to compare

@github-actions github-actions released this 05 Nov 18:08

A beta build of the desktop app, made from develop at 50dd567. It is its own app, Tramme Beta, and does not replace Tramme.

Tramme Beta v0.20.0-beta.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 05 Nov 17:11

A beta build of the desktop app, made from develop at b3d9c66. It is its own app, Tramme Beta, and does not replace Tramme.

Tramme v0.16.0

Choose a tag to compare

@github-actions github-actions released this 30 Oct 01:57

Added

  • Retouching in the studio: pin several things on the picture at once, each a point, a path drawn with the finger (a line for the assistant to follow or lay things along) or an area drawn round or across layers to select them. An area only proposes layers: you drop or add some, then confirm, use it as a hint with no layer chosen, or set it aside (the setting Selecting layers by drawing: always, above three layers, never). Retouches, typed or spoken, are added to a list that can be reordered, taken back to change and removed, then sent all at once as one turn, each with its own pins, moment and scene.
  • A library of references (taste and finish, step 8): references reads principles and faults of the craft in words, with how to see each and how to fix a fault; reference-keep keeps the user's own films with their reasons and the facts read from them, and the library warns when the films kept converge on one look; the critic is told the faults. Typefaces and references share one normalisation of words.
  • Scene by scene (taste and finish, step 7): a film planned with three scenes or more is built one scene per fresh context (the plan's scenes gain comp, brief and status; scene-done), each kept to its own composition by a scope on its proposals, then assembled in the director's conversation; the Studio's notes show each scene under its name and bench/usage.ts prices each apart. The setting Scenes built apart turns it off.
  • The critic (taste and finish, step 6): critique has the film reviewed in a fresh context by a model that did not make it, against a measured definition of done that it cannot overrule, with strips around every cut and entrance and the style frame; scene-takes makes two or three takes of a scene that failed twice and keeps the best; Critic rounds is a setting; its cost is counted apart. Along with @ to tag assets in the message box and the home's box.
  • The missing vocabulary (taste and finish, step 5, the rest): the interface pack (ten pieces, light and dark, and the screen tool that fills a device-screen with them), 3D solids (solid.3d: box, slab, sphere, torus, capsule, cylinder in matte, glossy, glass or metal, lit by an environment image or a studio gradient; model.3d takes an env too, and the two share gl3d.ts), candlesticks and price lines in the Charts pack (1.2; plain numbers are now a series, which chart.line's own default needed), and compare, a render beside a target and their difference with a likeness score and the words on what differs most (the measure moved to core, and tramme compare uses it). The guide names them. See Interface pieces, finance charts and the comparison.
  • Layers in perspective, a corner pin and a push onto a detail (taste and finish, step 5, in part): rotationX and rotationY turn a layer around its horizontal or vertical axis in the composition camera's perspective; the fx.pin corner pin and the pin tool carry a picture onto four corners, given or followed from another layer; the push-in tool pushes the camera onto a detail and back with its text kept readable. The checks and the viewport read a tilted layer through its quad; the Lottie and SVG exports draw it flat and say so. See Tilts, the corner pin and the push-in.
  • Material (taste and finish, step 4): generate-image makes objects on a transparent ground (object), in the style of the film's target; the surface tool lays nine textures and lights drawn by the engine (grain, paper, halftone, gradient, glow, ribbons, grid, bokeh, caustics); the stock tool searches the free libraries (Poly Haven and ambientCG textures, environments and models; Pexels and Openverse photos; Pexels clips) and keeps the chosen file with its licence; real logos and pictures are fetched only with your yes and listed when nobody is there; the credits tool now covers every fetched or made file. A Pexels key can be connected in the settings. See Surfaces and Stock.
  • A film plan and style frames (taste and finish, step 3): before building, the assistant writes the few kinds of picture the film alternates (interface, type, object, data, diagram, photo, 3D, character, map) assigned to scenes, and one to three directions written precisely (film-plan). An image model draws a style frame for each (style-frames, a Style frames setting: Off, 2 or 3); the one kept is the film's target: its palette becomes the project's colours, its lettering is matched in the typefaces catalogue (typefaces takes it to compare), its plates and objects are made again without words. The check says when scenes as built repeat one form, and the Direction panel of the studio shows the plan and the target. See Film plan and style frames.
  • Typefaces (taste and finish, step 2): the typefaces tool looks for open families by character ("condensed grotesque, heavy, for titles") and shows them on a specimen sheet set in their own letters; typeface-use brings the chosen ones into the project as font assets, their files at a pinned version under assets/fonts/ with a record of their licence. The recipes write headlines in the display face and the rest in the text face, and the assistant's instructions tell it to pair a display face with a text face and never to leave the system font. See Typefaces.
  • The assistant finds what already ships (taste and finish, step 1): the packs' entries are listed by need in its instructions, it is told to search the vocabulary before writing a plugin, and the plugins it wrote in a turn are listed to you at the end, to keep in the library.
  • A phone, browser or window frame around an interface built in layers: the Frame for an interface built in layers tool of the walkthrough pack lays the frame with a content group that the screen clips; ui.device draws without a screenshot and in two parts.
  • tramme check <doc> prints the picture checks of a project, folded by cause.
  • A coverage check for a talking video: the stretches with only the speaker on screen (a note from 12 s, a warning from 20 s).
  • A timeline by tracks (montage.md): a composition can be a sequence, its clips on picture and sound tracks with lock, hide, mute, solo, a magnetic mode that closes gaps, a height, and an adjustment clip for a range of tracks. The format gains optional fields only (kind: "sequence", tracks, a clip's track and link, a track's volume, pan, bus, to); a document without them is read as before.
  • The edits of a video editor, one function each in @tramme/core and the same for the keys, the mouse, the assistant: ripple delete, ripple trim, roll, slip, slide, insert, overwrite, reorder on a magnetic track, linked clips, a video's sound detached on its own track, copy and paste with the look, cut at the playhead (Ctrl+B, Q, W, Shift+Delete, L, , and .).
  • Media: bins, tags and a search that also finds a word said in a clip; a source monitor with in and out marks and sub-clips; media gone missing listed offline (the preview goes on, an export names them, "Find the files…" brings them back); clips lined up by their sound; multicam (one camera per track, a panel that cuts between them); drag a media or a composition onto a lane; several compositions open in tabs.
  • Sound: a mixer with a strip per sound track and bus (volume, pan, mute, solo, automation written by moving a fader while the film plays), a loudness target and a measure, and a voice-over recorded on the timeline.
  • Picture: match the look of a shot to another's with editable colour wheels; Real-ESRGAN as a choice for enlarging pictures (the built-in Lanczos stays the default).
  • Publishing: presets for a vertical short, a square, a landscape film, a 4K master and a GIF, with what stands in the way listed and fixed; export the marked part (I and O); exports in line, each on the film as it was asked for; chapters (markers of kind chapter) written into the files the command line renders, and copied as a list from the browser.
  • The assistant has the editing operations as tools: ripple_delete, insert_clip, overwrite_clip, ripple_trim, roll, slip, slide, detach_audio, link, sync_clips, add_adjustment, match_look, publish. A guided tour of the lot.
  • The hesitations cut by the fillers tool can be reviewed and put back one by one from the media panel.
  • Guided tours for what had none: Grade and match a look (the scopes, matching a shot to another, the 10-bit export) Make it yours (tokens, plugins and packs, the tours plugins bring) and The tools of the / menu (footage, voice, the material read, whole motion pieces, following an object, pictures and clips by a provider, reuse, checks). The tricks tour gains masks and the viewport's safe zones, grid and onion skin; the home tour names the language setting. The montage tour gains several cameras, adjustment clips and chapters; the sound tour, recording a voice-over; the assistant tour, dictation and the messages that wait while it works. A test checks that every place a tour points at exists in the interface and is listed in docs/tours.md.

Fixed

  • The bar of a browser or window frame (the walkthrough pack) is drawn at the top of its frame; it was drawn from the frame's centre, und...
Read more

Tramme v0.15.1

Choose a tag to compare

@github-actions github-actions released this 28 Oct 02:57
4b3dd0e

Fixed

  • The local companion transcribes in the language spoken too: it ran Whisper without a language, so transformers.js took English. It now reads the language from Whisper's first step, as the browser does, and tells it back so the next chunks of a long sound keep it.
  • A video added from the assets plays whole: its layer is as long as its file, and a composition shorter than it lengthens to hold it (one undo takes both back). A 12-minute video added to a new 5-second project was cut to 5 seconds and looped there.
  • The cut in the file reaches past the composition: stretching a video's end past the composition's end lengthens the composition with it, so what was taken is seen and played instead of falling after the end.
  • The model chosen stays chosen: the companion missing one of the editor's checks (busy with a turn or a transcription) no longer replaces the model picked with another connected AI's; that takeover now only happens at startup, while the chosen model has never answered.
  • A media file's length that cannot be read no longer hangs: reading it gives up after two retries, where the media library's default tried again for ever.

Tramme v0.15.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 01:25
9c66c78

Added

  • A queue for the messages written while the assistant works: every message box (the conversation, the Studio's direction bar, the notes) keeps accepting messages during a turn. They wait above the box, each with a button to take it back, and leave together when the turn ends, as one turn of the assistant, each with the context of the moment it was written (the time, the selection, the scene, the pin), so "this layer" is the layer that was selected then. After a stop or a failed turn the queue stays, with a "Send now" button, and leaves with the next message; a turn that ends with a proposal waiting for a decision holds it until the proposal is applied or rejected. The queue survives a reload of the page.
  • Dictation: a microphone in every message box (the home page, the conversation, the Studio's direction bar, the notes). Click to speak, click to stop, and what you said is written where the cursor is, for you to read and send; Escape drops the recording. It runs on the downloaded Whisper model first (Whisper base, 80 MB, is offered when none is downloaded), and a setting in Models, Sound chooses the downloaded model, the companion or the server. The desktop app asks for the microphone (NSMicrophoneUsageDescription on macOS).
  • Haiku 5.5 in the model list, next to Haiku 4.5, with adaptive thinking and the five effort levels (no server-side fallback is asked for it). The default model does not change.
  • The conversation's cache lifetime, as a setting: 5 minutes (as before) or an hour, in Settings, Behavior. An hour costs more to write and less when you come back after more than five minutes.
  • The bench prices and compares the assistant's turns: every route now reports its usage (the chat-format providers through stream_options, with the cached share where each gives it; cache writes split by lifetime; each turn names its route, and says when it has no usage rather than counting zero). node bench/usage.ts adds the dollars (a price table for Claude, "unknown" for a model without one, "at least" for Haiku 5.5), the cache share and the route per turn, per conversation and in all; node bench/usage.ts --compare <before> <after> compares two series of runs. Costs stay in the bench, never in the chat.
  • Clips, made by a provider (generation-roadmap.md, step 5): generate-video has Veo 3.1 Fast, through Hydracept, make a 4, 6 or 8 second shot from words, or animate a still picture of the project as its opening frame. The clip is saved under assets/videos/ with its record (.video.json), proposed as a video layer at the playhead, and answered with a frame so the assistant judges it; again and change make it again from its record. A new Videos section in the settings sets the provider and the length. Each second is billed, so the user says yes first, as for the pictures and the sounds.

Changed

  • The system prompt is in cache order: the same text, reordered, so that the reference (docs/document.md) follows the instructions and comes before what changes with the project (the installed plugins, the packs, the brief). The Messages API caches the fixed part apart for an hour, so it is served from the cache across projects; the other routes get the same order in one piece.

Fixed

  • The local companion is found whenever it starts: the app looks for it again every few seconds while it is missing and every fifteen once it answers, on every screen and whichever route works, and when the window regains focus. A companion started after the app, or one that stops, is noticed without a reload.
  • Speech in any language, transcribed in it: transformers.js transcribes as English when it is not told the language, so a French dictation came back as English words. Whisper's own first step now tells the language spoken, for dictations and for the sounds transcribed in the browser.
  • Dictation, quicker the first time: it runs Whisper on the processor in the compact weights the download offer names (77 MB), where a GPU fetched the full ones (291 MB), and shows the download as a percentage beside the microphone. A second click while the microphone opens no longer opens it twice, and the recording time never shows below zero.

Tramme v0.14.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 10:27
de50267

Added

  • Shorts, framed closer and cut from any video (shorts-roadmap.md, steps 2 and 5): a speaker small in the frame gets a gentle push-in that settles over the short, and when the people detector hesitates the frame follows the cutout's mask instead. A video nobody speaks in — a match, a ride, a build-up — gets its candidates from its sound and its cuts (the build-ups into a louder section, the loudest moments, snapped to cuts and bar lines), described in words so the assistant picks the same way, and its shorts build without captions.
  • Pictures, chosen and changed (generation-roadmap.md, steps 2 to 4): a new Pictures section in the settings sets the provider by default, the quality and the size at most (small asks the provider's cheapest size). generate-image makes up to four takes of an ask — a contact sheet in the conversation, one click keeps one, the others are never saved; makes a picture again from its record changing only what is asked (again and change); changes a reference — an image asset or a frame of the video — with the project's palette sent along (OpenAI and Gemini), a mask saying where (the cutout tool makes them), or extends it past its edges to a wider format; and brings a small picture to the size of the frame before placing it.
  • Logos in 3D (plugins/extrude.js, packs-roadmap.md, step 17): a logo that turns for an opening or an end card. The extrude tool (/extrude) takes the path layers of a logo or an icon (an SVG through svg-paths, or one path), reads its holes, extrudes it with a bevel and writes it as a .glb — one material per colour of the logo — that the built-in 3D model layer draws turning on its turntable under the studio light, its yaw, pitch and explode keyable. The faces are triangulated by ear clipping with the holes bridged in; the flat logo stays, hidden, to edit and extrude again. Type is extruded once it is outlined in the SVG.
  • Kinetic type, further (plugins/kinetic.js 1.1.0, packs-roadmap.md, step 16): two new moves for a word, a name or a figure. scramble runs every character through others, seeded, before each settles in turn from left to right — a code breaking, a name revealed. flap lays the text on a split-flap board: each character flips through the drum to its own, the top half of the old flap folding down and the bottom half of the new one opening, a departures board or a counter. Both are pure functions of time, with a preset each.
  • QR codes (plugins/qr.js, packs-roadmap.md, step 15): an end card the viewer scans. The pack encodes the code itself (ISO/IEC 18004: byte mode with UTF-8, versions 1 to 20, the four correction levels, the mask of least penalty) — its symbols are the same, module for module, as a reference encoder's. The qr.code node draws the modules square, rounded or as dots in ink on a plate with its quiet zone, a logo in the middle (the code goes to level H to carry it), revealed module by module as a sweep or a seeded scatter, and exports as SVG and Lottie. The qr-scannable check flags modules under 5 px, a quiet zone under four modules, light modules on a dark plate or ink under 4:1, and a code on screen for less than 3 s.
  • Print looks (plugins/print.js, packs-roadmap.md, step 14): a whole film printed as a risograph. Four GLSL finishing passes, computed on the frame in linear light inside the pass: print.halftone (an AM screen of one ink on a grid turned by the angle — the cell sets how coarse it reads), print.riso (two inks, each a little off register, multiplied into paper that carries a grain), print.grain (film grain sized by the luma — brighter places carry bigger grains), print.duotone (the picture's light laid between two colours). Three stacked presets: risograph, newsprint, two-tone. Each pass compiles in the render tests' Chrome and gives its known pixels on a gradient.
  • Rigid bodies (plugins/physics.js 1.1.0, packs-roadmap.md, step 13): a small engine in the pack — boxes, circles and convex polygons falling, colliding, stacking and coming to rest. stepWorld is pure (frame 90 is the same reached directly or frame by frame), solves with sequential impulses over SAT contacts (the least-overlap axis, the contact clipped to the face, a twin point when a face meets a face — a stack needs two to stand), friction in the cone, restitution fading under a walking pace, a touch of damping, the overlap eased out and a body slow for a while put to sleep. The phys.bodies node runs it through the engine's checkpoints with the frame's sides and floor as static bodies; the text drop's letters are bodies now, so they knock into each other and pile up the way they land.
  • Matter pack (plugins/matter.js, packs-roadmap.md, step 12): the row the plugins roadmap left open. The matter.morph node walks both shapes again at equal arc length and matches their winding and their starts (the rotation of the second that meets the first with the least summed distance), so an icon becomes another without twisting, its curves followed, several contours paired by size and place and the extra ones growing from a point. The matter.liquid node paints seeded blobs that merge and part — a field of circles traced by marching squares, oriented so the loops chain, drifting as slow as lava, or as a flood crossing the frame from the left and draining back. The matter.paper node sweeps a sheet across the frame, covering it at the cut, its edge torn by seeded noise with its fibres and its shadow, the same in every render. All pure functions of t: the liquid answers any frame in any order.
  • Formulas (plugins/math.js, packs-roadmap.md, step 11): a TeX subset laid out by the pack in STIX Two Math (OFL) — no MathJax, no network. The parser reads fractions, scripts, roots, sums and integrals with their limits, small matrices (\begin{pmatrix}), \text, \color and \mathbb, the Greek letters and the common operators (\cdot \times \le \ge \ne \infty \to), an unknown command throwing with its position; the layout walks the tree and places each glyph from the font's own table (glyphs.json, 216 glyphs extracted once from the font by scripts/packs/math_glyphs.py + scripts/packs/math.ts through the SVG reader), each symbol an id stable per occurrence so the math.formula node can change one formula into another — the shared symbols move to their places, the others fade and arrive, the way a proof unfolds on a board. Variables are set in the font's math italic. The formula tool copies the glyph table into the project once, so a formula draws the same everywhere, and refuses a symbol the font does not carry; the formula-legibility check flags a size under the format's floor and a formula on screen for less than its reading time (slower than text).
  • Audiogram pack (plugins/audiogram.js, packs-roadmap.md, step 10): a podcast extract as a clip for the feeds. analyseAudio now computes the sound's 32 log bands (40 Hz to 16 kHz, an FFT of 2048 samples at every frame of its 50 Hz rate, saved decimated to 12.5 Hz — a 30-minute analysis stays under 6 MB), and the audiogram.wave node draws them as bars, a mirrored wave, a line or a ring at the moment of the extract that plays, rising with the voice and falling back like a meter, a playhead crossing; the audiogram tool lays the clip out, varied by a seed — cover behind, the show's name, the wave, the words said as captions when the sound has its transcript, a progress bar trimming itself across, the sound (or a video's own) playing from the moment asked. Each band is read against its own loudest moment, so a pause reads as a pause. A 1 kHz tone lights its band; the bars read the bands linearly between the frames.
  • Maps pack (plugins/maps.js, packs-roadmap.md, step 9): "our offices in Lyon, Montreal and Dakar" becomes a map, offline. Natural Earth (public domain: countries at 1:110m and 1:50m, first-level regions, 7 000+ populated places) ships beside the pack, simplified and quantised to 1e-4° by scripts/packs/maps.ts; the map tool (/map) finds places by name with the accents folded and the aliases known ("NYC", "Bombay"), asks back when a name is ambiguous ("Springfield" is five), picks the projection and the framing from what is shown, and writes into the project only the shapes the map shows (a two-country atlas is about 2 % of the 50m file). The map.view node draws the countries from the tokens, the named ones in the accent, pins with their labels kept apart, routes as great circles drawn on; the camera (centre and zoom) animates, and with a route it flies from one place to the next on van Wijk and Nuij's smooth zoom — out in the middle, exactly on its end, never faster than the eye follows — while the route draws itself, then pulls out to the whole map. A still map exports as SVG. The map-legibility check flags highlighted countries too small at their zoom, labels with no room beside their pins and a zoom that doubles in under 0.6 s.
  • Charts, further (plugins/charts.js 1.1.0, packs-roadmap.md, step 8): the chart tool reads a CSV (separators , ; and tabs sniffed from the first line, quoted fields with doubled quotes kept whole, decimal commas read as numbers) and, with kind: 'race', turns a table of periods by entries into the chart.race node, keyed to run over the composition — bars sliding to their new rank, values rolling, the period shown large behind, the leaders kept in view and the tail cut (12 racing at most in 9:16, 20 in 16:9, the cut named). The chart.scatter node draws two measures together, points travelling between periods with their trails, labels kept apart. The `cha...
Read more

tramme v0.13.0

Choose a tag to compare

@github-actions github-actions released this 25 Oct 12:02
de86eda

Added

  • Diagrams pack (plugins/diagram.js, packs-roadmap.md, step 2): flows, architectures, cycles and trees written as flowchart text (a Mermaid subset: A[Label] --> B(Round), C{Decision}, -->|label|, ---, -.->, subgraph; LR, TB, RL or BT to force a direction, left out to let the format pick it — left to right in 16:9, top to bottom in 9:16; errors name their line) or the same as JSON. The parser reads it; a layout written in the pack, pure and deterministic, places it — layered (ranks by longest path, crossings reduced by barycentres, coordinates balanced), a ring for cycles, a hub for stars — and the diagram tool (/diagram) expands it into ordinary layers: boxes (shape.rect, the kit's radius), labels (wrapped, sized to the format), edges (shape.path with their arrowheads, drawn on with the trim between their ends' arrivals), revealed in reading order with an uneven stagger, in one group; a highlight node dims the rest and lifts one route through the graph in the accent. The diagram-legibility check flags a label overflowing its box or set too small, an edge crossing a label, and more boxes than the format holds at once (about 12 in 16:9, 8 in 9:16).
  • Icons pack (plugins/icons.js, packs-roadmap.md, step 1): Lucide 1.61.0 (ISC, 2 166 icons with their tags) shipped beside the pack as plugins/icons/lucide.json, converted by scripts/packs/icons.ts through the SVG reader into path values on the 24-unit grid. The icon tool (/icon) finds pictograms by name, tag or a few words (ranked search with synonyms of the common words: "money" finds banknote, wallet, coins), lays one or several in a row, a grid or beside the lines of a list, in the film's colours (@Ink, @accent or a colour), each a group named icon:<name> of path layers with round caps and joins, its stroke riding the group's scale, its contours drawing themselves with the trim, staggered unevenly; when the words are vague, the candidates come back as a contact sheet of named icons. The icon-stroke check warns when an icon's stroke is under 2 px at the composition's size and when one group mixes weights.
  • Packs, step 0 (packs-roadmap.md): the ground the packs stand on, in tramme itself. Strokes that draw themselves: trimStart, trimEnd and trimOffset (0 to 1, animatable) on shape.rect, shape.ellipse and shape.path, measured along the outline's length and drawn as a window of the stroke (a dash over it), by Lottie's rule (an end before the start swaps with it; a rectangle's outline starts on its right side under the top right corner, an ellipse's at the top, both clockwise), so a trim draws the same stretch in the preview, in Lottie and in SVG; exported to Lottie as trim paths (tm, the fill kept whole in its own group) and to SVG with pathLength and a dash; the shape.path note rewritten on them, and the map-journey recipe reveals its line with them instead of a matte. SVG to paths: an SVG reader in packages/interop (path data with arcs as cubic Béziers, circle, ellipse, rect, line, polyline, polygon, their transforms and their groups' presentation, one contour per shape; the viewBox mapped into the drawing's size, an unstyled shape filled in black as SVG does, arc flags read even when written against the next number) beside the export, and the built-in svg-paths tool (assistant and / menu) that turns an SVG asset into a group of path layers with their fills and strokes, its strokes drawing themselves on the kit's curves. Packs that carry data: a pack may hold a folder beside it (plugins/<pack>/), its files read at authoring time with ctx.packFile from the editor's own origin, offered to a plugin whose meta.id is a shipped pack's (tramme/<pack>, which the packs now declare) and to a project's own copy; the data is never copied into the project. The assistant reaches the packs: the shipped packs' nodes, tools and presets are found by list_nodes { query } even when the project holds none (counted, not listed), a proposal that draws with one adds it to the project in the same undo step (the installed plugins' path: the copy on first draw, the version recorded), and the system prompt names them in one line. One test for every pack: packs.test.ts reads plugins/index.json and runs the shared checks on each pack it lists — registers, every node validates with its default props, and every title, label and description carries its French.
  • Stick figures pack: Pivot and StykAnimate-style characters in plugins/styk.js. The styk.figure node draws a rig of fixed-length segments (after StykAnimate's "Blue" and Pivot's default man, or any figure the project defines): the pose property gives each segment an angle relative to its parent, held key to key like Pivot animates, driven by an expression, or reaching a { target: [x, y] } with two-bone IK (bend picks the elbow or knee side) and stretching with { a, l }; keyframed poses hold, the way Pivot's frames do. The styk-figure tool lays a figure in the composition (the man, the plain black one, or one already walking — a 1 s walk cycle of eight held poses), and the styk-figure check flags a pose naming a segment the figure does not have, an IK target the limb cannot reach, two targets on one chain, and a rig with a missing parent, a cycle or a duplicate id.
  • The / menu on the home screen: the direction box offers the tools and workflows as the message box does (the same menu, shared). A project started with /name sends its words with that command, as the message box would; a tool named alone waits in the editor's box with its form.
  • Native notifications in the desktop app: a question waiting for the user's answer and the end of an assistant turn are told by the system's notifications (Tauri's notification plugin), the web view showing none of the web's.

Fixed

  • Playback could start again from where it was paused rather than where the playhead had been brought, and play every sound twice or more at once, right after Play or when a loop wrapped: until the sounds had loaded, the frames still read the last playback's clock (the audio context runs on while paused), which landed past the end, wrapped and started another playback over the first. The clock now starts at once, and a start overtaken by another or by a pause schedules nothing.

tramme v0.12.0

Choose a tag to compare

@github-actions github-actions released this 21 Oct 02:08
82ab6d1

Added

  • Time displacement: the time.shift node reads a composition later in some places than in others: slit-scan along a side, a time ripple from the centre or the edges, or a liquid time in noise patches. It keeps a ring of past frames as a 3D texture and stays a pure function of time.
  • Faster blurs, shadows and glows: a layer's Canvas 2D filters now run over its box, grown by what they spread, instead of the whole frame. The effects load case renders in 6.8 s a frame instead of 27.4 s on a machine without GPU raster, with the same pixels. An effect can say how far its filter spreads (canvas2d.reach); without it, the whole frame is filtered as before.
  • Installed plugins in every project: an installed plugin's tools, checks, workflows, kits and presets are offered in every project. They run in the project's sandbox, never on the page, and the project's own names win. A project can turn one off (meta.pluginsOff). When a layer, an effect or a modifier of one first enters a project, the plugin and its own files are copied into the project's plugins/ in the same undo step. Its version is recorded in meta.installedCopies, so the project opens the same anywhere, and a newer installed version is offered per project, never applied without the user. A project holding such a copy is always drawn through the sandbox. A plugin reaches only what it declared (meta.permissions): its network origins and provider routes through the new ctx.fetch, and writes under assets/ and its declared paths. It is stopped for the session after three failures in a row. The assistant's list_nodes takes a query that finds the installed plugins' nodes and tools, left out of its index, and the system prompt names the installed plugins.
  • Installed plugins: a Plugins section in the settings installs a plugin once on this device, from a .js module or a .trammeplugin package (a zip of the module and its own files), picked or dropped. It asks first, before any of the plugin's code runs: what the plugin brings, what it may reach and its API version. An update asks again only when it asks for more. Each plugin can be turned off or removed, and all of them can be exported as one backup and imported back. The plugins are kept in the desktop app's folder, in a folder the user picks (Chrome and Edge, with the File System Access API), in the browser's storage (made persistent where the browser allows), or on the private deployment's server. A plugin's meta grows an id, a licence, an author, a homepage and its permissions; plugins without them stay valid.
  • 10-bit exports: tramme render --depth 10 reads each frame at 16 bits from the compositor's half-float frame, not rounded to 8, and writes H.265 Main 10 (MP4), ProRes 4444 (MOV), VP9 profile 2 (WebM) or 16-bit PNG; the browser's export offers 10 bits for MP4 and WebM when this browser encodes them (asked to WebCodecs first: H.265 Main 10, AV1 or VP9 profile 2) and says when it cannot. Gradients made by the effects and the finish keep their levels; exports stay SDR.
  • Long jobs that resume: the video jobs run in chunks saved as they finish, say how long is left, can be cancelled, and pick up where they stopped. Two of them: upscale makes a picture or a video twice its size (Lanczos, lightly sharpened), and interpolate makes up the frames between a video's frames (2 or 4 times as many, along their motion), saved as a copy linked to it (interpolated, a new optional field of an asset): a layer slowed under 1× plays the copy and slows smoothly instead of repeating frames.
  • Smoother skin, when asked: the skin tool finds the faces of a video (MediaPipe's Face Landmarker, in the browser) and saves the skin of each as a mask video, eyes, brows and mouth left out; fx.smooth, a surface blur that keeps edges, softens the video through it, lightly by default. The landmarker joins the models of the settings (Faces).
  • Hesitations cut: the fillers tool finds the "uh"s and "um"s a transcript leaves out (where a voice detector, Silero VAD, hears speech and no word is written; the ones a transcription model wrote too) and cuts them as the silences are cut, the transcript of the edit remapped and the captions reconnected. Each cut is listed with its moment, and restore puts any back by its number. Silero VAD joins the models of the settings (Where someone speaks).
  • A clean voice: the denoise tool takes the background noise out of a voice (RNNoise, in WebAssembly, loaded when first used, faster than real time) and saves the cleaned voice beside the original, which stays (clean, a new optional field of an asset); the layer plays the two mixed by its Clean voice amount, 0.85 by default so the voice keeps its life. The check warns about a voice whose noise floor is high, and the assistant cleans such a voice before captions and sound design.
  • Parallel export: tramme render cuts the film into segments rendered at once by several pages of the same Chrome (as many as the machine's cores and memory allow, --pages n to choose, --pages 1 for one after the other), each encoding its own, then joins them without encoding again; the sound is mixed once over the whole film. The frames are the ones a single page draws, simulations included.
  • Components in the editor: an instance shows its component's parameters in the inspector like a node's properties (animatable, linkable), its overrides marked and removable, a button to open its component and one to detach it; any property of a composition becomes a parameter from its menu (Expose as a parameter), and the composition lists its parameters and how many instances use it. Components are marked in the compositions list, and kept in the library shared by the projects (component-keep, component-use).
  • The assistant writes things once: define_component turns layers into a component and an instance in their place, instantiate places one or a whole distribution of it, detach turns an instance back into layers (the / menu has them too). The assistant's guide asks for a component as soon as something repeats, and a new check, Repeated elements, points at layers written several times nearly the same. The section titles, keywords, lower thirds and end cards are placed as instances of a component of their look, their words as parameters: two keywords share one component.
  • The time field: the timeField modifier reads an animation later for some elements than for others, by rank (the old Offset, which it now runs), along a direction, by distance to a point or a layer, or by noise that can drift: a wave, a ripple, a liquid time, from one animation. A distribution takes one too (time), so a hundred instances become one wave. A modifier's amount or seed can be keyframed and slides.
  • Distributions: a comp layer makes N instances of its component at once (distribute), on a grid, a line, a circle, along a path or on another layer's points, as many as asked or one per row of a JSON asset; each parameter is given by a rule (a value, an expression of index, count and row, the palette in order or at random). Each instance has its rank, so the offsets and the noise of the modifiers keep working across instances. Expressions read index and count everywhere.
  • Components: a composition that lists params (each with its type, the properties it lands on and a default) is a component, and every comp layer holding it an instance with its own values (params, fixed or animated) and its own changes to any property inside (overrides); changing the component changes every instance. An instance can be detached into plain layers that draw the same. Styles are sets of properties defined once at the document's top level and applied to any layer (styles); keyframed, a style is an animation played from where it is used. New optional fields of the document.
  • A Models section in the settings: the model each local tool runs (the cut-out of a person or of any subject, detection, depth, transcription) is named with its size and licence, and another can be chosen for this computer, among models whose input and output tramme knows; detection, depth and transcription also take any model of the hub made for their pipeline, tried on a blank input before it is kept. A model whose licence forbids commercial work says so.
  • The models in this browser, by hand: the Models section says whether each model is downloaded and how much it weighs, downloads it ahead of its tool with its progress, deletes it, and lists the models no tool uses any more with the space they take.
  • Transcription without a server or a companion: the desktop app and the personal deployment transcribe in the browser itself when neither the server nor the local companion can, with the model chosen in the settings; the companion runs that model too (TRAMME_WHISPER_MODEL still overrides it on its machine).
  • An asset made by a model says which: the cut-out's masks, the pictures cut out, the depth maps, the people found, the tracks and the transcripts keep the models and versions that made them (madeBy, a new optional field of the document); another model chosen later never changes them.
  • Voice effects: a sound or video layer's voice can be pitched (in semitones, its length kept), or sound like a robot, a telephone, a radio, a megaphone or an echo, the same in the preview and the exports; with Keep the pitch, a voice at another speed or on a speed curve keeps its pitch.
  • Proxies: the proxy tool encodes a lighter copy of a video (540 lines) that the preview plays instead, so a 4K or high frame rate file plays smoothly while editing; the exports keep the original. Importing a video this computer decodes too slowly offers one (measured on a second of it). Settings → Preview → Play proxies.
  • Stabilisation: the stabilize tool takes the camera's shake out of a video, s...
Read more

tramme v0.11.1

Choose a tag to compare

@github-actions github-actions released this 19 Oct 21:46

Fixed

  • The home screen's format choice (16:9, 9:16, 1:1, 4:5) drew each format's rectangle above its ratio instead of beside it, on a computer as on a phone: since 0.11.0 the label of a segmented control is an element of its own, and the rectangle inside it broke the line.
  • On a phone, a project of several shots pushed the name and the export out of the top bar: the composition picker stayed in it. It leaves the bar under 900 px with the format, and the ⋯ menu now shows from that width, so both stay at hand (between 760 and 900 px the format had no way back).
  • On a phone, the home screen's brief lines up with the films under it, and its format choice spans the box's width in four equal parts; it sat indented, the formats left-aligned under the other buttons.
  • On a phone, the settings' search spans the dialog's width.