Initial vault setup
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
---
|
||||
title: Loops
|
||||
created: 2026-06-07
|
||||
updated: 2026-06-07
|
||||
type: app
|
||||
tags: [catalogue, activitypub-fediverse, video, short-form, tiktok, fediverse]
|
||||
confidence: medium
|
||||
contested: false
|
||||
sources: [https://selfh.st/apps/?tag=activitypub-fediverse, https://joinloops.org/, https://github.com/joinloops/loops-server]
|
||||
---
|
||||
|
||||
# 🎬 Loops
|
||||
|
||||
> **La plateforme de vidéo courte fediverse** : publiez et consommez des vidéos verticales façon TikTok / Reels, mais en ActivityPub, depuis votre propre instance. L'anti-TikTok décentralisé.
|
||||
|
||||
| Métadonnée | Valeur |
|
||||
| :--- | :--- |
|
||||
| **Site web** | [https://joinloops.org](https://joinloops.org) |
|
||||
| **GitHub** | [https://github.com/joinloops/loops-server](https://github.com/joinloops/loops-server) |
|
||||
| **License** | AGPL-3.0 |
|
||||
| **Langage principal** | Go, TypeScript |
|
||||
| **Étoiles GitHub** | 49 ⭐ |
|
||||
| **Dernière MAJ** | 2026-05 |
|
||||
| **Catégorie** | [[cat-activitypub-fediverse]] |
|
||||
|
||||
## Description
|
||||
|
||||
Loops est un projet néerlandais (« loops.video ») qui ambitionne de devenir **le TikTok du Fediverse** : une plateforme de **vidéo courte verticale** (format smartphone, < 1 minute par défaut, jusqu'à 2 min en option), avec feed algorithmique léger, likes, commentaires, follows, et bien sûr **fédération ActivityPub**.
|
||||
|
||||
L'interface web et mobile (PWA) est calquée sur l'expérience « swipe up / swipe down » des plateformes de shorts. Le backend est en **Go** pour la performance (encodage vidéo, distribution) avec un front **TypeScript/React** pour l'UI. Le projet vise la **multi-instance** : un compte `@pseudo@loops.video` peut être suivi depuis Mastodon, et la vidéo est lue inline dans le post Mastodon (player embarqué).
|
||||
|
||||
Cas d'usage : créateur de contenu qui veut garder son audience sans subir l'algorithme opaque de TikTok, associations, médias indépendants, communautés musicales. Le format est plus **engagement + fun** qu'une PeerTube (vidéo longue).
|
||||
|
||||
**Points forts** : UX moderne (PWA fluide), Go (rapide), transcodage vidéo optimisé pour mobile, federation, support multi-instance, webapp responsive.
|
||||
|
||||
**Points faibles** : projet jeune (depuis fin 2024), l'algorithme de feed est encore simple, modération limitée, pas encore d'app iOS/Android native, audio/musique limitée (pas d'intégration Spotify/SoundCloud).
|
||||
|
||||
## Installation
|
||||
|
||||
### Via Docker (recommandé)
|
||||
|
||||
L'image officielle est `ghcr.io/joinloops/loops-server:latest`.
|
||||
|
||||
```yaml
|
||||
# docker-compose.yml
|
||||
services:
|
||||
loops:
|
||||
image: ghcr.io/joinloops/loops-server:latest
|
||||
container_name: loops
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8080:8080"
|
||||
environment:
|
||||
LOOPS_DATABASE_URL: "postgres://loops:***@db/loops?sslmode=disable"
|
||||
LOOPS_LISTEN_ADDR: "0.0.0.0:8080"
|
||||
LOOPS_PUBLIC_URL: "https://loops.example.com"
|
||||
LOOPS_JWT_SECRET: "change-me-random-50-chars"
|
||||
LOOPS_S3_BUCKET: loops-media
|
||||
LOOPS_S3_ENDPOINT: "http://minio:9000"
|
||||
LOOPS_S3_ACCESS_KEY: minio
|
||||
LOOPS_S3_SECRET_KEY: change-me
|
||||
depends_on:
|
||||
- db
|
||||
- minio
|
||||
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_USER: loops
|
||||
POSTGRES_PASSWORD: change-me
|
||||
POSTGRES_DB: loops
|
||||
volumes:
|
||||
- db_data:/var/lib/postgresql/data
|
||||
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
restart: unless-stopped
|
||||
command: server /data --console-address ":9001"
|
||||
environment:
|
||||
MINIO_ROOT_USER: minio
|
||||
MINIO_ROOT_PASSWORD: change-me
|
||||
volumes:
|
||||
- minio_data:/data
|
||||
ports:
|
||||
- "9001:9001"
|
||||
|
||||
volumes:
|
||||
db_data:
|
||||
minio_data:
|
||||
```
|
||||
|
||||
### Installation manuelle
|
||||
|
||||
1. Installer Go 1.22+ et PostgreSQL 14+
|
||||
2. Cloner : `git clone https://github.com/joinloops/loops-server.git`
|
||||
3. Lancer la compilation : `go build -o loops ./cmd/server`
|
||||
4. Configurer le `.env` (DB + stockage objet)
|
||||
5. `./loops migrate && ./loops serve`
|
||||
|
||||
## Configuration
|
||||
|
||||
1. Configurer le **stockage S3-compatible** (Minio local, Backblaze B2, Wasabi…) — les vidéos prennent de la place
|
||||
2. Créer le premier compte admin via l'API
|
||||
3. Activer le **transcodage** (HLS pour la lecture mobile)
|
||||
4. Configurer le **reverse-proxy** (Nginx/Caddy) avec HTTPS
|
||||
5. Activer la **fédération** (par défaut on)
|
||||
|
||||
## Alternatives
|
||||
|
||||
### Open source
|
||||
- [[app-peertube]] — vidéo longue, fediverse, plus mature
|
||||
- **TikTok** centralisé, propriétaire
|
||||
- **Shortwave** — autre tentative de short-vidéo fediverse (statut flou)
|
||||
- **Owncast** — live streaming, pas du tout short-form
|
||||
|
||||
### Propriétaires
|
||||
- TikTok — short vidéo, centralisé
|
||||
- Instagram Reels — intégré à Instagram
|
||||
- YouTube Shorts — intégré à YouTube
|
||||
|
||||
## Sécurité
|
||||
|
||||
- **HTTPS obligatoire**
|
||||
- **Stockage S3** : verrouiller les permissions, idéalement bucket privé avec URL signées
|
||||
- **Modération** : Loops intègre un système de signalement, à configurer (auto-deletion de contenu flag)
|
||||
- **Quotas par utilisateur** : limiter la taille et la durée des vidéos (sinon le S3 explose)
|
||||
- **Sauvegardes** : BDD PostgreSQL + bucket S3 synchronisé (rclone / restic)
|
||||
|
||||
## Ressources
|
||||
- Site officiel : [joinloops.org](https://joinloops.org)
|
||||
- Documentation : [docs.joinloops.org](https://docs.joinloops.org)
|
||||
- Démo : [loops.video](https://loops.video) (instance principale)
|
||||
- Communauté : Matrix `#loops:matrix.org`
|
||||
|
||||
## Pages Liées
|
||||
- [[cat-activitypub-fediverse]]
|
||||
- [[recettes-docker-compose]]
|
||||
- [[app-peertube]]
|
||||
Reference in New Issue
Block a user