Dijital Varlık Yönetim Platformu
Medya ekipleri için gerçek zamanlı işbirliği, akıllı arama, yerel klasör entegrasyonu ve NLE uyumluluğu.
Özellik
Açıklama
🧠 Akıllı Arama
Doğal dil ile arama — "ormanda dondurma yiyen sahneler", "sıcak ışıklı portre"
🏷️ Otomatik Etiketleme
Claude Vision: sahne tipi, nesneler, renkler, ruh hali, sinematografi analizi
✅ Review & Onay
Approve / Reject / In Review iş akışı
🗂️ Klasör Bağlama
PC'deki klasörü projeye bağla — dosyalar kopyalanmadan doğrudan listelenir ve erişilebilir
🎞️ Video Proxy Sistemi
Büyük videolar için 720p H.264 proxy oluşturma; çalışmalar ana dosyaya yansır
⌨️ Klavye Kısayolları
Adobe tarzı kısayollar (J/K/L, frame step), tam özelleştirme
💬 Yorum Sistemi
Zaman damgalı yorumlar, resolve desteği, gerçek zamanlı güncelleme
📍 Marker Sistemi
Video + görsel marker, 7 renk, XMP + FCPXML otomatik sidecar
🎬 NLE Entegrasyonu
Premiere Pro (.xmp) · DaVinci Resolve / Final Cut Pro (.fcpxml)
🤝 Gerçek Zamanlı İşbirliği
WebSocket ile oda başına 10 kullanıcı, canlı avatar gösterimi
🔗 Kişisel Davet Sistemi
Her davetliye özel link, yetki seviyesi, isteğe bağlı şifre
👤 Misafir Erişimi
Kayıt gerektirmez — link ile yorum ve marker ekle
🎥 Özel Video Oynatıcı
Premiere tarzı transport, marker timeline, hız kontrolü
📁 Proje Yönetimi
Grid/liste, tür/durum/tarih/boyut filtresi, akıllı arama
🌓 Karanlık / Aydınlık Mod
Sistem tercihine bağımsız toggle
🔐 RBAC + Brute-force Koruması
Admin / Editor / Viewer, hesap kilitleme
🔒 HTTPS Desteği
Caddy ile otomatik TLS, HSTS, Let's Encrypt
📦 Büyük Dosya Desteği
Tek dosyada 150 GB'a kadar (Admin: sınırsız) — streaming yükleme
Tür
Formatlar
Video
MP4, MOV, AVI, MKV, WebM
Görsel
PNG, JPG/JPEG, WebP, TIFF/TIF, AVIF, GIF
RAW Kamera
CR2, CR3 (Canon) · NEF, NRW (Nikon) · ARW, SRF, SR2 (Sony) · DNG (Adobe) · ORF (Olympus) · RW2 (Panasonic) · PEF (Pentax) · RAF (Fujifilm)
Ses
MP3, WAV, AAC, FLAC, OGG, M4A
Belge
PDF
PC'nizdeki veya sunucudaki bir klasörü projeye bağlayarak dosyaları kopyalamadan doğrudan kullanabilirsiniz.
Proje sayfasında Klasör Bağla butonuna tıklayın
Sunucuda erişilebilir klasör yolunu girin (ör. /home/user/Videos)
Klasör ağacını gözatarak dosyaları seçin
Aktar — dosyalar kopyalanmaz, orijinal konumdan stream edilir
Tüm DAM özellikleri çalışır: yorum, marker, etiket, AI analizi
Proje sayfası → [Klasör Bağla] → Yol gir → Gözat → Seç → Aktar
Docker'da çalıştırıyorsanız klasörü container'a monte etmeniz gerekir:
# docker-compose.yml
services :
backend :
volumes :
- /home/user/Videos:/data/videos # yerel:container
Ardından /data/videos yolunu kullanın.
4K/8K gibi büyük videolarda akıcı önizleme için 720p H.264 proxy oluşturulabilir. Proxy üzerinde yapılan tüm çalışmalar (marker, yorum, etiket) orijinal dosyaya kaydedilir.
Adım
İşlem
1
Asset detay sayfasında Proxy Oluştur butonuna tıklayın
2
ffmpeg arka planda 720p proxy üretir (pending → ready)
3
HD butonu PROXY olur — tıklayarak geçiş yapın
4
Proxy modunda tüm marker ve yorumlar orijinal dosyaya yazılır
Gereksinim: ffmpeg kurulu olmalı.
Docker kullanıyorsanız image'a ekleyin: apt-get install -y ffmpeg
Python 3.12 + FastAPI — async, tip güvenli API
SQLAlchemy ORM + SQLite (production → PostgreSQL)
Anthropic Claude API — Vision analizi, doğal dil arama
ffmpeg — video proxy üretimi (opsiyonel)
JWT (HS256) + bcrypt kimlik doğrulama
slowapi hız sınırlama · GZipMiddleware sıkıştırma
WebSocket gerçek zamanlı işbirliği (ConnectionManager)
React 18 + TypeScript
Tailwind CSS — CSS custom properties ile dark/light theming
TanStack Query — akıllı cache, staleTime, invalidation
Zustand — auth state yönetimi
Vite — code splitting, ES2020 target
Plus Jakarta Sans + JetBrains Mono
Caddy — otomatik HTTPS / Let's Encrypt
Docker Compose — geliştirme + prodüksiyon profilleri
nginx — SPA sunumu, WebSocket proxy
1. Bağımlılıklar
# Backend
cd backend && pip install -r requirements.txt
# Frontend
cd frontend && npm install
2. Ortam Değişkenleri
# backend/.env
SECRET_KEY=cok-guclu-rastgele-bir-anahtar-min-32-karakter
ANTHROPIC_API_KEY=sk-ant-...
DATABASE_URL=sqlite:///./shadow.db
UPLOAD_DIR=./uploads
# AI backend seçimi (opsiyonel)
# auto | local | anthropic | mock
AI_BACKEND=auto
3. Çalıştır
# Terminal 1 — Backend
cd backend && uvicorn app.main:app --reload --port 8000
# Terminal 2 — Frontend
cd frontend && npm run dev
Yerel bir klasörü bağlamak için docker-compose.yml'e volume ekleyin:
services :
backend :
volumes :
- ./uploads:/app/uploads
- /path/to/media:/media # yerel medya klasörü
Caddy otomatik olarak Let's Encrypt üzerinden TLS sertifikası alır ve yeniler:
DOMAIN=shadow.example.com \
SECRET_KEY=$( openssl rand -hex 32) \
ANTHROPIC_API_KEY=sk-ant-... \
docker compose -f docker-compose.prod.yml up -d
Port
Servis
80
HTTP → HTTPS yönlendirme
443
HTTPS (Caddy + Let's Encrypt)
Alan
Önlem
Kimlik Doğrulama
JWT (HS256) · bcrypt şifre hash · rol tabanlı erişim (RBAC)
Brute-force
5 başarısız giriş → 15 dakika hesap kilidi · hız sınırlama (slowapi)
Şifre Politikası
Min. 10 karakter · büyük/küçük harf · rakam · özel karakter zorunlu
Dosya Yükleme
Magic bytes doğrulaması · uzantı beyaz listesi · yol geçişi koruması · streaming (RAM'e yüklemez)
Klasör Bağlama
Path traversal koruması — alt yollar relative_to() ile mount root'a kilitlenir
Yükleme Limiti
Editor: 150 GB / dosya · Admin: sınırsız (sunucu taraflı kontrol)
HTTP Başlıkları
CSP · X-Frame-Options · X-Content-Type-Options · Referrer-Policy · Permissions-Policy
HTTPS
HSTS (1 yıl, preload) · Caddy otomatik TLS · X-Forwarded-Proto koşullu
Paylaşım Linkleri
256-bit token · bcrypt şifre hash · 22-karakter otomatik şifre (~96-bit)
WebSocket
JWT doğrulama · proje erişim kontrolü · oda başına 10 kullanıcı limiti
Veri Doğrulama
Pydantic v2 şemalar · field validator'lar · SQL enjeksiyonu yok (ORM)
Gizlilik
Sunucu parmak izi gizleme · generic hata mesajları · IP hash aktivite logu
CORS
Explicit origin listesi · wildcard (*) başlangıç uyarısı
Denetim
Admin rol değişiklikleri loglama · shadow.audit logger
RFC 9116
/.well-known/security.txt güvenlik açığı bildirim politikası
Önerilen Prodüksiyon Adımları
Aşağıdaki önlemler mimari değişiklik gerektirir; uygulamaya alınması önerilir.
Refresh token pattern — Erişim token'ı süresini 1 saate indirin, yenileme için refresh endpoint ekleyin
httpOnly cookie — JWT'yi sessionStorage yerine httpOnly Secure cookie'de saklayın (XSS koruması)
PostgreSQL — SQLite yerine şifreli bağlantı destekli PostgreSQL kullanın
Bağımlılık tarama — CI pipeline'a pip-audit + npm audit ekleyin
Method
Endpoint
Açıklama
POST
/api/v1/auth/register
Kayıt (şifre politikası uygulanır)
POST
/api/v1/auth/login
Giriş · brute-force korumalı · Cache-Control: no-store
GET
/api/v1/auth/me
Mevcut kullanıcı profili
PATCH
/api/v1/auth/users/{id}/role
Rol güncelle (yalnızca admin, denetim kaydı)
Method
Endpoint
Açıklama
GET
/api/v1/projects/
Proje listesi
POST
/api/v1/projects/
Yeni proje
DELETE
/api/v1/projects/{id}
Proje sil
Method
Endpoint
Açıklama
POST
/api/v1/assets/upload/{project_id}
Dosya yükle — streaming, magic bytes doğrulaması
GET
/api/v1/assets/project/{project_id}
Proje varlıkları (filtreli, sıralanmış)
GET
/api/v1/assets/search?q=
Doğal dil araması
POST
/api/v1/assets/{id}/ai-tag
AI etiketleme tetikle
PATCH
/api/v1/assets/{id}/status
Durum güncelle (WS yayını)
GET
/api/v1/assets/{id}/download
Kimlik doğrulamalı indirme (linked + uploaded)
POST
/api/v1/assets/{id}/proxy
Video proxy oluşturmayı başlat (ffmpeg)
GET
/api/v1/assets/{id}/proxy-file
Hazır proxy dosyasını sun
DELETE
/api/v1/assets/{id}/proxy
Proxy dosyasını sil
Method
Endpoint
Açıklama
POST
/api/v1/mounts/projects/{project_id}
Klasör bağlantısı ekle
GET
/api/v1/mounts/projects/{project_id}
Proje bağlantılarını listele
DELETE
/api/v1/mounts/projects/{project_id}/{mount_id}
Bağlantıyı kaldır
GET
/api/v1/mounts/{mount_id}/browse?sub=
Klasör içeriğini gözat
POST
/api/v1/mounts/{mount_id}/import
Seçili dosyaları linked asset olarak aktar
GET
/api/v1/mounts/stream/{asset_id}
Linked asset'i orijinal konumdan sun
Method
Endpoint
Açıklama
GET
/api/v1/markers/asset/{asset_id}
Marker listesi
POST
/api/v1/markers/asset/{asset_id}
Marker ekle (WS yayını)
PATCH
/api/v1/markers/{id}
Güncelle
DELETE
/api/v1/markers/{id}
Sil — yalnızca oluşturan / proje sahibi / admin
GET
/api/v1/markers/asset/{asset_id}/export/xmp
Premiere Pro export
GET
/api/v1/markers/asset/{asset_id}/export/fcpxml
DaVinci / FCP export
Method
Endpoint
Açıklama
POST
/api/v1/share/asset/{id}
Kişisel davet linki oluştur
GET
/api/v1/share/asset/{id}
Asset'in davet listesi
GET
/api/v1/share/view/{token}
Paylaşılan asset meta verisi (public)
GET
/api/v1/share/file/{token}
Dosya sun (token + path traversal korumalı)
PATCH
/api/v1/share/{id}/revoke
Linki iptal et
POST
/api/v1/share/guest/{token}/comments
Misafir yorum ekle
POST
/api/v1/share/guest/{token}/markers
Misafir marker ekle (edit izni)
Endpoint
Açıklama
WS /ws/{project_id}?token=<jwt>
Gerçek zamanlı işbirliği odası
Format
Dosya
Uyumluluk
XMP Sidecar
dosyaadi.xmp
Adobe Premiere Pro, After Effects, Bridge
FCPXML
dosyaadi.fcpxml
DaVinci Resolve, Final Cut Pro
Gömülü XMP
PNG / TIFF içine
Pillow ile kayıpsız gömme
Video marker: timestamp (saniye) + süre + renk + etiket + not
Görsel marker: yüzde bazlı koordinatlar (0–100%) + renk + etiket + not
Marker silme yalnızca oluşturana , proje sahibine veya admin 'e açıktır.
Shadow/
├── backend/
│ └── app/
│ ├── models/ # SQLAlchemy ORM — User, Asset, Project, Marker, ShareLink, FolderMount
│ ├── schemas/ # Pydantic v2 — doğrulama + serileştirme
│ ├── routers/ # FastAPI — auth, assets, markers, share, collab, folder_mounts
│ ├── services/ # ai_service (Claude), marker_service (XMP/FCPXML), auth
│ ├── utils/ # dependencies, N+1 koruması
│ ├── ws_manager.py # WebSocket ConnectionManager (oda başına maks 10)
│ ├── config.py # Ayarlar, CORS origin doğrulaması
│ ├── database.py # WAL modu, PRAGMA optimizasyonları
│ └── main.py # Middleware yığını, migration, startup
├── frontend/
│ └── src/
│ ├── pages/ # Dashboard, Project, AssetDetail, ShareView, Search
│ ├── components/ # VideoPlayer, AssetCard, UploadZone, FolderMountModal
│ ├── hooks/ # useCollaboration (WebSocket), useShortcutAction
│ ├── utils/ # api.ts, shortcuts, format
│ ├── store/ # Zustand auth store
│ └── types/ # TypeScript arayüzleri
├── Caddyfile # HTTPS prodüksiyon reverse proxy
├── docker-compose.yml # Geliştirme
└── docker-compose.prod.yml # Prodüksiyon (Caddy + HTTPS)
Özellik
Durum
Akıllı Arama + Etiketleme
✅
Review & Onay İş Akışı
✅
Marker Sistemi (video + görsel)
✅
NLE Export (XMP + FCPXML)
✅
Özel Video Oynatıcı (J/K/L)
✅
Gerçek Zamanlı İşbirliği (WS)
✅
Kişisel Davet + Misafir Erişimi
✅
HTTPS / Caddy Otomatik TLS
✅
Brute-force / Hesap Kilitleme
✅
Klasör Bağlama (Local Path)
✅
Video Proxy Sistemi (ffmpeg)
✅
150 GB Streaming Yükleme
✅
Dosya Sıralama Filtreleri
✅
Karanlık / Aydınlık Mod
✅
Cloud NAS / S3 Depolama
❌ Planlanıyor
Yüz / Nesne Tespiti
❌ Planlanıyor
Refresh Token
❌ Planlanıyor