[mirotalk] - replace Robohash avatars with DiceBear and update credits

This commit is contained in:
Miroslav Pejic
2026-04-30 15:29:42 +02:00
parent 362805031f
commit da8143f0c8
8 changed files with 35 additions and 25 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
# ====================================================
# MiroTalk P2P v.1.8.25 - Environment Configuration
# MiroTalk P2P v.1.8.26 - Environment Configuration
# ====================================================
# App environment
+1 -1
View File
@@ -180,7 +180,7 @@ To set up your own instance of `MiroTalk P2P` on a dedicated cloud server, pleas
- ianramzy (html [template](https://cruip.com/demos/neon/))
- vasanthv (webrtc-logic)
- fabric.js (whiteboard)
- [Robohash.org](https://robohash.org) (random avatars)
- [DiceBear](https://www.dicebear.com/) (random avatars)
- [Image by ddraw on Freepik](https://www.freepik.com/free-vector/collection-female-male-avatars_1105371.htm) (avatar illustrations)
</details>
+1 -1
View File
@@ -2,7 +2,7 @@
/**
* ==============================================
* MiroTalk P2P v.1.8.25 - Configuration File
* MiroTalk P2P v.1.8.26 - Configuration File
* ==============================================
*
* This file is the central configuration source.
+1 -1
View File
@@ -45,7 +45,7 @@ dependencies: {
* @license For commercial use or closed source, contact us at license.mirotalk@gmail.com or purchase directly from CodeCanyon
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-p2p-webrtc-realtime-video-conferences/38376661
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
* @version 1.8.25
* @version 1.8.26
*
*/
+6 -6
View File
@@ -1,12 +1,12 @@
{
"name": "mirotalk",
"version": "1.8.25",
"version": "1.8.26",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "mirotalk",
"version": "1.8.25",
"version": "1.8.26",
"license": "AGPL-3.0",
"dependencies": {
"@mattermost/client": "11.6.0",
@@ -27,7 +27,7 @@
"helmet": "^8.1.0",
"httpolyglot": "0.1.2",
"js-yaml": "^4.1.1",
"jsdom": "^29.1.0",
"jsdom": "^29.1.1",
"jsonwebtoken": "^9.0.3",
"nodemailer": "^8.0.7",
"openai": "^6.35.0",
@@ -4301,9 +4301,9 @@
}
},
"node_modules/jsdom": {
"version": "29.1.0",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.0.tgz",
"integrity": "sha512-YNUc7fB9QuvSSQWfrH0xF+TyABkxUwx8sswgIDaCrw4Hol8BghdZDkITtZheRJeMtzWlnTfsM3bBBusRvpO1wg==",
"version": "29.1.1",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz",
"integrity": "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==",
"license": "MIT",
"dependencies": {
"@asamuzakjp/css-color": "^5.1.11",
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "mirotalk",
"version": "1.8.25",
"version": "1.8.26",
"description": "A free WebRTC browser-based video call",
"main": "server.js",
"scripts": {
@@ -62,7 +62,7 @@
"helmet": "^8.1.0",
"httpolyglot": "0.1.2",
"js-yaml": "^4.1.1",
"jsdom": "^29.1.0",
"jsdom": "^29.1.1",
"jsonwebtoken": "^9.0.3",
"nodemailer": "^8.0.7",
"openai": "^6.35.0",
+1 -1
View File
@@ -109,7 +109,7 @@ let brand = {
},
about: {
imageUrl: '../images/mirotalk-logo.gif',
title: 'WebRTC P2P v1.8.25',
title: 'WebRTC P2P v1.8.26',
html: `
<button
id="support-button"
+22 -12
View File
@@ -15,7 +15,7 @@
* @license For commercial use or closed source, contact us at license.mirotalk@gmail.com or purchase directly from CodeCanyon
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-p2p-webrtc-realtime-video-conferences/38376661
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
* @version 1.8.25
* @version 1.8.26
*
*/
@@ -11816,7 +11816,7 @@ function isImageURL(input) {
/**
* Check if a URL is a valid HTTP/HTTPS avatar URL.
* Unlike isImageURL, this does NOT require a file extension,
* so it accepts dynamic avatar endpoints (e.g. GitHub, Gravatar, Robohash).
* so it accepts dynamic avatar endpoints (e.g. GitHub, Gravatar, DiceBear).
* @param {string} input
* @returns {boolean}
*/
@@ -12345,22 +12345,32 @@ async function updateMyPeerAvatarByUrl() {
localGrid.appendChild(makeAvatarImg(url));
}
// Robohash random avatars
const roboLabel = document.createElement('p');
roboLabel.textContent = 'Or pick a random avatar:';
roboLabel.style.cssText = 'color:#aaa;font-size:12px;margin:10px 0 6px;text-align:center;';
// DiceBear random avatars
const randomAvatarLabel = document.createElement('p');
randomAvatarLabel.textContent = 'Or pick a random avatar:';
randomAvatarLabel.style.cssText = 'color:#aaa;font-size:12px;margin:10px 0 6px;text-align:center;';
const roboGrid = document.createElement('div');
roboGrid.style.cssText = 'display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-bottom:4px;';
const randomAvatarGrid = document.createElement('div');
randomAvatarGrid.style.cssText =
'display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-bottom:4px;';
const dicebearStyles = [
'bottts-neutral',
'adventurer-neutral',
'thumbs',
'initials',
'identicon',
'shapes',
];
for (let i = 0; i < 6; i++) {
const seed = Math.random().toString(36).substring(2, 10);
const url = `https://robohash.org/${seed}.png`;
roboGrid.appendChild(makeAvatarImg(url));
const style = dicebearStyles[i % dicebearStyles.length];
const url = `https://api.dicebear.com/9.x/${style}/svg?seed=${encodeURIComponent(seed)}`;
randomAvatarGrid.appendChild(makeAvatarImg(url));
}
let insertAfter = input;
for (const el of [localLabel, localGrid, roboLabel, roboGrid]) {
for (const el of [localLabel, localGrid, randomAvatarLabel, randomAvatarGrid]) {
insertAfter.parentNode.insertBefore(el, insertAfter.nextSibling);
insertAfter = el;
}
@@ -15682,7 +15692,7 @@ function showAbout() {
Swal.fire({
background: swBg,
position: 'center',
title: brand.about?.title && brand.about.title.trim() !== '' ? brand.about.title : 'WebRTC P2P v1.8.25',
title: brand.about?.title && brand.about.title.trim() !== '' ? brand.about.title : 'WebRTC P2P v1.8.26',
imageUrl: brand.about?.imageUrl && brand.about.imageUrl.trim() !== '' ? brand.about.imageUrl : images.about,
customClass: { image: 'img-about' },
html: `