tamnguyenvan/screenarc
View on GitHub ↗
Unique within the repo — the other 16% repeats across its own files.
Unique across all public code — a further 24% is its own but appears in other public repos too.
Tidy, but not new — the code doesn't repeat itself, yet a large share already exists across other public repos. A strong candidate for pulling from (or publishing as) a shared package.
Worth consolidating — in the code
Real, actionable duplication in this repo's source, most concrete first.
Longest identical blocks
The longest runs of identical consecutive lines copied between two files (indentation ignored) — the most concrete copy-paste. Lift the block into a shared function or module.
| Lines | File A | File B | Cross-repo |
|---|---|---|---|
| 17 | tamnguyenvan/screenarc/src/components/editor/sidepanel/AudioSettings.tsx:17 |
tamnguyenvan/screenarc/src/components/editor/sidepanel/CameraSettings.tsx:31 |
same repo |
| 14 | tamnguyenvan/screenarc/electron/main/features/screen-video-writer.ts:104 |
tamnguyenvan/screenarc/electron/main/features/system-audio-writer.ts:100 |
same repo |
| 13 | tamnguyenvan/screenarc/electron/main/features/build-recording-args.ts:35 |
tamnguyenvan/screenarc/electron/main/features/recording-manager.ts:395 |
same repo |
| 12 | tamnguyenvan/screenarc/src/components/editor/sidepanel/CameraSettings.tsx:382 |
tamnguyenvan/screenarc/src/components/editor/sidepanel/FrameEffectsSettings.tsx:149 |
same repo |
| 11 | tamnguyenvan/screenarc/src/components/editor/sidepanel/AnimationSettings.tsx:82 |
tamnguyenvan/screenarc/src/components/editor/sidepanel/CursorSettings.tsx:399 |
same repo |
| 9 | tamnguyenvan/screenarc/electron/main/types/index.ts:1 |
tamnguyenvan/screenarc/src/types/index.ts:90 |
same repo |
| 9 | tamnguyenvan/screenarc/src/components/editor/sidepanel/CameraSettings.tsx:385 |
tamnguyenvan/screenarc/src/components/editor/sidepanel/CursorSettings.tsx:479 |
same repo |
| 9 | tamnguyenvan/screenarc/src/components/editor/sidepanel/CursorSettings.tsx:479 |
tamnguyenvan/screenarc/src/components/editor/sidepanel/FrameEffectsSettings.tsx:152 |
same repo |
| 9 | tamnguyenvan/screenarc/src/components/editor/timeline/SpeedRegionBlock.tsx:10 |
tamnguyenvan/screenarc/src/components/editor/timeline/ZoomRegionBlock.tsx:8 |
same repo |
| 9 | tamnguyenvan/screenarc/src/pages/RendererPage.tsx:60 |
tamnguyenvan/screenarc/src/store/slices/projectSlice.ts:147 |
same repo |
| 8 | tamnguyenvan/screenarc/src/components/editor/sidepanel/CursorSettings.tsx:136 |
tamnguyenvan/screenarc/src/store/slices/uiSlice.ts:10 |
same repo |
| 8 | tamnguyenvan/screenarc/src/components/editor/timeline/CutRegionBlock.tsx:10 |
tamnguyenvan/screenarc/src/components/editor/timeline/ZoomRegionBlock.tsx:9 |
same repo |
| 8 | tamnguyenvan/screenarc/src/components/editor/timeline/CutRegionBlock.tsx:10 |
tamnguyenvan/screenarc/src/components/editor/timeline/SpeedRegionBlock.tsx:11 |
same repo |
| 7 | tamnguyenvan/screenarc/electron/main/features/screen-video-writer.test.ts:47 |
tamnguyenvan/screenarc/electron/main/features/system-audio-writer.test.ts:48 |
same repo |
| 7 | tamnguyenvan/screenarc/src/components/editor/sidepanel/AnimationSettingsPanel.tsx:141 |
tamnguyenvan/screenarc/src/components/editor/sidepanel/CursorSettings.tsx:496 |
same repo |
| 7 | tamnguyenvan/screenarc/src/lib/screen-capture.ts:183 |
tamnguyenvan/screenarc/src/lib/system-audio.ts:101 |
same repo |
| 6 | tamnguyenvan/screenarc/electron/main/features/build-mux-args.test.ts:25 |
tamnguyenvan/screenarc/electron/main/features/build-mux-args.ts:36 |
same repo |
| 6 | tamnguyenvan/screenarc/src/components/editor/PresetPreview.tsx:141 |
tamnguyenvan/screenarc/src/components/editor/sidepanel/CameraSettings.tsx:404 |
same repo |
| 6 | tamnguyenvan/screenarc/src/components/editor/RegionSettingsPanel.tsx:129 |
tamnguyenvan/screenarc/src/components/editor/sidepanel/CameraSettings.tsx:404 |
same repo |
| 6 | tamnguyenvan/screenarc/src/components/editor/RegionSettingsPanel.tsx:129 |
tamnguyenvan/screenarc/src/components/editor/sidepanel/AudioSettings.tsx:124 |
same repo |
Top duplication hotspots
| Similarity | Overlap | File A | File B | Cross-repo |
|---|---|---|---|---|
| 27% | 198 | tamnguyenvan/screenarc/src/lib/screen-capture.ts |
tamnguyenvan/screenarc/src/lib/system-audio.ts |
same repo |
| 74% | 192 | tamnguyenvan/screenarc/electron/main/features/screen-video-writer.test.ts |
tamnguyenvan/screenarc/electron/main/features/system-audio-writer.test.ts |
same repo |
| 22% | 181 | tamnguyenvan/screenarc/src/components/editor/sidepanel/CameraSettings.tsx |
tamnguyenvan/screenarc/src/components/editor/sidepanel/CursorSettings.tsx |
same repo |
| 6% | 148 | tamnguyenvan/screenarc/electron/main/features/recording-manager.ts |
tamnguyenvan/screenarc/electron/main/ipc/handlers/desktop.ts |
same repo |
| 72% | 147 | tamnguyenvan/screenarc/electron/main/features/screen-video-writer.ts |
tamnguyenvan/screenarc/electron/main/features/system-audio-writer.ts |
same repo |
| 42% | 125 | tamnguyenvan/screenarc/src/components/editor/sidepanel/AnimationSettings.tsx |
tamnguyenvan/screenarc/src/components/editor/sidepanel/AnimationSettingsPanel.tsx |
same repo |
| 20% | 121 | tamnguyenvan/screenarc/src/components/editor/sidepanel/CameraSettings.tsx |
tamnguyenvan/screenarc/src/components/editor/sidepanel/FrameEffectsSettings.tsx |
same repo |
| 18% | 118 | tamnguyenvan/screenarc/src/components/editor/sidepanel/CursorSettings.tsx |
tamnguyenvan/screenarc/src/components/editor/sidepanel/FrameEffectsSettings.tsx |
same repo |
| 4% | 116 | tamnguyenvan/screenarc/electron/main/features/recording-manager.ts |
tamnguyenvan/screenarc/src/pages/RecorderPage.tsx |
same repo |
| 12% | 114 | tamnguyenvan/screenarc/src/pages/RendererPage.tsx |
tamnguyenvan/screenarc/src/store/slices/projectSlice.ts |
same repo |
| 19% | 111 | tamnguyenvan/screenarc/src/components/editor/sidepanel/AudioSettings.tsx |
tamnguyenvan/screenarc/src/components/editor/sidepanel/CameraSettings.tsx |
same repo |
| 16% | 106 | tamnguyenvan/screenarc/src/components/editor/sidepanel/AnimationSettingsPanel.tsx |
tamnguyenvan/screenarc/src/components/editor/sidepanel/CursorSettings.tsx |
same repo |
| 13% | 85 | tamnguyenvan/screenarc/src/components/editor/sidepanel/AnimationSettings.tsx |
tamnguyenvan/screenarc/src/components/editor/sidepanel/CursorSettings.tsx |
same repo |
| 33% | 82 | tamnguyenvan/screenarc/src/components/editor/timeline/SpeedRegionBlock.tsx |
tamnguyenvan/screenarc/src/components/editor/timeline/ZoomRegionBlock.tsx |
same repo |
| 3% | 82 | tamnguyenvan/screenarc/electron/main/features/export-manager.ts |
tamnguyenvan/screenarc/electron/main/features/recording-manager.ts |
same repo |
| 12% | 77 | tamnguyenvan/screenarc/src/components/editor/sidepanel/AnimationSettingsPanel.tsx |
tamnguyenvan/screenarc/src/components/editor/sidepanel/CameraSettings.tsx |
same repo |
| 33% | 75 | tamnguyenvan/screenarc/src/components/editor/timeline/CutRegionBlock.tsx |
tamnguyenvan/screenarc/src/components/editor/timeline/ZoomRegionBlock.tsx |
same repo |
| 11% | 74 | tamnguyenvan/screenarc/src/components/editor/sidepanel/AudioSettings.tsx |
tamnguyenvan/screenarc/src/components/editor/sidepanel/CursorSettings.tsx |
same repo |
| 18% | 70 | tamnguyenvan/screenarc/src/components/editor/sidepanel/AnimationSettingsPanel.tsx |
tamnguyenvan/screenarc/src/components/editor/sidepanel/AudioSettings.tsx |
same repo |
| 8% | 70 | tamnguyenvan/screenarc/src/components/editor/ExportModal.tsx |
tamnguyenvan/screenarc/src/components/editor/PresetModal.tsx |
same repo |
Duplicate declarations
The same function, variable, class, or type name declared in more than one file — a fast copy-paste signal. Consider extracting a shared definition.
| Files | Declaration | Where |
|---|---|---|
| 5 | type click |
tamnguyenvan/screenarc/electron/main/features/mouse-tracker.tstamnguyenvan/screenarc/electron/main/types/index.tstamnguyenvan/screenarc/src/lib/renderer.ts+2 more |
| 5 | type cut |
tamnguyenvan/screenarc/src/components/editor/RegionSettingsPanel.tsxtamnguyenvan/screenarc/src/components/editor/Timeline.tsxtamnguyenvan/screenarc/src/hooks/useTimelineInteraction.ts+2 more |
| 5 | type move |
tamnguyenvan/screenarc/electron/main/features/mouse-tracker.tstamnguyenvan/screenarc/src/components/editor/timeline/CutRegionBlock.tsxtamnguyenvan/screenarc/src/components/editor/timeline/SpeedRegionBlock.tsx+2 more |
| 5 | type zoom |
tamnguyenvan/screenarc/src/components/editor/RegionSettingsPanel.tsxtamnguyenvan/screenarc/src/components/editor/Timeline.tsxtamnguyenvan/screenarc/src/store/slices/projectSlice.ts+2 more |
| 4 | type wallpaper |
tamnguyenvan/screenarc/src/components/editor/Preview.tsxtamnguyenvan/screenarc/src/components/editor/sidepanel/BackgroundSettings.tsxtamnguyenvan/screenarc/src/pages/RendererPage.tsx+1 more |
| 3 | type CursorTheme |
tamnguyenvan/screenarc/electron/main/types/index.tstamnguyenvan/screenarc/electron/preload.tstamnguyenvan/screenarc/src/types/index.ts |
| 3 | type speed |
tamnguyenvan/screenarc/src/components/editor/Timeline.tsxtamnguyenvan/screenarc/src/store/slices/timelineSlice.tstamnguyenvan/screenarc/src/types/index.ts |
| 3 | type warning |
tamnguyenvan/screenarc/electron/main/features/recording-manager.tstamnguyenvan/screenarc/electron/main/ipc/handlers/desktop.tstamnguyenvan/screenarc/src/pages/RecorderPage.tsx |
| 2 | type CursorFrame |
tamnguyenvan/screenarc/electron/main/types/index.tstamnguyenvan/screenarc/src/types/index.ts |
| 2 | type DisplayInfo |
tamnguyenvan/screenarc/electron/preload.tstamnguyenvan/screenarc/src/pages/RecorderPage.tsx |
| 2 | fn getCurrentCursorName |
tamnguyenvan/screenarc/electron/main/lib/macos-cursor-manager.tstamnguyenvan/screenarc/electron/main/lib/win-cursor-manager.ts |
| 2 | fn lerp |
tamnguyenvan/screenarc/src/lib/renderer.tstamnguyenvan/screenarc/src/lib/transform.ts |
| 2 | type MetaDataItem |
tamnguyenvan/screenarc/electron/main/types/index.tstamnguyenvan/screenarc/src/types/index.ts |
| 2 | class names |
tamnguyenvan/screenarc/src/components/ui/color-picker.tsxtamnguyenvan/screenarc/src/components/ui/icons.tsx |
| 2 | fn prepareMacOSCursorBitmaps |
tamnguyenvan/screenarc/src/pages/RendererPage.tsxtamnguyenvan/screenarc/src/store/slices/projectSlice.ts |
| 2 | fn prepareWindowsCursorBitmaps |
tamnguyenvan/screenarc/src/pages/RendererPage.tsxtamnguyenvan/screenarc/src/store/slices/projectSlice.ts |
| 2 | type Preset |
tamnguyenvan/screenarc/electron/preload.tstamnguyenvan/screenarc/src/types/index.ts |
| 2 | type recordingGeometry |
tamnguyenvan/screenarc/electron/main/state.tstamnguyenvan/screenarc/src/types/index.ts |
| 2 | type RenderStartPayload |
tamnguyenvan/screenarc/electron/preload.tstamnguyenvan/screenarc/src/pages/RendererPage.tsx |
| 2 | fn that |
tamnguyenvan/screenarc/electron/main/features/recording-manager.tstamnguyenvan/screenarc/src/lib/easing.ts |
| 2 | type type |
tamnguyenvan/screenarc/electron/main/ipc/handlers/desktop.tstamnguyenvan/screenarc/src/components/ui/input.tsx |
| 2 | type window |
tamnguyenvan/screenarc/electron/electron-env.d.tstamnguyenvan/screenarc/electron/preload.ts |
Docs & prose
Near-identical documentation — often translations (e.g. README.md ⇄ README_zh-CN.md) or mirrored guides. Usually intentional, not cleanup — listed separately so it doesn't inflate the code signal above.
Top duplication hotspots
| Similarity | Overlap | File A | File B | Cross-repo |
|---|---|---|---|---|
| 8% | 41 | tamnguyenvan/screenarc/CHANGELOG.md |
tamnguyenvan/screenarc/CODE_OF_CONDUCT.md |
same repo |
| 4% | 26 | tamnguyenvan/screenarc/docs/development-plan.md |
tamnguyenvan/screenarc/docs/user-flow.md |
same repo |
| 3% | 26 | tamnguyenvan/screenarc/docs/tech-stacks.md |
tamnguyenvan/screenarc/docs/user-flow.md |
same repo |
| 3% | 26 | tamnguyenvan/screenarc/README.md |
tamnguyenvan/screenarc/docs/high-level-goals.md |
same repo |
| 3% | 25 | tamnguyenvan/screenarc/CONTRIBUTING.md |
tamnguyenvan/screenarc/README.md |
same repo |
Largest files
Largest files
| LOC | File | Status |
|---|---|---|
| 1233 | tamnguyenvan/screenarc/electron/main/features/recording-manager.ts | indexed |
| 710 | tamnguyenvan/screenarc/src/pages/RecorderPage.tsx | indexed |
| 541 | tamnguyenvan/screenarc/src/lib/renderer.ts | indexed |
| 502 | tamnguyenvan/screenarc/src/components/editor/sidepanel/CursorSettings.tsx | indexed |
| 470 | tamnguyenvan/screenarc/src/components/editor/Preview.tsx | indexed |
| 409 | tamnguyenvan/screenarc/src/components/editor/sidepanel/CameraSettings.tsx | indexed |
| 383 | tamnguyenvan/screenarc/electron/main/features/mouse-tracker.ts | indexed |
| 366 | tamnguyenvan/screenarc/src/components/editor/sidepanel/BackgroundSettings.tsx | indexed |
| 345 | tamnguyenvan/screenarc/src/index.css | indexed |
| 339 | tamnguyenvan/screenarc/src/types/index.ts | indexed |