[{"data":1,"prerenderedAt":144},["ShallowReactive",2],{"page:\u002Farticles\u002Fvideo-grouper":3},{"id":4,"title":5,"author":6,"body":10,"cover":130,"date":131,"description":132,"extension":133,"head":134,"layout":137,"meta":138,"navigation":139,"path":140,"seo":141,"stem":142,"__hash__":143},"pages\u002Farticles\u002F40.video-grouper.md","Grouping Videos with Wails and FFmpeg",{"name":7,"avatarUrl":8,"link":9},"Likun Cai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F103620968?v=4","https:\u002F\u002Fgithub.com\u002FAlchemist-Aloha",{"type":11,"value":12,"toc":127},"minimark",[13,17,21,29,34,37,98,109,112,123],[14,15,5],"h1",{"id":16},"grouping-videos-with-wails-and-ffmpeg",[18,19,20],"p",{},"Video Grouper is a Wails desktop application for visually organizing video files. A Go backend scans the selected directory, calls FFmpeg to generate thumbnails, and performs filesystem moves. A Vue 3 and TypeScript frontend displays the results, lets the user select related clips, and reports operation status.",[18,22,23,24,28],{},"The main workflow is direct: select a base directory, wait for thumbnail generation, choose several videos, and move them into a folder named after the first selected file. The repository is currently optimized for ",[25,26,27],"code",{},".m4v"," files, though the backend can be extended for other formats.",[30,31,33],"h2",{"id":32},"build-from-source","Build from source",[18,35,36],{},"Install Go 1.23 or newer, Node.js, npm, Wails v2, and FFmpeg, then run:",[38,39,44],"pre",{"className":40,"code":41,"language":42,"meta":43,"style":43},"language-bash shiki shiki-themes github-light github-dark","git clone https:\u002F\u002Fgithub.com\u002FAlchemist-Aloha\u002Fvideo-grouper-wails-vue-ts.git\ncd video-grouper-wails-vue-ts\u002Ffrontend\nnpm install\ncd ..\nwails build\n","bash","",[25,45,46,62,72,81,89],{"__ignoreMap":43},[47,48,51,55,59],"span",{"class":49,"line":50},"line",1,[47,52,54],{"class":53},"sScJk","git",[47,56,58],{"class":57},"sZZnC"," clone",[47,60,61],{"class":57}," https:\u002F\u002Fgithub.com\u002FAlchemist-Aloha\u002Fvideo-grouper-wails-vue-ts.git\n",[47,63,65,69],{"class":49,"line":64},2,[47,66,68],{"class":67},"sj4cs","cd",[47,70,71],{"class":57}," video-grouper-wails-vue-ts\u002Ffrontend\n",[47,73,75,78],{"class":49,"line":74},3,[47,76,77],{"class":53},"npm",[47,79,80],{"class":57}," install\n",[47,82,84,86],{"class":49,"line":83},4,[47,85,68],{"class":67},[47,87,88],{"class":57}," ..\n",[47,90,92,95],{"class":49,"line":91},5,[47,93,94],{"class":53},"wails",[47,96,97],{"class":57}," build\n",[18,99,100,101,104,105,108],{},"Use ",[25,102,103],{},"wails dev"," for hot-reload development or ",[25,106,107],{},"wails build -platform windows\u002Fdarwin\u002Flinux"," for production targets.",[18,110,111],{},"The application moves original files. Thumbnail previews help choose a group, but they do not protect against a mistaken selection, naming collision, or interrupted move. Begin with copied media and verify the destination behavior before using it on the only copy of a library.",[18,113,114,115,122],{},"Visit the ",[116,117,121],"a",{"href":118,"rel":119},"https:\u002F\u002Fgithub.com\u002FAlchemist-Aloha\u002Fvideo-grouper-wails-vue-ts",[120],"nofollow","Video Grouper repository"," for the backend methods and current build instructions.",[124,125,126],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":43,"searchDepth":64,"depth":64,"links":128},[129],{"id":32,"depth":64,"text":33},"\u002Farticles\u002Fmedia-toolkit-cover.webp","2026-08-12T00:40:00.000Z","Scan a directory, generate visual thumbnails, select related videos, and move them together from a lightweight desktop app.","md",{"title":135},{"Video Grouper":136},"Visual File Organization with Wails","page",{},true,"\u002Farticles\u002Fvideo-grouper",{"title":5,"description":132},"articles\u002F40.video-grouper","1sjddsFwwIh0IxlMLUEwGXB54VrbSk_LS_f5127xBbg",1786980373677]