Skip to content

Update to Bulma theme / add dark mode - #1353

Open
StefanCodes wants to merge 29 commits into
meeb:test-StefanCodes-pr-1353from
StefanCodes:dark_mode
Open

StefanCodes wants to merge 29 commits into
meeb:test-StefanCodes-pr-1353from
StefanCodes:dark_mode

Conversation

@StefanCodes

@StefanCodes StefanCodes commented Dec 28, 2025 •

Copy link
Copy Markdown
Contributor

Closes #457

What does this do?

Removes the Materialize CSS framework and drops in Bulma.

Bulma has a pretty good design system that lets us unlock dark mode without much additional effort.

Changes

  • remove Materialize CSS
  • remove SASS
  • add Bulma and CSS-based FontAwesome
  • (the big change) refactor all views to use Bulma CSS and general layout principles
  • adds cookie-based dark mode persistence
  • adds dark mode toggle button to main navbar
  • defines dark mode CSS tokens derived from light mode Tubesync colors

Additional changes

Took a swing at updating the Sources list page. Happy to revert or move to a different PR:
image

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an experiment to see if we can eliminate SASS entirely and rely on pure CSS.

I originally hoped to be able to rely almost entirely on the Bulma styles so TubeSync could have minimal CSS, but this file is still larger than I'd like to really make this pitch.

My motivation here was to facilitate dark mode. I wasn't able to get theme switching to work when SASS variables were involved, but using CSS variables worked. There are some ways to shim in both (basically just redeclaring CSS vars for colours, and leave the SASS otherwise intact), but it seemed brittle to go that route.

Another option would be to let the TubeSync styling change a lot more to fit in with the Bulma defaults. I played with this a little bit and generally just didn't like what it looked like.

I'd love some opinions on this one.

Comment thread tubesync/common/templates/base.html Outdated
}
</style>
<link type="text/css" rel="stylesheet" href="{% sass_src 'styles/tubesync.scss' %}" media="screen,projection"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/bulma.min.css" />

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CDN Bulma. Maybe we should use a local copy?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I absolutely prefer a local copy.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Local would be essential.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. I pulled Bulma and a CSS-based FontAwesome to a local vendor directory in ce182dd?w=1 and removed the previous SASS-based FA.

Comment thread tubesync/common/templates/base.html Outdated
<link rel="icon" href="{% static 'images/favicon.ico' %}" sizes="21x21" type="image/x-icon">
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>TubeSync - {% block headtitle %}Synchronize YouTube to your local media server{% endblock %}</title>
<script>

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the first of a few JS blocks - I think this is the first script in TubeSync.

I usually prefer implementing the script in TypeScript, but that introduces a bunch of extra build changes. Holding off until there's some consensus on what this should look like.

This script runs on page load to check what the stored theme is. This lives up here to prevent a flash of light mode styles before dark mode is applied.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I was a little militant and refused to use any JS at all for tubesync. I'm not opposed to some copy/paste hooks to make Bulma behave though.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think a dark mode button needs to sacrifice that design decision! I pulled all the JS and replaced the dark mode toggle with a back end version that sets a cookie instead (2c3cd20?w=1).

That also resolves a fouc issue that the JS solution introduced! 🥂

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are some layout changes to the source page that's still not polished (happy to revert this).

There's 2 things I was playing with:

  1. Allow for more wrapping so the page isn't so tall
  2. Move the media name variables into a tooltip (instead of a long region at the bottom of the page)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really dislike the tooltip because it makes copy/paste much more difficult.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reverted all the nonessential changes to the source add/edit pages. The move to Bulma is already more than enough for one PR.

@tcely tcely moved this to In Progress in Status Dec 28, 2025
Comment thread tubesync/common/templates/base.html Outdated
@tcely

This comment was marked as resolved.

@StefanCodes

Copy link
Copy Markdown
Contributor Author

@StefanCodes Heads up. There's a conflict that needs to be resolved.

Thanks! I merged them in.

