February 2024 update

I had almost NO coding time during my Summer break for many reasons! But I finally have some time to myself… for now…

  • HUGE refactor underway. I’ve decided to change up the data structure model.
    • The old structure where I had State Interfaces for every data type had been really doing my head in.
    • Serialization to disk (i.e. saving and opening playlist documents) should now be simpler to implement… hopefully!
  • As part of the refactor I am building-in macOS compatibility (where possible). For 3rd party libraries:
    • Haven’t decided about PowerPoint import on macOS yet
    • VLC should work?
    • NDI will be new territory for me, as I’ve never done macOS interop stuff let alone from .NET Core. Time to finally tackle https://github.com/navhaxs/AvaloniaNDI/issues/1
  • From reading various programming practice articles/books, I am attempting to employ some Lean development and better-thought-out design. Goodbye dead code!
  • I am trying ChatGPT / Amazon Q as coding assistants. Mixed results… sometimes helpful, sometimes plain wrong suggestions, sometimes handy…!!

Engineering tech update, September 2023

Made some time to work on this whilst I can – looking ahead at my calendar it’s getting busy with other (more important) things πŸƒπŸƒπŸΌπŸƒπŸΌ

I’ve realised that do I get easily distracted – some of the best engineering work requires adequate focus, as I’ve observed at work (day job). And it is easy to get discouraged, given how long I’ve had this project in WIP for. But it’s coming together – looking forwards to reaching a Minimal Viable Product (MVP) and getting some real testing in!

Update on recently completed work:

βœ… worker queue for loading images (bitmaps) on a separate thread.

  • improves playlist load performance. Rather than suddenly spamming the CPU will a bajillion bitmap load requests, which causes a noticable UI lag (for a few seconds), the ‘image loading work’ is now processed in a FIFO queue.
My attempt to improve my test methology with data. Turned out that `GC.Collect()` was actually (effectively) running the entire time throughout my differeny test scenarios, so not sure if my test results were accurate in terms of memory πŸ™

βœ… ui/ux: tabbed ‘library’ and ‘design’ panels, docked to the bottom

This design pattern was inspired by looking for examples out in the wild…

  • DJ software like Serato and Djay are interesting because the live realtime performance workflow of a DJ means that all UI elements must remain onscreen for quick access – there is no time for the user to fiddle around with resizing panels etc!
  • IDEs like IntelliJ, Visual Studio 2022, Visual Studio Code all have docked panels which can be resized. But also collapsed, and toggled to return to the last saved state.

βœ… ui/ux: lots of work across various screens and controls

βœ… code quality, cleanup & logging improvements

βœ… NDI for static slides

For the MVP I still need:

  • drag and drop implemented on at least the left-hand list item view
  • ‘section heading’ item type
  • implement any missing missing bindings with libMPV for basic video playback control (I switched from VLC)
  • finalize ‘Add item’ experience
  • basic library management: ‘smart’ folders, song library
  • demo playlist for onboarding new users
  • go through datatypes serialized to XML
  • song design templates saved to disk (if not already? lol don’t remember)
  • song template design margins, easy bg change
  • easy logo change ui
  • error handling (video file deleted, etc)
  • sync pptx on playlist load
  • ‘group items’ editor ui
  • record demo video for YouTube
  • BIG BUG BASH!

…that should be enough for now πŸ™‚

Moved to future release goalpost/s:

  • sermon recording
  • google slides integration
  • start screen
  • proper websocket events & web remote

Engineering tech update: July 2023

(Warning – very technical)

Dark mode theme is here! Cleaned up the ‘playlist title’ which is moved to the left panel. Looks neater, quite happy with the look and feel atm.

Experimenting with custom user colours on slide groups. Should match with the left panel list items though.
Getting more logging. Oh, slide thumbnails can be resized now!
Song Editor WIP. The idea is that you work from left-to-right of screen: edit stanza lyric text, add line breaks to split long stanzas into multiple slides, then drag and drop song part arrangements on the right. Preview with the centre slide thumbnails.
SongSelect recently refreshed their platform – breaking existing APIs. Seems they didn’t want to version or maintain the old API – which I noticed broke some other paid app we do use πŸ₯ΊπŸ₯Ί[I’ve since had to manually format new song imports twice already!]. I did have to rewrite the lyric file text parser for the new format.

NDI integration

…it is not really working πŸ™

Platform changes:

My whole rendering is based on AvaloniaUI, which I cannot extract rendered Bitmaps from starting at the major 11.x release just recently. I’m waiting for an API (p.s. the guys at Avalonia are really smart!)

For the time being I am blocked at version 11.0-preview8

WIP alternate solution:

For lyrics feed:

  • I am testing out a live HTML page which can be added as a Browser overlay source in OBS Studio
  • Websockets + https://kit.svelte.dev/ + https://tailwindcss.com/

And for getting video and slide playback into OBS:

  • use NDI screen capture or Screen Capture HX https://www.ndi.tv/nvidia/ (requires NVIDIA GPU)

And for stage display:

  • I might have to use live HTML page here too.
  • Having NDI would’ve been nice for throwing onto an iPad which can sit on the preacher’s podium. I guess NDI screen capture also still works here too.

February’23 update

Worklog:

  • Started on slide designer
  • Added saving & restoration of user preferences
  • Upgraded to Avalonia 11.0.0-preview5
    • Supporting NDI and VLC libraries both also needed some upgrade work
    • Thanks Max for pointing me in the right direction
    • Also tracked down a minor bug in the avalonia preview releases
  • Finally published the code publicly on GitHub (and removed the google auth secrets… πŸ˜…). Now to get it to compile on my other laptop…

Observations:

  • Rendering performance and app responsiveness has much room for improvement. e.g. Could pre-render bitmaps of slides in the background.
  • The ‘Summer 22-23’ was clearly ambitious. There have been a lot of life happenings in between!
Yes this is the real UI today! Looks pretty nice, right?

September’22

“It’s coming soon”

My aim is for a test release in Summer 2022-23.

I am slowly working through the remaining (but important) items for a MVP, as I test out the software in various low-key live gatherings. This includes file saving/loading and some graphics issues with crossfading between slides (it ain’t as straightforwards as you’d think!)

It also needs some ability for (basic) slide design & customisation.

6+ months of heavy development time, and 7+ years of dreaming πŸ’­

Roadtesting out in the wild πŸ™‚