Web based Zynthian GUI

Have there ever been any efforts to make the Zynthian GUI, the touchscreen interface, web-based?
Using django, flask or some alternative, along with a modern frontend framework?

The current implementation using tkinter seems pretty sluggish, especially noticable on the sequencer or mixer screens.

From what I read, tkinter was made for universal simple user interfaces and really doesn’t scale well.
Something like a grid of 50 buttons is expected to take some time to display.

Just to illustrate, this is the about most modern tkinter interface I was able to find:

Here’s an example for a web based synth UI:

I realize what a huge change this would be, but I’m still interested in bringing up the topic and learning about your opinions.

Animations, touch interactions, responsiveness, the ability to view the UI on any connected device without vnc latency, separation of UI and engine, usability and more would benefit from this.

Hi @Kosro

Yes we are very aware of the limitations of tkinter and have considered alternative UI technologies but as you say, a change is a substantial amount of work.

Switching to another GUI framework does not necessarily fix the issues you mention but may provide the tools to implement the UI more efficiently.

Separation of UI from the model is not a benefit of Channing framework, it is a design decision that activist facilitates it. I would go so far as to say it is almost a prerequisite.

To that end, the work we are currently focused on does much of that separation so, following that work (which is emense) it should be possibe (maybe even trivial… maybe not!!!) to add whatever UI you want.

I don’t think that web interface is necessarily the right technology. It has been a popular choice with app developers for a few years but it has a lot of overhead that we don’t necessarily need or want in a dedicated musical instrument device. Of course the beauty of this open source project is that anyone can contribute in any way they wish and we are here to discuss and be influenced. I often see the benefit of other’s suggestions but it can sometimes take a while for the ideas to dawn. (I am not always initially as receptive to other’s ideas as they may want me to be!)

The sequencer grid is pretty horrendous and could do with improving. That is on our roadmap in the (fairly) near future (after the afore mentioned refactor). It may be challenging to resolve within the confines of tkinter but we will try. The alternative is a lot of work but maybe, one day we will change.


Hi @Kosro !

You are right. Tkinter is quite limited, but it’s very lightweight most of time. Using a "web based GUI is not in the roadmap because the huge overload it would add. We want the CPU for processing audio, right? FYI, current UI normally takes less than 5% of total CPU power. We would like to keep this number or reduce it if possible.
We have no plans for migrating to another framework in the short term, but improving graphics is on the roadmap, of course. We think tkinter have more to offer yet and we have some ideas to optimize redrawing in pattern editor and other “grid” screens. We would try and if we are not happy enough, we would consider changing to a newer framework, but not a web-based one. Rendering HTML+CSS takes too many resources and what we need is mostly drawing lines and rendering fonts.

Anyway, as @riban commented, we are finishing the refactoring of the zynthian core, what would allow us to totally separate the UI and would ease re-implementing the GUI or having alternate GUIs. Let’s see how deep is the rabbit hole when we finally open the door :wink:



Indeed - it would allow custom UI, not just GUI, e.g. a totally headless device with total harware control and no screen as discussed elsewhere in this forum. We are a honing in on this aspiration…


Thanks a lot for the detailed replies! I’m happy to hear about your plans and understand the overhead problem. I find it really hard to judge the Pi 4’s capabilities sometimes ^^

Having some web design experience, I miss the template/cascaded design workflow when looking at tkinter, but maybe I haven’t dug deep enough yet to realize what’s possible with it :slight_smile:

1 Like