Import the MetaMesh app family from Worph/AppStore
23 apps (MetaCore, the library/network/client tiers and 13 MetaFeeder*) move out of the general-purpose Worph/AppStore into their own store so the MetaMesh family releases on its own cadence. - asset URLs repointed to cdn.jsdelivr.net/gh/Worph/MetaAppStore@main - store scaffolding added (category/recommend/featured lists, licence, contributing, gitattributes) - psd-source/meta-icons-v2 icon generator follows the apps MetaMCP stays in Worph/AppStore: it is third-party metatool-ai software, not part of MetaMesh.
This commit is contained in:
@@ -0,0 +1,201 @@
|
||||
name: metasort
|
||||
|
||||
services:
|
||||
# Backend service. Reachable on the pcs network as `metasort-app`.
|
||||
# Public ingress goes through the `metasort` hash-lock proxy below.
|
||||
metasort-app:
|
||||
image: ghcr.io/worph/meta-sort:1.0.3
|
||||
container_name: metasort-app
|
||||
hostname: metasort-app
|
||||
restart: unless-stopped
|
||||
cpu_shares: 20
|
||||
|
||||
expose:
|
||||
- 80
|
||||
|
||||
volumes:
|
||||
# Shared infrastructure state (leader election, Redis dump, service discovery)
|
||||
# Owned by MetaCore; mounted rw here for service registration + leader reads.
|
||||
- ${DATA_ROOT:-/DATA}/AppData/metacore/meta-core:/meta-core:rw
|
||||
|
||||
# Application cache storage
|
||||
- ${DATA_ROOT:-/DATA}/AppData/metasort/cache:/data/cache
|
||||
|
||||
# Docker socket for container plugin management
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
|
||||
# Note: no /files mounts — files are accessed via WebDAV from MetaCore
|
||||
# (Architecture V3). MetaCore is the single source of truth for media files.
|
||||
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- META_CORE_PATH=/meta-core
|
||||
- CACHE_FOLDER_PATH=/data/cache
|
||||
- SERVICE_NAME=meta-sort
|
||||
- SERVICE_VERSION=1.0.0
|
||||
- BASE_URL=https://metasort-$APP_DOMAIN
|
||||
- TMDB_API_KEY=
|
||||
- TMDB_LANGUAGE=en-US
|
||||
- TZ=$TZ
|
||||
# Container plugin configuration
|
||||
- CONTAINER_CALLBACK_URL=http://metasort-app/api/plugins/callback
|
||||
- CONTAINER_NETWORK=pcs
|
||||
|
||||
# Note: Runs as root for nginx, Redis, and file management
|
||||
user: 0:0
|
||||
|
||||
networks:
|
||||
- pcs
|
||||
|
||||
# OIDC perimeter for the MetaSort dashboard. Self-registers as an OIDC client
|
||||
# with the platform's auth-registrar on first login (no secrets to manage).
|
||||
#
|
||||
# Naming: container_name MUST equal the URL-prefix of the public hostname so
|
||||
# the registrar's redirect-URI allowlist accepts `metasort-<user>.<domain>`.
|
||||
metasort:
|
||||
image: ghcr.io/yundera/appshield:2.0.9
|
||||
cpu_shares: 80
|
||||
container_name: metasort
|
||||
hostname: metasort
|
||||
restart: unless-stopped
|
||||
user: "0:0"
|
||||
|
||||
expose:
|
||||
- 80
|
||||
|
||||
environment:
|
||||
OIDC_REGISTRAR_URL: "http://auth-registrar:9092"
|
||||
BACKEND_HOST: "metasort-app"
|
||||
BACKEND_PORT: "80"
|
||||
LISTEN_PORT: "80"
|
||||
REDIRECT_HOST_SUFFIXES: "${APP_DOMAIN},${APP_PUBLIC_IP_DASH}.nip.io,${APP_PUBLIC_IP_DASH}.sslip.io"
|
||||
|
||||
depends_on:
|
||||
- metasort-app
|
||||
|
||||
labels:
|
||||
# Only /health bypasses hash-lock — internal cluster traffic (plugin
|
||||
# callbacks, /meta/*, /webdav/*, /file/cid) reaches metasort-app via
|
||||
# the pcs network and never traverses the public proxy, so no public
|
||||
# bypass is required for those paths.
|
||||
|
||||
# ---- metasort-${APP_DOMAIN} (gateway TLS) ----
|
||||
caddy_0: metasort-${APP_DOMAIN}
|
||||
caddy_0.import: gateway_tls
|
||||
caddy_0.0_handle: "/health"
|
||||
caddy_0.0_handle.reverse_proxy: "metasort-app:80"
|
||||
caddy_0.1_handle: ""
|
||||
caddy_0.1_handle.reverse_proxy: "{{upstreams 80}}"
|
||||
|
||||
# ---- metasort-IP.nip.io (gateway TLS) ----
|
||||
caddy_1: metasort-${APP_PUBLIC_IP_DASH}.nip.io
|
||||
caddy_1.import: gateway_tls
|
||||
caddy_1.0_handle: "/health"
|
||||
caddy_1.0_handle.reverse_proxy: "metasort-app:80"
|
||||
caddy_1.1_handle: ""
|
||||
caddy_1.1_handle.reverse_proxy: "{{upstreams 80}}"
|
||||
|
||||
# ---- metasort-IP.sslip.io (Let's Encrypt) ----
|
||||
caddy_2: metasort-${APP_PUBLIC_IP_DASH}.sslip.io
|
||||
caddy_2.0_handle: "/health"
|
||||
caddy_2.0_handle.reverse_proxy: "metasort-app:80"
|
||||
caddy_2.1_handle: ""
|
||||
caddy_2.1_handle.reverse_proxy: "{{upstreams 80}}"
|
||||
|
||||
networks:
|
||||
- pcs
|
||||
|
||||
networks:
|
||||
pcs:
|
||||
name: ${APP_NET:-pcs}
|
||||
external: true
|
||||
|
||||
x-casaos:
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
author: Worph Team
|
||||
category: Media
|
||||
developer: Aptero Team
|
||||
|
||||
description:
|
||||
en_us: |
|
||||
**Smart metadata extraction and file indexing for massive media libraries.**
|
||||
|
||||
MetaSort is the brain of the MetaMesh ecosystem. It watches your media folders, extracts metadata using intelligent plugins, and stores everything in a distributed database for other services to use.
|
||||
|
||||
**Key Features:**
|
||||
- **Plugin-Based Processing** - Containerized plugins for FFmpeg analysis, TMDB enrichment, filename parsing, and more
|
||||
- **Smart Metadata Extraction** - Automatically extracts titles, seasons, episodes, quality, language, codecs
|
||||
- **Duplicate Detection** - Finds exact duplicates and different quality versions of the same content
|
||||
- **Real-time Monitoring** - Watches folders and instantly processes new files
|
||||
- **Built for Scale** - Handles collections up to 900k+ files and 100TB+
|
||||
- **Leader Election** - Distributed architecture with automatic failover
|
||||
|
||||
**Requires:** MetaCore (install first)
|
||||
|
||||
**Works with:** MetaFuse (virtual filesystem), MetaStremio (streaming)
|
||||
|
||||
**Dashboard Features:** File monitoring, plugin status, duplicate detection, metadata browser, processing queue
|
||||
|
||||
fr_fr: |
|
||||
**Extraction intelligente de metadonnees et indexation de fichiers pour d'immenses bibliotheques multimedia.**
|
||||
|
||||
MetaSort est le cerveau de l'ecosysteme MetaMesh. Il surveille vos dossiers multimedia, extrait les metadonnees a l'aide de plugins intelligents et stocke tout dans une base de donnees distribuee.
|
||||
|
||||
**Fonctionnalites Cles:**
|
||||
- **Traitement par Plugins** - Plugins conteneurises pour analyse FFmpeg, enrichissement TMDB, parsing de noms de fichiers
|
||||
- **Extraction Intelligente** - Extrait automatiquement titres, saisons, episodes, qualite, langue, codecs
|
||||
- **Detection de Doublons** - Trouve les doublons exacts et differentes versions de qualite
|
||||
- **Surveillance Temps Reel** - Surveille les dossiers et traite instantanement les nouveaux fichiers
|
||||
- **Concu pour l'Echelle** - Gere des collections jusqu'a 900k+ fichiers et 100TB+
|
||||
|
||||
**Necessite:** MetaCore (installer en premier)
|
||||
|
||||
**Fonctionne avec:** MetaFuse (systeme de fichiers virtuel), MetaStremio (streaming)
|
||||
|
||||
tagline:
|
||||
en_us: Smart metadata extraction engine - Index and organize massive media libraries with intelligent plugins
|
||||
fr_fr: Moteur d'extraction de metadonnees - Indexez et organisez d'immenses bibliotheques avec des plugins intelligents
|
||||
|
||||
title:
|
||||
en_us: MetaSort
|
||||
|
||||
icon: https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaSort/icon.png
|
||||
screenshot_link:
|
||||
- https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaSort/screenshot-1.png
|
||||
- https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaSort/screenshot-2.png
|
||||
- https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaSort/screenshot-3.png
|
||||
thumbnail: https://cdn.jsdelivr.net/gh/Worph/MetaAppStore@main/Apps/MetaSort/thumbnail.png
|
||||
|
||||
index: /
|
||||
store_app_id: metasort
|
||||
main: metasort
|
||||
is_uncontrolled: false
|
||||
|
||||
tips:
|
||||
before_install:
|
||||
en_us: |
|
||||
**Requires MetaCore** - Install MetaCore first.
|
||||
|
||||
MetaSort connects to MetaCore for metadata storage. The dashboard is protected by
|
||||
Yundera's built-in Authelia via OIDC — sign in with your existing Yundera account.
|
||||
|
||||
# Maison (Yundera dashboard) configuration. Read in preference to x-casaos.
|
||||
# schema_version 2 is required for `folders`: an older Maison refuses the app
|
||||
# outright rather than starting it without its directories.
|
||||
x-compose-app:
|
||||
schema_version: 2
|
||||
# Created and chowned by Maison before any image is pulled, before any hook
|
||||
# runs and before the containers start — on the first boot and every one after.
|
||||
# Compose would otherwise create a missing bind source as a root-owned dir.
|
||||
folders:
|
||||
- path: /DATA/AppData/metacore/meta-core
|
||||
user: $PUID
|
||||
group: $PGID
|
||||
- path: /DATA/AppData/metasort/cache
|
||||
user: $PUID
|
||||
group: $PGID
|
||||
# Same string as the caddy_0 label, so the tile link and the route agree.
|
||||
webui-host: metasort-${domain}
|
||||
webui-path: "/"
|
||||
Reference in New Issue
Block a user