Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 0 additions & 25 deletions docs/TELEMETRY.md

This file was deleted.

134 changes: 0 additions & 134 deletions electron/analytics.ts

This file was deleted.

13 changes: 0 additions & 13 deletions electron/ipc/app-handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import { checkGPU } from '../gpu'
import { isPythonReady, downloadPythonEmbed } from '../python-setup'
import { getBackendHealthStatus, startPythonBackend } from '../python-backend'
import { getMainWindow } from '../window'
import { getAnalyticsState, setAnalyticsEnabled, sendAnalyticsEvent } from '../analytics'

function getModelsPath(): string {
const modelsPath = path.join(app.getPath('userData'), 'models')
Expand Down Expand Up @@ -148,16 +147,4 @@ export function registerAppHandlers(): void {
return getBackendHealthStatus()
})

ipcMain.handle('get-analytics-state', () => {
return getAnalyticsState()
})

ipcMain.handle('set-analytics-enabled', (_event, enabled: boolean) => {
setAnalyticsEnabled(enabled)
})

ipcMain.handle('send-analytics-event', async (_event, eventName: string, extraDetails?: Record<string, unknown> | null) => {
await sendAnalyticsEvent(eventName, extraDetails)
})

}
4 changes: 0 additions & 4 deletions electron/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { initSessionLog } from './logging-management'
import { stopPythonBackend } from './python-backend'
import { initAutoUpdater } from './updater'
import { createWindow, getMainWindow } from './window'
import { sendAnalyticsEvent } from './analytics'

const gotLock = app.requestSingleInstanceLock()

Expand Down Expand Up @@ -48,9 +47,6 @@ if (!gotLock) {
createWindow()
// initAutoUpdater()
// Python setup + backend start are now driven by the renderer via IPC

// Fire analytics event (no-op if user hasn't opted in)
void sendAnalyticsEvent('ltxdesktop_app_launched')
})

app.on('window-all-closed', () => {
Expand Down
11 changes: 0 additions & 11 deletions electron/preload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,14 +114,6 @@ contextBridge.exposeInMainWorld('electronAPI', {
ipcRenderer.send('renderer-console', level, args)
},

// Analytics
getAnalyticsState: (): Promise<{ analyticsEnabled: boolean; installationId: string }> =>
ipcRenderer.invoke('get-analytics-state'),
setAnalyticsEnabled: (enabled: boolean): Promise<void> =>
ipcRenderer.invoke('set-analytics-enabled', enabled),
sendAnalyticsEvent: (eventName: string, extraDetails?: Record<string, unknown> | null): Promise<void> =>
ipcRenderer.invoke('send-analytics-event', eventName, extraDetails),

// Platform info
platform: process.platform,
})
Expand Down Expand Up @@ -185,9 +177,6 @@ declare global {
extractVideoFrame: (videoUrl: string, seekTime: number, width?: number, quality?: number) => Promise<{ path: string; url: string }>
writeLog: (level: string, message: string) => Promise<void>
sendRendererLog: (level: 'log' | 'info' | 'warn' | 'error', ...args: unknown[]) => void
getAnalyticsState: () => Promise<{ analyticsEnabled: boolean; installationId: string }>
setAnalyticsEnabled: (enabled: boolean) => Promise<void>
sendAnalyticsEvent: (eventName: string, extraDetails?: Record<string, unknown> | null) => Promise<void>
platform: string
}
}
Expand Down
52 changes: 0 additions & 52 deletions frontend/components/SettingsModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ export function SettingsModal({ isOpen, onClose, initialTab }: SettingsModalProp
const [modelLicenseText, setModelLicenseText] = useState<string | null>(null)
const [modelLicenseLoading, setModelLicenseLoading] = useState(false)
const [showModelLicense, setShowModelLicense] = useState(false)
const [analyticsEnabled, setAnalyticsEnabled] = useState(false)

// Sync active tab with initialTab prop when modal opens
useEffect(() => {
Expand Down Expand Up @@ -99,14 +98,6 @@ export function SettingsModal({ isOpen, onClose, initialTab }: SettingsModalProp
window.electronAPI.getAppInfo().then(info => setAppVersion(info.version)).catch(() => {})
}, [activeTab, appVersion])

// Fetch analytics state when modal opens
useEffect(() => {
if (!isOpen) return
window.electronAPI.getAnalyticsState()
.then((state: { analyticsEnabled: boolean }) => setAnalyticsEnabled(state.analyticsEnabled))
.catch(() => {})
}, [isOpen])

// Fetch text encoder status when modal opens
useEffect(() => {
if (!isOpen) return
Expand Down Expand Up @@ -236,13 +227,6 @@ export function SettingsModal({ isOpen, onClose, initialTab }: SettingsModalProp
onSettingsChange({ ...settings, promptEnhancerEnabledI2V: !settings.promptEnhancerEnabledI2V })
}
}
// Analytics handler
const handleToggleAnalytics = () => {
const next = !analyticsEnabled
setAnalyticsEnabled(next)
window.electronAPI.setAnalyticsEnabled(next).catch(() => {})
}

// Seed handlers
const handleToggleSeedLock = () => {
onSettingsChange({
Expand Down Expand Up @@ -708,42 +692,6 @@ export function SettingsModal({ isOpen, onClose, initialTab }: SettingsModalProp
</div>
</div>

{/* Anonymous Analytics Setting */}
<div className="space-y-3 pt-4 border-t border-zinc-800">
<div className="flex items-start justify-between gap-4">
<div className="flex-1">
<div className="flex items-center gap-2 mb-1">
<svg className="h-4 w-4 text-violet-400" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<line x1="18" y1="20" x2="18" y2="10" />
<line x1="12" y1="20" x2="12" y2="4" />
<line x1="6" y1="20" x2="6" y2="14" />
</svg>
<label className="text-sm font-medium text-white">
Anonymous Analytics
</label>
</div>
<p className="text-xs text-zinc-500 leading-relaxed">
Share anonymous usage data to help improve Director's Desktop.
Only basic technical information is collected — never personal data or generated content.
</p>
</div>

{/* Toggle Switch */}
<button
onClick={handleToggleAnalytics}
className={`relative inline-flex h-6 w-11 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 ease-in-out focus:outline-none ${
analyticsEnabled ? 'bg-violet-500' : 'bg-zinc-700'
}`}
>
<span
className={`pointer-events-none inline-block h-5 w-5 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out ${
analyticsEnabled ? 'translate-x-5' : 'translate-x-0'
}`}
/>
</button>
</div>

</div>
</>
)}

Expand Down
3 changes: 0 additions & 3 deletions frontend/vite-env.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,6 @@ interface Window {
extractVideoFrame: (videoUrl: string, seekTime: number, width?: number, quality?: number) => Promise<{ path: string; url: string }>
writeLog: (level: string, message: string) => Promise<void>
sendRendererLog: (level: 'log' | 'info' | 'warn' | 'error', ...args: unknown[]) => void
getAnalyticsState: () => Promise<{ analyticsEnabled: boolean; installationId: string }>
setAnalyticsEnabled: (enabled: boolean) => Promise<void>
sendAnalyticsEvent: (eventName: string, extraDetails?: Record<string, unknown> | null) => Promise<void>
platform: string
}
}