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
    94k Views
    BerkSmash1984B
    @KristjanESPERANTO Awesome. Thanks for the response!
  • Head first developing MM module for extreme beginners

    Pinned
    27
    5
    7 Votes
    27 Posts
    23k 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
  • MMM-Hoymiles-Wifi

    40
    1 Votes
    40 Posts
    5k Views
    S
    @Jose1701 he just wanted to see the IP address the module was connecting to , which is hard coded in that line
  • Develop MagicMirror the easy way — all in one workspace

    1
    0 Votes
    1 Posts
    15 Views
    H
    start little ‘advertising’ … (this is what you get when you ask AI to promote your project…) Stop juggling terminals and fighting file permissions. With MMM-DevContainer you can develop MagicMirror in VS Code using either Docker Compose or Dev Containers — your choice. Why it’s better: One workspace for everything: modules, config and css all in one place. No more multiple windows or scattered folders. Works with Docker Compose and/or VS Code Dev Containers: pick the workflow that fits your setup. No file-rights hassle: edit and save directly from VS Code without sudo/chmod pain (unlike editing inside a running MM Docker container - if you’ve ever tried that). Reproducible, clean environment: consistent installs, easy onboarding, and less “it works on my machine.” Great DX: built-in terminals, IntelliSense, debugging, and Git — all inside the container. npm install runs automatically on first start, so you can get coding faster. Get started: https://github.com/HeikoGr/MMM-DevContainer Quick start Clone the repo: git clone --depth=1 https://github.com/HeikoGr/MMM-DevContainer.git cd MMM-DevContainer Add your module: Create your module inside modules/YourModule (or add it as a Git submodule). Keep MagicMirror core, your modules, and config together in this single workspace. Choose your workflow from below: Option A — Docker Compose docker compose up --build Open the app in your browser (e.g., http://localhost:8080) Stop when done: docker compose down Option B — VS Code Dev Container Install VS Code + the “Dev Containers” extension. Open the MMM-DevContainer folder in VS Code. Reopen in Container when prompted (or use Command Palette: “Dev Containers: Reopen in Container”). Notes: At the moment it’s only testet on linux (or windows with ssh on linux…) Dependencies: npm install runs automatically on first start (via the devcontainer/compose setup). If your module needs extra dependencies, you can still run npm install inside the container terminal. All source folders are mounted into the container; edits happen from VS Code without permission issues. Suggestions and feedback welcome! Have ideas to improve the setup? Issues and PRs are very welcome. Tell me what works well for you and what could be smoother.
  • Magic Mirror Download Station

    7
    2
    3 Votes
    7 Posts
    268 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
    5k 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
    819 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
    3k 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
    734 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.
  • Photoprism image module

    3
    0 Votes
    3 Posts
    944 Views
    B
    I have to admit that a LLM makes very beautiful code. It doesn’t work yet, but it is beautiful. This is the first version created: https://github.com/Brtrnd/MMM-Photoprism I’ll spend some more time on it this evening. Once the first draft works I think i can imagine quite a few extra’s I would like to add.
  • 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
    2k 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
    15k 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
    881 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.
  • Need help for a module who give advice because of the weather

    4
    0 Votes
    4 Posts
    477 Views
    mumblebajM
    @Xx_Codeur_xX You could have a look at some of the modules that already does this. They get the weather from the default weather module, no need to redo this as it is already available. See either of the below. https://github.com/fruestueck/MMM-WeatherDependentClothes or https://github.com/Lavve/MMM-WeatherOutfit/tree/main
  • How to Use NY Times Subscription with Default Newsfeed Module

    9
    0 Votes
    9 Posts
    1k Views
    J
    @karsten13 – Yes, that’s what I figured. The problem from the provider’s perspective would be how to both give access to legitimate subscribers while limiting access to others. The only solution that springs to mind would be to authenticate the user when they query the server, but for something like this where all the users’ computers might each be coming for content several times each day - it begins to be a lot of computing overhead.
  • SampleCode for Module to read a specific Information from a webpage

    19
    0 Votes
    19 Posts
    4k Views
    S
    @newbi ok.
  • Need Help with Receiving Notifications

    4
    0 Votes
    4 Posts
    647 Views
    S
    @raspberrypi9 did you get this working?
  • Trouble with Sending Notifcation on Module Start

    5
    0 Votes
    5 Posts
    1k Views
    S
    @raspberrypi9 my pleasure, And actually DOM_OBJECTS_CREATED means YOUR module’s content has been placed in the DOM the first time And DOM_OBJECTS_UPDATED is each time after that Because updateDom() is asynchronous now If you ever tried to document.getElementByID after getDom(), but it returned null. Then you needed to wait for one of those notifications