A New Chapter for MagicMirror: The Community Takes the Lead
Read the statement by Michael Teeuw here.
  • Automatic checking of all MagicMirror² modules

    Pinned
    83
    2 Votes
    83 Posts
    103k Views
    BerkSmash1984B
    @KristjanESPERANTO Awesome. Thanks for the response!
  • Head first developing MM module for extreme beginners

    Pinned
    27
    5
    7 Votes
    27 Posts
    24k Views
    R
    Anyone have an idea on how to display an image instead of a line. I downloaded a jpeg image of a dog and I would like to display that instead of
  • Photoprism image module

    4
    0 Votes
    4 Posts
    1k Views
    E
    That’s an interesting idea, especially if the goal is to move away from cloud-dependent photo services. A local PhotoPrism module feels very much in the spirit of self-hosted and privacy-first workflows. If the images are already accessible via a local API or filesystem path, it sounds feasible at least at a prototype level. Even with limited programming experience, starting small (read-only image display, basic refresh) could be a good way to learn while building something useful. I’ve seen people take a similar approach with small side tools first, sometimes even experimenting with lightweight generators (like a brat generator) just to understand how UI, data, and rendering fit together before tackling a bigger integration. There’s likely interest here, especially from others trying to de-Google their setups. Posting progress updates might help attract collaborators once you get a basic proof of concept going.
  • obsession with modul checker

    19
    1 Votes
    19 Posts
    238 Views
    htilburgsH
    @HeikoGr 👍
  • 1 Votes
    1 Posts
    91 Views
    F
    Hi everyone, I’d like to introduce my new module MMM-WasteReminder. It displays timely reminders for waste collection and supports both MQTT and Calendar integration – perfect for anyone who wants to connect their MagicMirror with ioBroker, Home Assistant, or other Smart Home systems! 🎯 Key Features 🔌 Flexible Data Sources: MQTT, Calendar, or both simultaneously 🗑️ Customizable Waste Types: Yellow bin, Blue bin (paper), Black bin (residual), Bio bin (fully configurable) ⏰ Auto-Hide Function: Automatically hides reminders at a specific time (e.g., next day at 10 AM) 🎨 Custom Icons: Use your own images for waste bins 📱 MQTT Control: Perfect for ioBroker, Mosquitto, or any other MQTT broker 📅 Calendar Integration: Works seamlessly with MagicMirror’s default calendar module 🔧 Highly Configurable: Labels, icon size, trigger times, keywords – everything is customizable I’m looking forward to your feedback, feature requests, and of course pull requests! 🎉 Enjoy the module! Github: https://github.com/fischi87/MMM-WasteReminder
  • [MODULE] MMM-MovingPortrait - Animated Portrait Videos

    1
    2 Votes
    1 Posts
    201 Views
    F
    MMM-MovingPortrait - Animated Portrait Videos Bring Hogwarts-style moving portraits to your MagicMirror! ✨ Features: Multiple video rotation with smooth transitions 4 customizable frame styles (Hogwarts, Vintage, Modern, None) Motion sensor support (PIR/MQTT) Full notification control ioBroker & Home Assistant integration Perfect for creating magical atmosphere with AI-generated portrait videos! GitHub: https://github.com/fischi87/MMM-MovingPortrait Install: git clone https://github.com/fischi87/MMM-MovingPortrait.git Feedback welcome! 🎉
  • Warum funktionert das Moduln mehr. Es wird das Bild nich mehr angezeigt.

    2
    0 Votes
    2 Posts
    136 Views
    KristjanESPERANTOK
    Can you provide a few more details? What does your config of the module look like? Are there any error messages in the node or browser console? Which module exactly do you mean? There is no Mmm auroa on the module list.
  • MP3 Player

    59
    0 Votes
    59 Posts
    16k Views
    B
    Hey @bachoo786, I’ve been following your progress with the folder nesting—it’s a tricky bit of logic to get right in the node_helper, but it’ll be worth it for the cleaner UI! One thing I noticed while setting up my own music module is that the player looks a lot better if the MP3 metadata (ID3 tags) is actually clean. If the tags are messy, the ‘Artist’ and ‘Title’ fields on the mirror usually end up looking like a jumble of underscores and file extensions. Since you’re organizing a big library right now, I’ve been using https://editmp3tags.com/ to quickly fix the tags in the browser before dropping them into the music folder. It’s way faster than using a heavy desktop app and helps the module display everything correctly once you get that ‘better method’ logic sorted out.
  • Develop MagicMirror the easy way — all in one workspace

    6
    1 Votes
    6 Posts
    637 Views
    B
    That’s a great help. I’m going to try this soon and fiddle around with it. Good job 👍🏻.
  • MMM-Hoymiles-Wifi

    58
    1 Votes
    58 Posts
    10k Views
    J
    I spent a bit of time an got the following to work by using help of a friend. I wrote the following in the css: /* custom.css */ /* Passt die Gesamtbreite des gesamten Moduls an */ .MMM-HoymilesPVMonitor { /* Beispiel: Setzt die maximale Breite des gesamten Moduls auf 200 Pixel */ max-width: 200px; /* Stellt sicher, dass das Modul zentriert bleibt, falls es kleiner als die Spalte ist */ margin-left: auto; margin-right: auto; } /* Passt den inneren Container an, der das Canvas-Diagramm enthält. Dies überschreibt die 95% Breite, die im JS definiert wurde. */ .MMM-HoymilesPVMonitor div:first-child { /* Setzt die Breite des Containers auf 100% der oben definierten max-width (z.B. 200px). Sie können hier auch absolute Werte (z.B. 180px) verwenden, aber 100% ist am flexibelsten. */ width: 100% !important; } Now it is smaller, nevertheless I can’t get it much more smaller because the gauge will disappear then. (It’s not displayed correctly in the screenshot, but it is on my mirror.) [image: 1762507583422-screenshot-2025-11-07-102555.jpg]
  • Magic Mirror Download Station

    7
    2
    3 Votes
    7 Posts
    675 Views
    B
    Thanks mate! That´s brilliant! I´ll check it out at and keep you posted!
  • MM as rolling picture frame

    21
    0 Votes
    21 Posts
    7k Views
    BKeyportB
    here’s how I did it. Set up SAMBA on the pi, and include a mapping to your photos drive (I wouldn’t recommend keeping them locally) magic mirror’s config, using MMM-Backgroundslideshow /* Magic Mirror Config by Brendan Keyport. */ /* Office - Certificate Display */ var config = { address: "0.0.0.0", port: 8082, // port is 8082 as I use a server/client style setup. ipWhitelist: [], language: "en", timeFormat: 12, units: "imperial", //logLevel: ["INFO", "LOG", "WARN", "ERROR", "DEBUG"], customCss: "css/custom3.css", modules: [ { module: 'MMM-BackgroundSlideshow', position: 'fullscreen_below', config: { imagePaths: ['<path to shared folder>'], transitionImages: true, randomizeImageOrder: true, showAllImagesBeforeRestart: true, //transitionSpeed: 0, gradient: [0], horizontalGradient: [0], backgroundSize: "contain" } } /*************** DO NOT EDIT BELOW ***************/ ] }; if (typeof module !== "undefined") { module.exports = config; } Easy as Pi.
  • Dynamic Module Chaining

    3
    0 Votes
    3 Posts
    966 Views
    BKeyportB
    @haji6 Every module that supports this SHOULD have documentation that shows how they talk to each other. Imagine a room full of people. In that room - only one person can speak at a time. Person A (Calendar) will yell out “I have an Event at 8:30 called Appointment” and write it on it’s part of the whiteboard (Might be nowhere). Then Person B will hear it and write it on a whiteboard where it’s told to for all to see. This is a simplified version of how the notification system works. My module (MMM-Multimonth) and others uses the above concept to display data. Why rewrite work when you can use what’s provided?
  • MMM-GooglePhotos Updated

    12
    1
    0 Votes
    12 Posts
    4k Views
    J
    @Rberry91 said in MMM-GooglePhotos Updated: Ok@sdetweil thank you so much that worked. Other problem the photos don’t came up Awesome that worked!
  • 0 Votes
    2 Posts
    847 Views
    S
    @Mistiz you shouldn’t need any certificates for MM to external connections, as the source server is required to provide the cert that covers its connections… MM does not provide a cert, as we don’t use http, assuming we are on a close private network in our homes. certs are a pita(pain in the a) in general … for access INTO my system , I no longer use an open port, and don’t have to provide certs for every source, or router module(gateway) I use cloudflare zero trust tunnel. they provide the cert, and maintain it. their endpoint connector runs on your network and can http connect to services at that level.
  • 0 Votes
    9 Posts
    2k Views
    D
    @sdetweil Maybe I’m wrong, and I haven’t spent a lot of time trying to test it, but I think regular moment will grab the date in the local timezone based on what is set in the system. You can’t do as much with OTHER timezones in regular moment, but I think at least that works. Whereas the regular javascript date will pull the date and time in UTC. That said, I do use moment-timezone in my modules–though some of them I have taken over maintaining, and they used regular moment to some success.
  • LICENSE: on modules.magicmirror.builders shows @noassertion instead of MIT

    12
    0 Votes
    12 Posts
    3k Views
    karsten13K
    @sdetweil said in LICENSE: on modules.magicmirror.builders shows @noassertion instead of MIT: click the hints for dev view bottom left hint link works … looks like problems on your side …
  • Module Development in TypeScript

    6
    2 Votes
    6 Posts
    3k Views
    F
    Hi @Jalibu, thanks for the typings. To be honest, it’s not the best possible integration. The MagicMirror repository includes a module-types.ts file, containing the most important types, which I extended a little to fit my needs. A deeper integration, like being able to get correct typings/autocompletion for the this object in functions, is not available. If I find myself using it more in the future, I may look into improving this. I want to share an little extension or may a solution for the problem quoted: import type { Config } from "../types/Config"; import type { State } from "../types/State"; interface FrontendModuleProperties extends Partial<Module.ModuleProperties<Config>> { state?: State; } Module.register<Config>("MMM-XX", { defaults: { x: 29, y: "abc", }, getStyles() { return ["z.css"]; }, <...> getTemplateData() { return { config: this.config, value: this.state?.value, }; }, <...> socketNotificationReceived(notificationIdentifier: string, payload: State) { if (notificationIdentifier === `ABC-${this.identifier}`) { const lastValue = this.state?.value; // <-- Here lastValue got correct type automatically <...> this.state = payload; } }, } as FrontendModuleProperties);
  • MMM-Carousel Pagination Icons

    48
    0 Votes
    48 Posts
    17k Views
    C
    @mumblebaj , @karsten13 and @sdetweil , thank you really for your help with this matter. I will test tomorrow and hope all this story will help other user in the future to profit from all your great job!
  • start() vs receiving waiting for MODULE_DOM_CREATED notification?

    3
    0 Votes
    3 Posts
    984 Views
    D
    @sdetweil I’d rather have late and working consistently than early and missed because of lag. I suspect most people boot their mirror at most once a day, so waiting an extra 30 seconds for the module to show content doesn’t seem like that big of a deal. But I’ll try DOM_OBJECTS_CREATED.