Ask HN: How to quickly animate system sketches and 2D diagrams?
Animation brings a whole lot more to explanations, making simple explanations of how request coalescing works easy to understand, token simulations [0] through to helping explain concepts like Fresnel lenses [1]. Embedding them into GitHub READMEs, tweets and documentation would be awesome.
Google do it to illustrate posts (e.g. https://blog.chromium.org/2021/03/a-safer-default-for-naviga...).
I found Excalidraw Claymate [2] but the stop motion approach with no tweening support makes it painful to create animations where circles move from place to place. There's also Manim [3] but I think this is more for maths.
Adobe Flash used to be the go-to; what do you reach for when you want to illustrate a concept with an animated diagram?
0. https://github.com/bpmn-io/bpmn-js-token-simulation
1. https://news.ycombinator.com/item?id=30576688
62 comments
[ 3.0 ms ] story [ 149 ms ] threadRecently, I had a presentation with a diagram showing several components. One slide would have an arrow pointing from Component A to Component B. The next slide had an arrow pointing in the opposite direction. I just pressed back and forward quickly while I was explaining that these two components talk to each other. It got the message across well enough.
On the other hand, if you are explaining known concepts, there might be footage out there already for you to appropriate into your own work
Figma only does the equivalent of “magic move,” but it’s better than Keynote’s. I’ve used it to make sophisticated animations. See my Yow! presentation “Evolutionary Design Animated” for an example.
Prior to making that presentation, I looked at a variety of 2D animation tools, but they were meant for artistic animation and had so much power and flexibility that Figma was easier and faster.
Here's a gif loader I created for my web app with Figma and Motion. https://images.usercontent.bryteagent.com/queue-loader.gif
In the last year I have been using x6 from AntV for animated/interactive graph visualisaton. It is outstandingly powerful and well designed (like all their libraries) - but unless you can read Mandarin you'll eventually be using a translator to read the docs/issues, and reading the code to figure out APIs. That said, I've been able to quickly build out things that I didn't think possible before with x6 and their other libs.
Recently I've also had a good experience with react-flow from webkid - who also make excellent stuff. I'm using this in MDX components for modular documentation. It's quick and simple to create an animated graph visualisation from a JSON representing the graph.
I have on my to-do list to make a mermaid -> react-flow component
However, it doesn't support you in creating animations where objects follow paths. But you're free to code that on your own!
Slides.com is the commercial offer from the creators of the open source web presentation lib RevealJs.
It's an authoring environment that allows text-free coding (using Programming By Demonstration) of interactive graphical software, like animations and games.
[1] https://www.blockstud.io
Then export the transitions to a video [0].
[0]: https://support.microsoft.com/en-us/office/save-a-presentati...
I'd have thought (knowing nothing) that AI should be really good at tweeting between a start and end point of anything, diagrams included, but is there a good CS reason why this isn't the case?
Like sending large files over email.
Perhaps we should make a list of these damned problems, and call it "unsolved problems in Computer Science". Then have a $1M prize for the first to solve them.
I loved the concept and thought it was going to revolutionise the web; add cloud-caching and it would look pretty sweet IMO.
https://www.diagrams.net/blog/interactive-diagram-layers
https://drawio-app.com/interactive-diagrams-with-custom-link...
Edit: remove links about the obscure undocumented features p=ex and p=anim
It’s actually a bit easier than basic web dev because you don’t even need to know flexbox!
However, I still use slides.com and svgator.com every single time. They let me concentrate on my messaging.
Adobes flash suite is now called Adobe animate and still works mostly the same and you can export to the html canvas.
Scripting is a bit limited/complicated, compared to doing it with actionscript - but if you worked with flash before, this is probably the most easy solution, as it is still very powerful and straight forward.
It distracts, eats cpu/drains battery, can't be printed, has bad UX.
User have to wait for the animation to cycle, and you can't pause it to read something if it's moving too fast.
That’s only badly done animations, using bad file formats like GIF or inappropriate file formats like APNG, or poorly-considered CSS or SMIL animations on SVG or HTML. It’s not difficult to use a real video format with controls to allow pausing, or to design a pause button into software-driven animation.
Done well, software-driven animation can even be interactive, which can be especially good for comprehension.
Countless presentations that just skipped whatever video content they had due to various technical difficulties say otherwise.
It also depends a little on context: I had in mind and was referring to user-driven media (which is fairly clearly the context here). If you’re presenting something to an audience that is at your mercy (which seems to be more what you’re talking about), then the situation is indeed a bit different—though a pause button and scrub bar are still likely to be a good investment.
I know it can be done; I've seen it. I know it can be good; I've enjoyed it.
But to say "it's not difficult" is to be blind to reality.
In my case I've written an article about request coalescing, and the animations are to go alongside the text rather than in place of it. It'll help illustrate the concept and the pitfalls that can happen.
Examples here: https://twitter.com/ariaminaei/status/1439918117807853575?s=...
Although the focus of the library is interactivity and not setting up sequences of animation, but that is possible too.
"Concepts" https://concepts.app/en/
[0] https://www.youtube.com/c/StuffMadeHere
The video itself shows a debugging issue that I asked the Pharo community, which is the ability to single step through your debugger and see the animation updated. As far as I understood there was a prototype out within a day for that.
[1] https://drive.google.com/file/d/1Z3UwTAj4A2CRo_TXk6JNG-mN9yM...
The problem I wanted to solve is more whiteboarding and presentation: I often am in calls describing something that only needs fairly simple drawings - boxes, lines, labels - but whiteboard where you scribble or even lay out rectangles makes me sweat the small stuff, resizing and moving everything all the time when the diagram changes. Also, I wanted animation: to show transition between states. I'd tried using mingrammer to do diagrams as code, but I find graphviz layouts unpredictable. Most often what I want is: just boxes, lines, labels, size things to fit, keep everything 'evenly spaced'.
So, I wrote some JS (it's ~700 lines of code, no external libraries). I divide a web page into two areas: one textarea where I type commands line-by-line, and the drawing, which is svg. On selectionchange events for the textarea, I debounce for 500ms, so if I've paused the layout&animation kick in. The drawing state has a map of nodes (boxes), which contain a title, an icon, map of connections to other boxes, and a list of children (ids of other nodes), as well as recording the node we are currently zoomed in to, the node we are currently editing, and a few other details. There is a node called 'top' which is the starting point.
The commands are pretty simple and were added as I needed things, eg:
It's interpreted line-by-line so that each line represents one state of the diagram. There are commands to delete nodes: when I delete a node I just remove it from its parent but leave it in the top-level state. That has the neat effect that if I re-add it, I get the node with all its descendents and connections restored in one step, which I can use to pre-diagram things I talk about often.After calculating the drawing state by applying all the commands from the start to the current selection, the next step is to limit this to the visible pieces. I make a copy of the drawing state, starting from the currently zoomed node and following all children. Then I add all connections, if all the 'to' ends of the connections are visible.
Next, I do layout. Starting with the visible tree, annotate all nodes with positions of the box (if any), the icon, and the label. The diagrams I'm drawing are similar to those produced by AWS Perspective: https://aws.amazon.com/solutions/implementations/aws-perspec... , so if a node has no children I draw it as a large icon with a label below, if it has children, it is a box with a small icon to the top left, a centred label at the top. Each node can choose one of a small number of layouts that I can do automatically with just a list of children: 'ring' (a circle of nodes), 'row', 'column', or 'snake' (the default: alternate rtl-ltr rows to evenly fill the space; this will be a grid if that fits or could end up like 4-3-4-3 if it doesn't). In ring & snake, boxes are always 4:3; in row and column they are stretched to fit.
Next, I do animation. I keep around the previous layed-out state, and use window.requestAnimationFrame to cal...
It is an online HTML5 animation editor.
You can also export to a video there.