Checkout this Quelea expansion pack build with Improvements and experimental features!

One more amazing feature. I just put a dynamic sub-browser panel (call it overlay).
Quelea_Web_View_Overlay

  • Short press toggle visibility.
  • Long press open edit panel in edit mode.
  • View only mode avaiable (so no interraction) otherwise usually in interactive mode
  • Hold control for quick edit (i.e. repositioning).
  • Undere consideration (and partially constructed) is inner zoom and pan. But i am sort of running out of unused key combination bindings on the browser.

Here is how the panel interaction looks like
Panel_interraction

This could be any website or webviewer (or cammera view). For me remotes or scores or tempo are most useful. We chould have multiple of those if needed.

New password page :slight_smile:

Then i just tough woulnd’t it be cool to have slowly blending backgrounds and here is the result at 30x speedup
Password_page_with_blending_background

New offline app upcomming

While you are connected to the server you sync up data which is stored locally. Then you can browse the songs and the bibles offline anytime.


Well i really went overboard this time. What you are seeing is a service process manager.
And in white. I think it looks better in white actually. … anyway

So:

  • Essentially, it includes or supersede the original init which is just a single sequence. (main method)

  • Can seed-up startup. Now we can don’t need a predefined sequence but can allowed automatic initialization in parallel based on dependency tree. Cool!
    Any one that knows anything might think Docker or SystemD and you would be right. It’s sort of like that.

  • We can control the lifecycle of the services (if you are given the user-permissions).

  • Restarting or stopping any part is not a problem now. Maybe you need a lower RAM usage.

  • Any errors that might occur could potentially be fixed by restating a module but even more so it’s very useful for the HTTP web servers for remote and content and as well as the MIDI control module. If say a device appeared after initialization. (unlike in OpenLP where i made the same midi plugin, this one is more basic and can’t auto wait (reconnect but not quite), although Java sort of allows auto reconnect.

  • You have a nice UI.

  • Now we can initialize Quelea partially, which means we could potentially run it as a terminal application . Or headless mode.
    ===========================================================

  • Finally, this is half the work (maybe 1/3) to enabling 3rd party plugins to work. Generally we need a dynamic or runtime attachment mechanism and also we would need a solid (maybe polling) api interface… not that i expect anyone to write a plugin but now we could.

I wrote this tool to check code contributions by lines of code for developer and also shows how many files each has toched. Based on the src and the server dirs, which is the meat of the project I have altered almost 30% of the application, which i didn’t expect.


To show you a cool visual of the tool:
git_blame_all

1 Like

Now we support multiple and dynamic themes. It’s just a matter of change of the CSS. (or adding a new one etc.).


As we flip through the drop-down the themes updates immediately:
video

=====================================================

Also i have fixed the awful (meaning you don’t know what the state is) styling of the main live buttons.
logo16_on cross_on-light cross_on clear_on black_on logo48_on

Now it should be easy to tell which button is active
{28F50BE3-EE61-4B95-8173-C460B6AB718E}

Here is something pretty cool: 3rd party plugins!!!
Since I did a service manager/init system it ended up being really easy. So i just went for it.
Also in the repo there is an example template how to create the plugin you can see below.
The example is a simple timer process with some UI and dynamic menu entry.
plugins


Some interesting points to note:

  • Overall it’s pretty robust, you can load them during runtime, and you can restart any services for whatever reason. So it’s pretty great.
  • The plugin subscribes to the service manager and the theme manager and loads assets from within the directory that it’s found in.
  • If during start there is a problem the indicator will be in red.
  • If there is an error during attachment it won’t show up. i guess we can put a message it was detected but failed to load.
  • Fancy python code ? Sure use whatever. Just needs a Gradle entry and you can do just about anything.
  • During development, the plugin can be initialized with service manager as normal service code.
    When done the code is moved to the plugin directory (see example) and we give it a name and a starting point.
  • Actually, the InteliJ Idea’s debugger will attach to the .java files just fine even if we initialize it from the JAR externally which is good for deployment testing.
  • Then we place the JAR file into .quelea/plugins and that’s it. No fuss no buzz

======================================
P.S. I have put there just about anything we could want at this point. I think the only thing missing to take it to superhero level is a multimedia engine which deals with routing of sources, sinks, muxes, layers, filters etc.
I have 0 incentive to build that, although to me it would be only a bit harder than what I have done so far.
I kinda “hate” Java a bit too… anyway.
In theory having control over the item data flow would allow for any kind of cool configuration. e.g. :

  • multiple projectors
  • allowing each to have a specific layer: each could put a different theme on the song
  • We route to NDI, or OBS, or web specific layers or whatever we want.
  • Dealing and routing with audio would also be amazing.

And of course having dynamic items like mini clips.

To be honest I didn’t really want to bother doing it but since it was really easy, I just refactored the RChandler into a proper API. Any previous http methods were overloaded as normal methods with some suitable arugment. Like so:

Now this thing can be used internally as an plugin context API. Also fixed various ussues along the way.
Actually, there is a api.js file which contains all api calls in a very simple form, obviously http://localhost/api-list will get you a really nice list (probably needs a bit of update actually).

.

Now external integration can be done more easily at any level: a JAVA plugin, http server, API list , MIDI control etc.

I got annoyed an switched to a socketed connection, but since i am lazy to do more i just implemented a basic Media Router which only gets notified some content was updated. Then pushes to the socket which is managed by a service
Socket service

The socket only does notifications and doesn’t push data. So everything else is the same and we do an HTTP calls to fetch data. Obviously, it’s not the most efficient but it’s quite minimal in terms of changes, and still getting the benefit of the socket.

On the frontend the server checker …


It will always try to re-establish a connection with the server and it will re-setup the socket.

The pollers are still there and actually. I left the poller for the drawer as is, but that one dynamically scales the refresh frequency dynamically depending on the open/close state.

Sooo … No more constant beaming of requests! And control will feel a lot more snappy. Backward compatibility is ensured.


P.S. The only think to decide would be if i want to use the pollers as a backup. If the user manually turns the socket OFF then … maybe the user should just not touch that stuff

I think it’s more elegant to have this choice

View pdf will open it in the default pdf viewer, while print should do

I think it’s better than just printing straight away to who knows what device

Instead of live text, for messages I went with something more chat styled:

{97B4AD5E-5E5B-42F0-A550-B0611A9889B4}

{FBA5A8F7-4F52-444F-B4B8-5B87B7180E55}

Supports both chat style and immediate style. Whatever you fancy.

@JessyJP Dude, I just found this threat! Why didn’t I see this sooner?!
Always loved quelea (mainly because of the ease of use in showing 2 languages), but always thought it wasn’t supported enough. Thanks for doing your thing with it!

Sadly I got this error while trying to install:

Do you know why this happens?

Well, no idea. But from the looks of it it has to do with permissions. Obviously, I install it and use the iterations regularly. The first question would be are you building it or are you using and installer ? The last installer might be a bit outdated by about 2 months or so.
I will make a new installer perhaps.

These are awesome feature updates. Thanks for all your hard work. Any plans for sending alpha channel lyrics via NDI?

You know … I was going to do something like that but kinda gave up. My idea was to have pipe-wire like handling of A/V streams. So you would be able to redirect any part of your audio/video mix to a sort of bus mapped to an output or plug-in. (It already supports plug-ins). The plug-in could be NDI if you wish. It would even be long term sustainable.
Unfortunately, I gave up because the software simply wasn’t designed to be extended in such a way. Not only that.

The item handling is a bit terrible and the video handling is even worse.
Design choices must have been made at the time but that let to very code brittleness.
We can’t even update gStreamer past 1.22 without completely breaking everything.
There is memory leak very likely due to unreleased resources.
It desprately needs an internal media item/media router and processing standartization for any progress to be made.

Technically all of this could be fixed and it’s probably not that much work for someone used to working with gStreamer intimately. Beyond that some major(key) rewrites would be needed to allow for it’s full potential to be released.
But there is a larger problem at play here:

The fundamental problem is that the upstream is effectively abandoned.

It’s a one man project.
I am 700 commits ahead and upstream hasn’t expressed a single ounce of interested in what I have done.
That would be fine if it wasn’t that there hasn’t been any news or any commits for the past year and a half.
No new features or solid plan for development.
The main project is effectively been abandoned and the signs are clear.
The application should be useful and working for the next 4-6 years but as we know without support or clear plan ahead it will eventually fall into obscurity.
The user-base for Quelea is probably around 10k-20k and that’s not too many people. As is, the user scope is limited and niche.

Any hope?

So OK, it’s an open-source project, surely there will be someone to pick it up.
Right? Maybe! Though, most likely not!
People don’t become revolutionaries, pioneers and freedom-fighters en-mass and without a strong enough problem or cause. Similarly, developers would rather be lazy users. I mean we all do, it’s also perfectly understandable. Which is the reason why I don’t see this software’s potential being liberated. I just don’t belive people would be sufficiently motivated to selflessly donate of their time and skills to contirbute for a cause (software) with uncertain future or paln ahead.

Not a single person came offer to collaborate even after 50+ posts, multiple messages proposals and actual implementation of the features.

A disclaimer!

Obviously, I made features I wanted because I though I would need them already aware that most likely they won’t end up being merged in the official app. I know it sounds selfish, but I still released and documented them in the posts with some hope that just maybe people would be interested in them.

P.S.

I could have answered the question with a yes or no, or a lot more could be said; but i want to make clear that I appreciate the main dev’s work for all those years and the community.
I also completely understand that people want to value their time and move onto other interests or priorities.
That’s just how life is.
I hope my post will either jolt the community into action or server as an explanation (or rather a gravestone) for why this project falls into obsolescence 10 years from now.

Here is the latest built. Release Release Mid 2025 by JP · JessyJP/Quelea · GitHub

It should work fairly fine. … Though, there is one thing in the JS I regret not fully fixing on mobile item reordering.
This build and post is specifically for you @thomas.vergouwe .
I forgot but maybe I should have bumped up the version to 2025.2 perhaps.
Try the installer and if you are experiencing any problems see if you have issue with some kind of antivirus/install/dive/file/user permissions. I just installed and it starts ok.


Hi @JessyJP, I had to install the main branch of Quelea and then I could install your 2025.0. Sadly when trying to install the 2025.1 I get an error saying windows can’t find the path. When looking at logs I saw windows defender was blocking it. I added it to the list of files defender would allow, it opened but now I got the previous fault. Grrrrah!
Again looking at the logs I saw it was a temp file that was blockec. I temporalily had to white list the temp folder and then it installed correctly.
Sadly then I had to white list the quelea app completely to make it run.

Good thing I trust you ;).

I’ve installed it on my work computer, so the problem could be policies set by my company. Anyway, it works!

@thomas.vergouwe Happy to hear that. Feel free to report on any bugs here or things you like here. Make suggestions etc.

@thomas.vergouwe
As for the blocking problem, i have a samll suspicion that it might be related to the mDNS module which i tired to impelemt. It wasn’t workinig pretty so it’s not particularly useful. I wanted to have it work similar to Reaper where you can create a remote and assign a domain name something like qremote.local:1112 instead of having to know the IP.

I am generally not a fan of web apps for serious stuff or high performance apps etc., but i think the web remote is one case where a progressive or web based app makes perfect sense. Now you can edit the rebremote in the web directory (JS/HMTL/CSS) and modify it to your needs. Again that’s simmilar to the way it’s done in Reaper and I am all about giving the user having the power to modify things should they need to.

I saw some people were complaining about the web remote app not working properly, so it might be worth considering auto packaging the web-remote itself into an app for users that prefer to work that way.

@JessyJP Is there a way that in your fork you can add support for adding outlines to lyrics text. I know be default we only have the ability to add drop shadows but adding outlines can helpful feature.