| import React, { useState, useEffect } from 'react'; |
| import { Camera, Shield, ShieldCheck, Heart, Info, Box } from 'lucide-react'; |
| import { motion } from 'motion/react'; |
| import CameraView from './components/CameraView'; |
| import MetricRadar from './components/MetricRadar'; |
| import AuraControl from './components/AuraControl'; |
| import AutomationFeed from './components/AutomationFeed'; |
| import OBSViewer from './components/OBSViewer'; |
| import { TUNNEL_URL } from './tunnelConfig'; |
|
|
| export default function App() { |
| const [cloakEnabled, setCloakEnabled] = useState(false); |
| const [cloakIntensity, setCloakIntensity] = useState(30); |
| const [cloakMode, setCloakMode] = useState<'obfuscate' | 'refine'>('obfuscate'); |
| const [sourceType, setSourceType] = useState<'camera' | 'image'>('camera'); |
| const [testImage, setTestImage] = useState<string | null>(null); |
| const [targetImage, setTargetImage] = useState<string | null>(null); |
| const [mobileTab, setMobileTab] = useState<'feed' | 'controls' | 'metrics'>('feed'); |
| const [metrics, setMetrics] = useState<any>({ |
| native: { symmetry: 34, eyes: -0.8, jawline: 0.6, midface: 0.44, cheekbones: 1.2, eyeAspect: 0.34, harmony: 7, overall: 5 }, |
| cloaked: { symmetry: 34, eyes: -0.8, jawline: 0.6, midface: 0.44, cheekbones: 1.2, eyeAspect: 0.34, harmony: 7, overall: 5 } |
| }); |
| const [isBroadcasting, setIsBroadcasting] = useState(false); |
| const [tunnelSignalUrl, setTunnelSignalUrl] = useState(''); |
|
|
| useEffect(() => { |
| |
| const fetchTunnelInfo = async () => { |
| try { |
| const res = await fetch('/api/tunnel-info'); |
| const data = await res.json(); |
| if (data.url) { |
| setTunnelSignalUrl(data.url); |
| } |
| } catch (e) { |
| console.error("Failed to fetch tunnel info:", e); |
| } |
| }; |
| fetchTunnelInfo(); |
| const interval = setInterval(fetchTunnelInfo, 5000); |
| return () => clearInterval(interval); |
| }, []); |
|
|
| |
| const urlParams = new URLSearchParams(window.location.search); |
| const isVirtualView = urlParams.get('view') === 'virtual'; |
|
|
| if (isVirtualView) { |
| const overrideUrl = urlParams.get('signal'); |
| return <OBSViewer signalUrl={overrideUrl || tunnelSignalUrl} />; |
| } |
|
|
| const baseUrl = window.location.origin; |
| const virtualCamUrl = `${baseUrl}${window.location.pathname}?view=virtual${tunnelSignalUrl ? `&signal=${encodeURIComponent(tunnelSignalUrl)}` : ''}`; |
|
|
| const handleFileUpload = (e: React.ChangeEvent<HTMLInputElement>) => { |
| const file = e.target.files?.[0]; |
| if (file) { |
| const reader = new FileReader(); |
| reader.onload = (event) => { |
| setTestImage(event.target?.result as string); |
| setSourceType('image'); |
| }; |
| reader.readAsDataURL(file); |
| } |
| }; |
|
|
| const handleTargetUpload = (e: React.ChangeEvent<HTMLInputElement>) => { |
| const file = e.target.files?.[0]; |
| if (file) { |
| const reader = new FileReader(); |
| reader.onload = (event) => setTargetImage(event.target?.result as string); |
| reader.readAsDataURL(file); |
| } |
| }; |
|
|
| return ( |
| <div className="h-[100dvh] bg-bg-primary text-[#e0e0e0] flex flex-col overflow-hidden font-sans"> |
| {/* Header */} |
| <header className="h-16 border-b border-white/10 flex items-center justify-between px-4 md:px-8 bg-bg-secondary shrink-0"> |
| <div className="flex items-center gap-4"> |
| <div className="w-3 h-3 bg-aura-500 rounded-full shadow-[0_0_8px_#00FF9C]"></div> |
| <h1 className="font-serif italic text-lg md:text-xl tracking-wide"> |
| De-Mog <span className="hidden md:inline text-xs font-mono text-white/40 ml-2">v1.0.4 - Protection Active</span> |
| </h1> |
| </div> |
| |
| {/* Mobile Tabs */} |
| <div className="flex lg:hidden bg-white/5 rounded-lg p-1"> |
| <button |
| onClick={() => setMobileTab('feed')} |
| className={`px-3 py-1 font-mono text-[10px] uppercase rounded ${mobileTab === 'feed' ? 'bg-white/10 text-white' : 'text-white/40'}`} |
| > |
| Feed |
| </button> |
| <button |
| onClick={() => setMobileTab('controls')} |
| className={`px-3 py-1 font-mono text-[10px] uppercase rounded ${mobileTab === 'controls' ? 'bg-white/10 text-white' : 'text-white/40'}`} |
| > |
| Controls |
| </button> |
| <button |
| onClick={() => setMobileTab('metrics')} |
| className={`px-3 py-1 font-mono text-[10px] uppercase rounded ${mobileTab === 'metrics' ? 'bg-white/10 text-white' : 'text-white/40'}`} |
| > |
| Metrics |
| </button> |
| </div> |
| |
| <div className="hidden lg:flex gap-4 md:gap-6 text-[10px] md:text-[11px] font-mono uppercase tracking-widest text-white/60"> |
| <span className="hidden sm:inline">Session: 04:12:09</span> |
| <span className={cloakEnabled ? "text-aura-500" : "text-white/40"}> |
| {cloakEnabled ? "Target Cloaked" : "System Vulnerable"} |
| </span> |
| </div> |
| </header> |
| |
| <main className="flex-1 flex flex-col lg:flex-row overflow-hidden"> |
| |
| {/* Left Sidebar: Controls */} |
| <aside className={`${mobileTab === 'controls' ? 'flex' : 'hidden'} lg:flex flex-1 min-h-0 lg:flex-none w-full lg:w-72 border-r border-white/10 p-4 md:p-6 flex-col gap-6 bg-bg-tertiary shrink-0 overflow-y-auto`}> |
| <section> |
| <p className="text-[10px] uppercase tracking-tighter text-white/40 mb-3 font-mono">Source Input</p> |
| <div className="flex gap-2 mb-3 bg-white/5 p-1 rounded-lg"> |
| <button |
| onClick={() => setSourceType('camera')} |
| className={`flex-1 py-1.5 text-xs font-mono rounded ${sourceType === 'camera' ? 'bg-white/10 text-white' : 'text-white/40 hover:text-white/80'}`} |
| > |
| Camera |
| </button> |
| <button |
| onClick={() => setSourceType('image')} |
| className={`flex-1 py-1.5 text-xs font-mono rounded ${sourceType === 'image' ? 'bg-white/10 text-white' : 'text-white/40 hover:text-white/80'}`} |
| > |
| Static Image |
| </button> |
| </div> |
| |
| {sourceType === 'image' && ( |
| <label className="aspect-square bg-white/5 border border-dashed border-white/20 rounded-lg flex flex-col items-center justify-center p-4 text-center group cursor-pointer hover:border-aura-500/50 transition-colors"> |
| <input type="file" accept="image/*" onChange={handleFileUpload} className="hidden" /> |
| {testImage ? ( |
| <div className="relative w-full h-full p-2 bg-white/5"> |
| <img src={testImage} alt="Test" className="w-full h-full object-contain rounded" /> |
| <button |
| onClick={(e) => { e.preventDefault(); setTestImage(null); }} |
| className="absolute -top-1 -right-1 bg-red-500 text-white w-5 h-5 rounded-full text-[10px] flex items-center justify-center border border-white/20 hover:bg-red-600 transition-colors" |
| > |
| ✕ |
| </button> |
| </div> |
| ) : ( |
| <> |
| <div className="w-10 h-10 border border-white/10 rounded-full mb-3 flex items-center justify-center group-hover:border-aura-500 transition-colors"> |
| <Box className="w-4 h-4 text-white/40 group-hover:text-aura-500" /> |
| </div> |
| <p className="text-xs font-serif italic">Upload Source Image</p> |
| <p className="text-[9px] text-white/30 mt-2 font-mono italic">Static neural testing</p> |
| </> |
| )} |
| </label> |
| )} |
| </section> |
| |
| {cloakMode === 'obfuscate' && ( |
| <section> |
| <p className="text-[10px] uppercase tracking-tighter text-white/40 mb-3 font-mono">Target Identity (Obfuscate)</p> |
| <label className="aspect-video bg-white/5 border border-dashed border-white/20 rounded-lg flex flex-col items-center justify-center p-4 text-center group cursor-pointer hover:border-aura-500/50 transition-colors"> |
| <input type="file" accept="image/*" onChange={handleTargetUpload} className="hidden" /> |
| {targetImage ? ( |
| <div className="relative w-full h-full p-2 bg-white/5"> |
| <img src={targetImage} alt="Target" className="w-full h-full object-cover rounded" /> |
| <button |
| onClick={(e) => { e.preventDefault(); setTargetImage(null); }} |
| className="absolute -top-1 -right-1 bg-red-500 text-white w-5 h-5 rounded-full text-[10px] flex items-center justify-center border border-white/20 hover:bg-red-600 transition-colors" |
| > |
| ✕ |
| </button> |
| </div> |
| ) : ( |
| <> |
| <div className="w-8 h-8 border border-white/10 rounded-full mb-2 flex items-center justify-center group-hover:border-aura-500 transition-colors"> |
| <Box className="w-4 h-4 text-white/40 group-hover:text-aura-500" /> |
| </div> |
| <p className="text-[10px] font-serif italic text-white/60">Upload Face Swap Target</p> |
| </> |
| )} |
| </label> |
| </section> |
| )} |
| |
| <section> |
| <AuraControl |
| enabled={cloakEnabled} |
| setEnabled={setCloakEnabled} |
| intensity={cloakIntensity} |
| setIntensity={setCloakIntensity} |
| mode={cloakMode} |
| setMode={setCloakMode} |
| /> |
| </section> |
| |
| <section className="bg-white/5 border border-white/10 p-3 rounded space-y-2"> |
| <div className="flex items-center justify-between"> |
| <div className="flex items-center gap-2 text-[10px] font-mono text-white/40 uppercase tracking-widest"> |
| <Camera className="w-3 h-3" /> |
| <span>Signal Server (Borepub)</span> |
| </div> |
| {tunnelSignalUrl ? ( |
| <span className="flex items-center gap-1 text-[8px] font-mono text-aura-500"> |
| <span className="w-1.5 h-1.5 bg-aura-500 rounded-full animate-pulse" /> |
| LIVE |
| </span> |
| ) : ( |
| <span className="flex items-center gap-1 text-[8px] font-mono text-white/20"> |
| <div className="w-3 h-3 border border-white/20 border-t-white/50 rounded-full animate-spin" /> |
| STARTING |
| </span> |
| )} |
| </div> |
| <p className="text-[9px] text-white/40 font-mono italic leading-tight"> |
| Signaling server URL. Bypasses HuggingFace proxy for stable WebRTC. |
| </p> |
| <div className="flex gap-1"> |
| <input |
| readOnly |
| type="text" |
| value={tunnelSignalUrl || 'Detecting tunnel...'} |
| className="flex-1 bg-black/50 border border-white/10 p-1.5 text-[9px] font-mono text-aura-500 rounded outline-none" |
| /> |
| <button |
| onClick={() => { |
| navigator.clipboard.writeText(tunnelSignalUrl); |
| alert("Tunnel URL copied! Use this for 'SETUP_TARGET' in Tampermonkey."); |
| }} |
| className="px-3 bg-white/5 border border-white/10 text-white/40 hover:bg-white/10 text-[9px] font-mono rounded" |
| > |
| COPY |
| </button> |
| </div> |
| |
| <div className="h-px bg-white/5 my-2" /> |
| |
| <div className="flex items-center gap-2 text-[10px] font-mono text-white/40 uppercase tracking-widest"> |
| <span>OBS Browser Source</span> |
| </div> |
| <input |
| readOnly |
| value={virtualCamUrl} |
| className="w-full bg-black/50 border border-white/10 p-1.5 text-[9px] font-mono text-white/40 rounded outline-none" |
| /> |
| <button |
| onClick={() => { |
| navigator.clipboard.writeText(virtualCamUrl); |
| }} |
| className="w-full py-1.5 text-[9px] font-mono uppercase tracking-widest bg-aura-500/10 text-aura-500 border border-aura-500/20 hover:bg-aura-500/20 transition-colors rounded" |
| > |
| Copy Source URL |
| </button> |
| </section> |
| |
| <button |
| onClick={() => setCloakEnabled(!cloakEnabled)} |
| className="w-full py-4 bg-white text-black font-serif italic text-sm rounded hover:bg-aura-500 transition-all active:scale-[0.98] shrink-0" |
| > |
| {cloakEnabled ? 'Deactivate Cloak' : 'Initialize Cloak'} |
| </button> |
| </aside> |
|
|
| {} |
| <section className={`${mobileTab === 'feed' ? 'flex' : 'hidden'} lg:flex flex-1 p-4 md:p-8 flex-col gap-6 overflow-hidden bg-black relative`}> |
| <div className="relative flex-1 rounded-2xl overflow-hidden border border-white/10 shadow-2xl bg-black"> |
| <CameraView |
| cloakEnabled={cloakEnabled} |
| cloakIntensity={cloakIntensity} |
| cloakMode={cloakMode} |
| testImage={testImage} |
| targetImage={targetImage} |
| sourceType={sourceType} |
| onMetricsUpdate={setMetrics} |
| setIsBroadcasting={setIsBroadcasting} |
| signalUrl={tunnelSignalUrl} |
| /> |
| |
| <div className="absolute bottom-6 left-6 md:bottom-8 md:left-8 z-20 pointer-events-none"> |
| <div className="text-2xl md:text-4xl font-serif italic mb-1 text-white"> |
| {testImage ? 'Static Buffer' : 'Protected Feed'} |
| </div> |
| <div className="text-[9px] md:text-[10px] font-mono text-white/50 tracking-tighter"> |
| {testImage ? 'DIAGNOSTIC STATIC INTERVENTION' : 'ADVFACES CLOAKING ENGINE // REAL-TIME INTERVENTION'} |
| </div> |
| </div> |
| </div> |
| </section> |
|
|
| {} |
| <aside className={`${mobileTab === 'metrics' ? 'flex' : 'hidden'} lg:flex flex-1 min-h-0 lg:flex-none w-full lg:w-80 border-l border-white/10 p-4 md:p-6 bg-bg-tertiary shrink-0 overflow-y-auto flex-col overflow-x-hidden gap-8`}> |
| <MetricRadar metrics={metrics} cloakEnabled={cloakEnabled} /> |
| |
| <AutomationFeed /> |
| |
| <div className="mt-auto pt-8 border-t border-white/5"> |
| <p className="text-[10px] uppercase tracking-tighter text-white/40 mb-4 font-mono">Bypass Status</p> |
| <div className="space-y-3 font-mono text-[10px]"> |
| <div className="flex gap-3 items-center text-aura-500"> |
| <span className="w-1.5 h-1.5 rounded-full bg-aura-500 shadow-[0_0_4px_currentColor]"></span> |
| <span>MESH COORDINATES JITTERED</span> |
| </div> |
| <div className={`flex gap-3 items-center transition-colors ${cloakEnabled ? 'text-aura-500' : 'text-white/20'}`}> |
| <span className={`w-1.5 h-1.5 rounded-full ${cloakEnabled ? 'bg-aura-500 shadow-[0_0_4px_currentColor]' : 'bg-white/20'}`}></span> |
| <span>RATING BOT BYPASSED</span> |
| </div> |
| </div> |
| </div> |
|
|
| <div className="mt-8 p-4 border border-aura-500/20 bg-aura-500/5"> |
| <p className="text-xs font-serif italic text-aura-500 mb-1">Human Perception Check</p> |
| <p className="text-[10px] text-white/60 leading-relaxed font-mono"> |
| Adversarial noise is currently optimized. The face remains natural to human viewers while breaking machine vision models. |
| </p> |
| </div> |
| </aside> |
| </main> |
|
|
| {} |
| <div className="lg:hidden h-10 border-t border-white/10 bg-bg-secondary flex items-center px-4 justify-between"> |
| <span className="text-[9px] font-mono text-aura-500 uppercase tracking-widest"> |
| Status: {cloakEnabled ? 'CLOAK_ACTIVE' : 'MONITORING'} |
| </span> |
| <span className={`text-[9px] font-mono uppercase ${isBroadcasting ? 'text-aura-500' : 'text-white/20'}`}> |
| BROADCAST: {isBroadcasting ? 'LIVE' : 'OFFLINE'} |
| </span> |
| </div> |
|
|
| {} |
| <footer className="hidden sm:flex h-10 bg-black border-t border-white/5 px-8 items-center justify-between text-[10px] font-mono text-white/30 shrink-0"> |
| <div className="flex gap-4 items-center"> |
| <span>ENC_KEY: 88f2-x921-adv-p32</span> |
| <span className="w-px h-3 bg-white/10" /> |
| <span className={isBroadcasting ? 'text-aura-500' : 'text-white/10'}> |
| SIGNAL: {isBroadcasting ? 'ACTIVE' : 'OFFLINE'} |
| </span> |
| </div> |
| <div className="flex gap-8 uppercase tracking-widest"> |
| <span className="hover:text-white cursor-pointer transition-colors">Safety Guidelines</span> |
| <span className="hover:text-white cursor-pointer transition-colors text-aura-500 font-bold">AdvFaces Protocol v4</span> |
| </div> |
| </footer> |
| </div> |
| ); |
| } |
|
|