Windrecorder - แอป Windows โอเพนซอร์สสำหรับย้อนดูและค้นหาทุกอย่างบนหน้าจอ
(tonoko.notion.site)- Windrecorder เป็นแอปโอเพนซอร์สที่บันทึกหน้าจอ Windows ไว้ในเครื่อง เพื่อให้ย้อนดูและค้นหาได้ภายหลัง เป็นเครื่องมือความจำส่วนตัวที่ใกล้เคียงกับทางเลือกของ Rewind/Copilot Recall
- หน้าจอจะถูกบันทึกเป็นไฟล์ชิ้นย่อยครั้งละ 15 นาทีด้วย ffmpeg หรือภาพหน้าจอที่ถ่ายต่อเนื่องตามช่วงเวลา และถูกทำดัชนีด้วย Windows Local OCR API กับ image embedding
- ใน Web UI บนเครื่อง สามารถค้นหาหน้าจอในอดีตได้จากชื่อหน้าต่าง คีย์เวิร์ดข้อความ และคำอธิบายภาพ รวมถึงสามารถยกเว้นบางโปรแกรมหรือบางพื้นที่ของหน้าจอจากการบันทึกได้
- การประมวลผลข้อมูลทั้งหมดทำเฉพาะบนคอมพิวเตอร์ของผู้ใช้โดยไม่ใช้คลาวด์ และเนื่องจากสร้างบน Python จึงตรวจสอบและแก้ไขโครงสร้างได้ง่าย แต่อาจทำงานได้ช้า
- ปัจจุบันพื้นที่จัดเก็บเป็น โครงสร้างในเครื่องที่ไม่ได้เข้ารหัส ส่วนฟีเจอร์ LLM ยังมีจำกัด โดยขอบเขตการใช้งานจริงคือสรุปชื่อเรื่องรายวันและการค้นหา
การบันทึกหน้าจอและการค้นหาแบบย้อนดู
- Windrecorder เป็น เครื่องมือความจำหน้าจอส่วนตัว สำหรับค้นหาข้อมูลที่ผู้ใช้เคยเห็นแต่ภายหลังหาเจอได้ยาก เช่น หน้าเว็บ วิดีโอ หรือข้อความแชต
- แรงบันดาลใจหลักมาจากแอป Mac Rewind และ Black Mirror S1E3 “The Entire History of You”
- วิธีบันทึกหน้าจอนั้นเรียบง่าย
- ใช้ ffmpeg หรือภาพหน้าจอที่ถ่ายต่อเนื่องตามช่วงเวลา
- บันทึกหน้าจอเป็น ไฟล์ชิ้นย่อยครั้งละ 15 นาที
- ทำดัชนีบันทึกด้วย Windows Local OCR API และ image embedding
- ผู้ใช้สามารถระบุโปรแกรมหรือขอบเขตหน้าจอที่ไม่ต้องการบันทึกได้
- ใน Web UI บนเครื่อง ผู้ใช้สามารถย้อนดูและค้นหาหน้าจอในอดีตได้จากเบาะแสต่อไปนี้
- ชื่อหน้าต่าง
- คีย์เวิร์ดข้อความ
- คำอธิบายภาพ
- ฟีเจอร์เสริมประกอบด้วยเวลาการใช้งานหน้าจอรายวัน·ตามรอบเวลา สรุปจังหวะรายวัน และการสร้างไลต์บ็อกซ์รายเดือน
การออกแบบแบบ local-first และข้อจำกัดในปัจจุบัน
- การประมวลผลทั้งหมดเกิดขึ้นเฉพาะบนคอมพิวเตอร์ของผู้ใช้ และไม่ได้ตั้งอยู่บนสมมติฐานของ การจัดเก็บบนคลาวด์หรือการสมัครสมาชิก
- โครงสร้างถูกสร้างโดยเชื่อมต่อหลายฟีเจอร์ด้วย Python ทำให้การทำงานภายในโปร่งใสและผู้ใช้แก้ไขเองได้ง่าย
- แต่แลกกับประสิทธิภาพที่อาจช้าลง
- ผู้พัฒนาไม่ใช่นักพัฒนามืออาชีพ แต่สร้างเครื่องมือนี้ขึ้นจากความสนใจส่วนตัวและเพื่อใช้งานเอง
- หลังจากใช้งานไประยะหนึ่ง จึงเห็นว่าเครื่องมือมีความสุกงอมและแข็งแรงเพียงพอ
- ยินดีรับการแจ้ง issue การพูดคุย และการมีส่วนร่วม
- ข้อเสียในปัจจุบันก็ชัดเจนเช่นกัน
- พื้นที่จัดเก็บข้อมูลมีลักษณะ โปร่งใสและไม่ได้เข้ารหัส
- ผู้ใช้สามารถนำข้อมูลในเครื่องที่มีโครงสร้างไปใช้ได้อย่างอิสระ แต่ก็ต้องระมัดระวังเรื่องการปกป้องข้อมูลด้วย
- ฟีเจอร์ LLM ไม่ได้ถูกใส่เข้ามามากนัก
- ปัจจุบันฟีเจอร์ LLM ส่วนใหญ่จำกัดอยู่ที่การตัดสินใจเรียก API ตามเจตนาของผู้ใช้ และการปรับแต่งผลลัพธ์การค้นหา
- ยังไม่ถึงขั้นที่ระบบจะเข้าใจ·วิเคราะห์·รำลึกข้อมูลทั้งหมดโดยตรง และลงมือทำตามเจตนาของผู้ใช้ได้
- ฟีเจอร์สรุปชื่อเรื่องรายวันและการค้นหาที่ให้บริการอยู่ในตอนนี้คือขอบเขตที่ Windrecorder ทำได้จริง
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
มีคนทำสิ่งที่คล้ายกันนี้ไปแล้วตั้งแต่เมื่อเกือบ 20 ปีก่อน และยังมีฟีเจอร์ย้อนกลับไปยังช่วงเวลาใดช่วงเวลาหนึ่งในอดีตแล้วรันต่อจากตรงนั้นได้ด้วย
http://www.cs.columbia.edu/~orenl/papers/sosp07-dejaview.pdf
DejaView เป็นเครื่องบันทึกคอมพิวเตอร์เสมือนส่วนบุคคลที่บันทึกประสบการณ์การใช้งานเดสก์ท็อปทั้งหมด เพื่อให้สามารถเล่นซ้ำ นำทาง ค้นหา และกู้คืนได้ โดยเก็บทั้งภาพที่แสดงบนหน้าจอ เช็กพอยต์สถานะของแอปพลิเคชัน/ไฟล์ซิสเต็ม/ระบบ และข้อความบนหน้าจอพร้อมบริบทเพื่อนำไปทำดัชนี
มันผสาน การทำ virtualization ของหน้าจอ/ระบบปฏิบัติการ/ไฟล์ซิสเต็ม โดยไม่ต้องแก้ไขแอปพลิเคชัน ระบบหน้าต่าง หรือเคอร์เนลของระบบปฏิบัติการ และแสดงผลว่าทำการบันทึกต่อเนื่องพร้อมการค้นหา/เล่นซ้ำแบบโต้ตอบได้บนแอปเดสก์ท็อปจริงโดยแทบไม่มีผลต่อประสิทธิภาพที่ผู้ใช้รับรู้
มีโปรเจกต์ โอเพนซอร์ส คล้ายกันสำหรับ macOS ด้วย
https://rem.ing
https://github.com/jasonjmcghee/rem
ผู้พัฒนาเคยโพสต์บน HN เมื่อ 3 เดือนก่อน และมีการพูดคุยที่ค่อนข้างดีอยู่พอสมควร
https://news.ycombinator.com/item?id=38787892
เป็น MIT License และผมก็เริ่มทำเวอร์ชันข้ามแพลตฟอร์มที่เขียนด้วย Rust ชื่อ https://github.com/jasonjmcghee/xrem แล้ว แต่ยังอยู่ช่วงต้นมาก ๆ เลยต้องการความช่วยเหลือเพิ่ม
อยากมีส่วนร่วมเหมือนกัน แต่ไม่รู้ Swift เลย สิ่งที่ผมทำทั้งหมดเป็น bash script ที่รันด้วย launchd
ถ้าทำแบบนี้ได้ก็น่าจะเจ๋งมาก: ให้ Meta Smart Glasses ถ่ายรูปทุก 2 วินาที ส่งภาพขึ้นเซิร์ฟเวอร์คลาวด์ รัน OCR กับการตรวจจับ/ติดป้ายกำกับวัตถุ แล้วมีแอปให้ค้นหาอดีตหรือคุยกับมันได้
แบบนี้ก็จะถาม LLM ได้ว่า “ฉันวางกระเป๋าสตางค์ไว้ที่ไหนนะ?”, “เมื่อวานตอนจ่ายเงินที่ร้านอาหาร ฉันได้บัตรเครดิตคืนมาหรือยัง?”, “วันนี้บนเสื้อยืดตัวใหม่ของลูกสาวเขียนว่าอะไรนะ?”
ถ้ามีการอัดเสียงและถอดเสียงด้วย ก็จะถามได้อีกว่ากำหนดส่งที่ตกลงกันในประชุมคือเมื่อไร เบอร์โทรของคนที่เจอในสวนคืออะไร หรือนักลงทุนที่เจอวันนี้ชื่ออะไร และถ้าเข้าถึงการคุยโทรศัพท์แล้วถอดเสียง/ทำดัชนีคำพูดของอีกฝ่ายได้ด้วยก็คงยิ่งดี
ทำให้นึกถึงตอน “The Entire History of You” ของ Black Mirror: https://en.wikipedia.org/wiki/The_Entire_History_of_You
ผมพรีออร์เดอร์ไปแล้ว
สงสัยว่ามีใครเคยทำของแบบนี้ด้วย accessibility API แทน OCR หรือใช้ควบคู่กับ OCR บ้างไหม
ใน accessibility API สามารถดึงข้อความออกมาได้ตรง ๆ ดังนั้นการทำ OCR ทั้งหมดดูเหมือนสิ้นเปลือง
มันอาจเป็นวิธีที่ดีในการเชื่อม LLM เข้ากับ UI หรืออาจเป็นวิธีที่เครื่องมือแบบนี้ใช้เก็บข้อมูลฝึกก็ได้
ปัญหาที่ Microsoft Office เรนเดอร์วิดเจ็ตเองนั้นแก้ด้วยการอ่าน OCR จากข้อความบนวิดเจ็ตและปุ่มเพื่อหา label
วิธีแบบนี้จำเป็นบ่อยกว่าที่คิดมาก นักพัฒนามักทำให้ผิดหวังและไม่ใช้ API ที่มีให้
บางแอปไม่ส่งข้อมูลสำคัญ หรือทำ implementation ผิด ตอนแรกคิดว่า accessibility จะง่าย แต่เอาเข้าจริง OCR กลับง่ายกว่าในหลายกรณี
ผมคิดว่าถ้าแนวทางนี้เวิร์กจริง Microsoft หรือ Apple ก็น่าจะฝังมันมาในระบบปฏิบัติการเป็นส่วนหนึ่งของ Copilot ที่จำทุกอย่างและช่วยเรื่องความรู้ของผู้ใช้
ประวัติหน้าจอที่ผมทำไม่ได้ล้ำเท่าแอปที่พูดถึงที่นี่ และผมเองก็ไม่ได้ใช้มันจริง
ใน Notion จะมีหน้าบล็อกอย่าง “JavaScript must be enabled in order to use Notion” กับ “Please enable JavaScript to continue” แต่ถ้าใช้ NoScript วิธีบล็อกแบบนี้กลับทำให้เปิด JavaScript ให้เว็บไซต์จริง ๆ ไม่ได้เลย
อยากให้มันไม่ redirect ไปหน้าสแตติก เพราะในหน้านั้นไม่มี JavaScript ให้อนุญาตเป็นกรณี ๆ ไป และมัน redirect เร็วเกินกว่าจะมีโอกาสเปิด JavaScript จากหน้าหลักได้
ต่อให้อนุญาตแค่ notion.so เองก็ยังข้ามการบล็อกนี้ไม่ได้
น่าแปลกเหมือนกันที่ HTML อนุญาตให้ redirect ได้โดยไม่ต้องใช้ JavaScript
บน Windows ก็มี TimeSnapper เช่นกัน ไม่ใช่โอเพนซอร์ส แต่บางครั้งผู้พัฒนาก็โผล่มาที่ Hacker News
https://timesnapper.com/
https://www.manictime.com/
จำได้ว่ามีโปรเจกต์ลักษณะนี้อยู่ไม่กี่ตัว ตัวแรกที่ผมเห็นคือ Savant Recall ในปี 2014 แต่ไม่ได้รับเลือกจาก YC เลยถูกปล่อยเป็นโอเพนซอร์ส
หลังจากนั้น Ritter ผู้ร่วมก่อตั้ง Napster ก็นำไปต่อ เปลี่ยนชื่อเป็น Atlas Recall ใส่ UI ใหม่ และระดมทุนได้ 20 ล้านดอลลาร์
แต่แล้วอีก 1 ปีต่อมาก็ปิดตัวลงแบบกะทันหัน และใน LinkedIn ระบุว่า “ถูก Xinova เข้าซื้อกิจการ” อีกตัวที่เคยได้ยินคือ Apse ในปี 2019
ที่เก็บโค้ดซึ่งอาจเป็นซอร์สดั้งเดิมของ Savant: https://bitbucket.org/theluxury/savant/src/master/
วิดีโอที่แสดงให้เห็นว่า Atlas Recall ทำงานอย่างไรในภายหลัง: https://www.youtube.com/@atlasinformatics3316/videos
https://www.geekwire.com/2021/invention-network-company-xino...
ดูคล้ายกับ https://apse.io/ มาก ฝั่งนี้ก็ใช้ OCR เพื่อสร้างดัชนีที่ค้นหาได้จากทุกอย่างที่เห็นบนหน้าจอ
สิ่งที่ชอบใน windrecorder คือมันเป็น โอเพนซอร์ส
ตาม README บน GitHub วิดีโอมีขนาดราว 100~200GB ต่อปี ซึ่งก็ไม่ได้แย่นัก
ถ้ามีไอเดียแนว “ทำไมไม่มีแอปแบบนี้นะ?” การลงมือทำออกมาได้ดีแบบนี้ถือว่าเป็นแรงบันดาลใจให้ทุกคน
เพราะจะได้ไม่ต้องถูกบังคับให้เก็บบนคลาวด์ และผมพูดแบบนี้ในฐานะคนที่น่าจะเลิกเป็นลูกค้าแบบเสียเงินในไม่ช้านี้