Comment thread tubesync/sync/templates/sync/tasks.html Outdated
Comment thread tubesync/sync/templates/sync/tasks.html Outdated
Comment thread tubesync/sync/templates/sync/tasks.html Outdated
Comment thread tubesync/sync/templates/sync/tasks.html Outdated
StefanCodes and others added 4 commits February 4, 2026 21:19
Co-authored-by: tcely <tcely@users.noreply.github.com>
Co-authored-by: tcely <tcely@users.noreply.github.com>
Co-authored-by: tcely <tcely@users.noreply.github.com>
Co-authored-by: tcely <tcely@users.noreply.github.com>
@tcely
tcely changed the base branch from main to test-StefanCodes-pr-1353 April 27, 2026 22:16
@tcely
tcely marked this pull request as ready for review April 27, 2026 22:17
@tcely tcely changed the title WIP: Update to Bulma theme / add dark mode Update to Bulma theme / add dark mode Apr 27, 2026
@rockymtngeek

Copy link
Copy Markdown

@StefanCodes — First, I appreciate the work you're doing to test and implement a native dark mode for TubeSync!

I've transitioned to using Devolutions Remote Desktop Manager (RDM) for most of my home-lab management, and its embedded browser doesn't currently offer a native way to apply dark mode to websites that don't support it themselves. This makes a native dark-mode option in TubeSync particularly appealing.

I run TubeSync on Unraid and successfully built and tested the dark_mode branch (ec2e8eab) in a separate Docker container, keeping my production installation untouched.

The good news: The dark/light theme toggle works nicely, including directly within RDM's embedded browser. I particularly like the darker color palette, subtle shadows around the dashboard sections, and muted gold hover effects.

I did encounter two issues while building the image:

  1. FFmpeg build date: FFMPEG_DATE was unset, resulting in a 404 for the autobuild-/checksums.sha256 URL. Supplying --build-arg FFMPEG_DATE=2026-10-19-19-51 resolved the issue.

  2. SCSS compilation: The build failed with Unknown command: 'compilescss'. Although django-sass-processor was included in the Pipfile, sass_processor was missing from Django's INSTALLED_APPS. Adding it to tubesync/tubesync/settings.py resolved the error and allowed the image to build successfully.

The resulting container starts and the interface functions as expected. It identifies itself as TubeSync 0.17.2, so I'm keeping it separate from my current production installation.

I haven't tested actual video downloads yet, but plan to do so with a limited test source.

Thanks again for working on this feature. It's great to see native dark mode functioning in TubeSync, and I hope these build observations are helpful!

@tcely

tcely commented Oct 20, 2026 •

Copy link
Copy Markdown
Collaborator

@rockymtngeek

For a proper integration, you should take this branch, then update the Dockerfile by removing compilescss entirely. which has already removed the compilescss command from the Dockerfile.

After that, you would merge the current main into your branch and build from that for the final image.

It looks like there are going to be a few merge conflicts and new items, since v0.18.0, which will also need to be adjusted for the styles used by this branch.

It's expected and normal for a few build arguments to be required.

build-args: |
IMAGE_NAME=${{ needs.info.outputs.IMAGE_NAME }}
FFMPEG_DATE=${{ needs.info.outputs.ffmpeg-date }}
FFMPEG_VERSION=${{ needs.info.outputs.ffmpeg-version }}
YTDLP_DATE=${{ fromJSON(needs.info.outputs.ytdlp-latest-release).tag.name }}
YTDLP_EJS_VERSION=${{ fromJSON(needs.info.outputs.ejs-latest-release).tag.name }}

@tcely
tcely changed the base branch from test-StefanCodes-pr-1353 to main October 20, 2026 21:16
@tcely
tcely changed the base branch from main to test-StefanCodes-pr-1353 October 20, 2026 21:20

@tcely tcely left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a new dashboard item introduced in v0.18.1. So, it will need adjustments for the styles on this branch.

</a>
</div>
</div>
<div class="col s12 l6">

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<div class="column is-half-desktop">

</div>
</div>
<div class="col s12 l6">
<div class="card dashcard">

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<div class="box has-text-centered">

<i class="fa-solid fa-scroll fa-4x"></i>
</div>
<div class="desc truncate">Logs</div>
<div class="truncate">View, search, and/or filter logs</div>

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<div class="subtitle is-6">View, search, and/or filter logs</div>

<div class="center-align">
<i class="fa-solid fa-scroll fa-4x"></i>
</div>
<div class="desc truncate">Logs</div>

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<div class="title is-3">Logs</div>

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This entire file needs to be reviewed and converted to the styles on this branch.

@tcely tcely added the help wanted Extra attention is needed label Oct 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

help wanted Extra attention is needed

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

Feature Request: Dark Mode 🕶

4 participants