Cloudron makes it easy to run web apps like WordPress, Nextcloud, GitLab on your server. Find out more or install now.


Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Bookmarks
  • Search
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo

Cloudron Forum

Apps | Demo | Docs | Install
  1. Cloudron Forum
  2. MiroTalk
  3. MiroTalk SFU: Recording not possible?

MiroTalk SFU: Recording not possible?

Scheduled Pinned Locked Moved Unsolved MiroTalk
27 Posts 4 Posters 154 Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • MiroTalkM Offline
    MiroTalkM Offline
    MiroTalk
    wrote last edited by
    #15

    perfect, I will prepare a package update then. So just to double check, this only applies to the SFU flavor of mirotalk?

    WIP on MiroTalk SFU: Let me fix this first, then I’ll ping you when done 🙂

    1 Reply Last reply
    1
    • nebulonN Offline
      nebulonN Offline
      nebulon
      Staff
      wrote last edited by
      #16

      in case your code would ensure the paths via "mkdirp()" it would make the package code easier 🙂

      1 Reply Last reply
      1
      • MiroTalkM Offline
        MiroTalkM Offline
        MiroTalk
        wrote last edited by MiroTalk
        #17

        @nebulon @James @shrey

        Implemented in MiroTalk SFU v2.0.14 — Docker image is building now (available in ~1 hour).

        • Commit
        • Build

        For Cloudron deployments, server-side recording should now work using the following configuration:

        Recording

        RECORDING_ENABLED=true
        RECORDING_DIR='../data/rec'            # Path relative to /app/code → resolves to /app/data/rec
        RECORDING_MAX_FILE_SIZE=1073741824     # Max file size in bytes (default: 1GB)
        

        RTMP

        RTMP_DIR='../data/rtmp'                # Path relative to /app/code → resolves to /app/data/rtmp
        

        Note

        If the target directories do not exist, MiroTalk SFU will automatically create them at runtime, just like before.

        Cloudron automatically mounts /app/data, so using ../data/... ensures the app writes to the persistent, writable directory.

        1 Reply Last reply
        6
        • nebulonN Offline
          nebulonN Offline
          nebulon
          Staff
          wrote last edited by
          #18

          New package is out. Thanks for all the work @mirotalk-57bab571 and being so proactive here!

          MiroTalkM 1 Reply Last reply
          4
          • nebulonN nebulon

            New package is out. Thanks for all the work @mirotalk-57bab571 and being so proactive here!

            MiroTalkM Offline
            MiroTalkM Offline
            MiroTalk
            wrote last edited by MiroTalk
            #19

            @nebulon said in MiroTalk SFU: Recording not possible?:

            New package is out. Thanks for all the work @mirotalk-57bab571 and being so proactive here!

            Good! I’m always here to help. Thanks to Cloudron for trusting MiroTalk and supporting us! By the way, I love the new Cloudron UI v.9.0.10, it looks amazing!

            1 Reply Last reply
            3
            • MiroTalkM Offline
              MiroTalkM Offline
              MiroTalk
              wrote last edited by
              #20

              PS: Thanks also to @James for his IT support and excellent debugging and suggestions.

              1 Reply Last reply
              3
              • S Online
                S Online
                shrey
                wrote last edited by
                #21

                Hi @nebulon @mirotalk-57bab571
                So, i'm still unable to boot up the app after setting RECORDING_ENABLED=true :

                Nov 15 09:36:54 node:fs:1364
                Nov 15 09:36:54 const result = binding.mkdir(
                Nov 15 09:36:54 ^
                Nov 15 09:36:54 2025-11-15T04:06:54Z
                Nov 15 09:36:54 Error: ENOENT: no such file or directory, mkdir '/app/code/app/rec/'
                Nov 15 09:36:54 at Object.mkdirSync (node:fs:1364:26)
                Nov 15 09:36:54 at Object.<anonymous> (/app/code/app/src/Server.js:280:12)
                Nov 15 09:36:54 at Module._compile (node:internal/modules/cjs/loader:1554:14)
                Nov 15 09:36:54 at Object..js (node:internal/modules/cjs/loader:1706:10)
                Nov 15 09:36:54 at Module.load (node:internal/modules/cjs/loader:1289:32)
                Nov 15 09:36:54 at Function._load (node:internal/modules/cjs/loader:1108:12)
                Nov 15 09:36:54 at TracingChannel.traceSync (node:diagnostics_channel:322:14)
                Nov 15 09:36:54 at wrapModuleLoad (node:internal/modules/cjs/loader:220:24)
                Nov 15 09:36:54 at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:170:5)
                Nov 15 09:36:54 at node:internal/main/run_main_module:36:49 {
                Nov 15 09:36:54 errno: -2,
                Nov 15 09:36:54 code: 'ENOENT',
                Nov 15 09:36:54 syscall: 'mkdir',
                Nov 15 09:36:54 path: '/app/code/app/rec/'
                Nov 15 09:36:54 }
                Nov 15 09:36:54 2025-11-15T04:06:54Z
                Nov 15 09:36:54 Node.js v22.14.0
                Nov 15 09:36:54 \
                
                MiroTalkM 1 Reply Last reply
                0
                • S shrey

                  Hi @nebulon @mirotalk-57bab571
                  So, i'm still unable to boot up the app after setting RECORDING_ENABLED=true :

                  Nov 15 09:36:54 node:fs:1364
                  Nov 15 09:36:54 const result = binding.mkdir(
                  Nov 15 09:36:54 ^
                  Nov 15 09:36:54 2025-11-15T04:06:54Z
                  Nov 15 09:36:54 Error: ENOENT: no such file or directory, mkdir '/app/code/app/rec/'
                  Nov 15 09:36:54 at Object.mkdirSync (node:fs:1364:26)
                  Nov 15 09:36:54 at Object.<anonymous> (/app/code/app/src/Server.js:280:12)
                  Nov 15 09:36:54 at Module._compile (node:internal/modules/cjs/loader:1554:14)
                  Nov 15 09:36:54 at Object..js (node:internal/modules/cjs/loader:1706:10)
                  Nov 15 09:36:54 at Module.load (node:internal/modules/cjs/loader:1289:32)
                  Nov 15 09:36:54 at Function._load (node:internal/modules/cjs/loader:1108:12)
                  Nov 15 09:36:54 at TracingChannel.traceSync (node:diagnostics_channel:322:14)
                  Nov 15 09:36:54 at wrapModuleLoad (node:internal/modules/cjs/loader:220:24)
                  Nov 15 09:36:54 at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:170:5)
                  Nov 15 09:36:54 at node:internal/main/run_main_module:36:49 {
                  Nov 15 09:36:54 errno: -2,
                  Nov 15 09:36:54 code: 'ENOENT',
                  Nov 15 09:36:54 syscall: 'mkdir',
                  Nov 15 09:36:54 path: '/app/code/app/rec/'
                  Nov 15 09:36:54 }
                  Nov 15 09:36:54 2025-11-15T04:06:54Z
                  Nov 15 09:36:54 Node.js v22.14.0
                  Nov 15 09:36:54 \
                  
                  MiroTalkM Offline
                  MiroTalkM Offline
                  MiroTalk
                  wrote last edited by MiroTalk
                  #22

                  @shrey said in MiroTalk SFU: Recording not possible?:

                  So, i'm still unable to boot up the app after setting RECORDING_ENABLED=true

                  Forget the previous env configuration. In the latest Cloudron commit, recording is enabled by default, and the app/data path now appears to be automatically resolved as well.

                  rec.png

                  1 Reply Last reply
                  0
                  • S Online
                    S Online
                    shrey
                    wrote last edited by
                    #23

                    @mirotalk-57bab571

                    I restarted the updated app, but i still get only this:
                    image.png

                    No rec folder available, and no default recording taking place.

                    image.png

                    1 Reply Last reply
                    0
                    • S Online
                      S Online
                      shrey
                      wrote last edited by shrey
                      #24

                      @mirotalk-57bab571

                      It seems like 2 separate updated packages have been released for this.
                      Just came across the 2nd one and updated the app again.

                      1. The rec folder is now available in /app/data/
                      2. All recordings are still being saved on the local device only. No server-side recording. No S3 recording.
                      jamesJ 1 Reply Last reply
                      0
                      • S shrey

                        @mirotalk-57bab571

                        It seems like 2 separate updated packages have been released for this.
                        Just came across the 2nd one and updated the app again.

                        1. The rec folder is now available in /app/data/
                        2. All recordings are still being saved on the local device only. No server-side recording. No S3 recording.
                        jamesJ Online
                        jamesJ Online
                        james
                        Staff
                        wrote last edited by
                        #25

                        Hello @shrey
                        I have just updated my Mirotalk SFU app and now the recordings are stored inside the Mirotalk SFU app in /app/data/rec/.
                        Please share your /app/data/env file.
                        With the updated app and a fresh installed app the recording works.
                        In a meeting I can do:
                        25148661-faea-4ff2-9c2d-854f2cc505d2-image.png

                        0d480e1b-0961-49df-a606-a2eaee3e27d0-image.png

                        ls -lah /app/data/rec/
                        total 5.2M
                        drwxr-xr-x 2 cloudron cloudron 4.0K Nov 15 09:46 .
                        drwxr-xr-x 3 cloudron cloudron 4.0K Nov 15 09:44 ..
                        -rw-r--r-- 1 cloudron cloudron 5.2M Nov 15 09:46 Rec_09598YoungSpid_2025_11_15_10_45_32_e0005370-10dd-4487-a68e-cff4d94f274d.webm
                        
                        1 Reply Last reply
                        1
                        • S Online
                          S Online
                          shrey
                          wrote last edited by
                          #26

                          Hi @james , thanks for the screenshots. I can now see that there's a "Save on server" option in the UI, and it's working for me as well.

                          Now, just S3 is left to work.
                          My env file ->

                          # Recording
                          RECORDING_ENABLED=true                           # Enable recording functionality (true|false)
                          RECORDING_UPLOAD_TO_S3=false                      # Upload recording to AWS S3 bucket [true/false]
                          
                          # AWS S3 Configuration  
                          AWS_S3_ENABLED=true                              # Enable AWS S3 storage (true|false)  
                          AWS_S3_BUCKET_NAME=<bucket-name>                       # Name of your S3 bucket (must exist)  
                          AWS_ACCESS_KEY_ID=<key-id>                                # AWS Access Key ID (leave empty for IAM roles)  
                          AWS_SECRET_ACCESS_KEY=<key-secret>                            # AWS Secret Access Key (leave empty for IAM roles)  
                          AWS_REGION=<region>                                   # AWS region (e.g., us-east-2, eu-west-2)  
                          AWS_S3_ENDPOINT=https://<region>.digitaloceanspaces.com
                          

                          Note: Although i didn't find the "AWS_S3_ENDPOINT" key in the env template, i configured it because it seems to work with most S3 client libraries, and is a necessity to be able to connect to S3 spaces other than AWS.

                          1 Reply Last reply
                          0
                          • jamesJ Online
                            jamesJ Online
                            james
                            Staff
                            wrote last edited by
                            #27

                            Hello @shrey
                            The library used in MiroTalk SFU for AWS/S3 is aws-sdk/client-s3.
                            It seems MiroTalk SFU does not have the option to configure the endpoint.
                            From the MiroTalk SFU Code handling the configuration:

                            https://github.com/miroslavpejic85/mirotalksfu/blob/b2a41e597610524b259097d2e1b52674dda631c0/app/src/config.template.js#L948-L954

                                    aws: {
                                        enabled: process.env.AWS_S3_ENABLED === 'true',
                                        accessKeyId: process.env.AWS_ACCESS_KEY_ID || 'your-access-key-id',
                                        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || 'your-secret-access-key',
                                        region: process.env.AWS_REGION || 'us-east-2',
                                        bucket: process.env.AWS_S3_BUCKET || 'mirotalk',
                                    },
                            

                            Also in the server.js where the S3Client is initialized, the endpoint is never configured, thus using the default, resolving the endpoint from the AWS_REGION.
                            https://github.com/miroslavpejic85/mirotalksfu/blob/b2a41e597610524b259097d2e1b52674dda631c0/app/src/Server.js#L297-L303

                            const s3Client = new S3Client({
                                region: config?.integrations?.aws?.region, // Set your AWS region
                                credentials: {
                                    accessKeyId: config?.integrations?.aws?.accessKeyId,
                                    secretAccessKey: config?.integrations?.aws?.secretAccessKey,
                                },
                            });
                            

                            So we need to ask @mirotalk-57bab571 to add the option to configure the endpoint as well.
                            Adding to that, when a non AWS endpoint is used, the option forcePathStyle: true might also be needed for the best compatibility with e.g. MinIO and most S3-compatible systems.


                            @mirotalk-57bab571
                            It is the weekend, please don't feel pressured or forced to work on the weekend.
                            Would it be possible to add the option to configure the S3Client endpoint config and S3Client forcePathStyle config?

                            1 Reply Last reply
                            1
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Bookmarks
                            • Search