13 điểm bởi GN⁺ 2025-10-08 | 1 bình luận | Chia sẻ qua WhatsApp
  • Tập hợp mọi dữ liệu cá nhân như ảnh, video, tin nhắn, lịch sử vị trí, nội dung mạng xã hội, danh bạ... vào một nơi và sắp xếp theo thứ tự thời gian bằng công cụ lưu trữ dòng thời gian cục bộ
  • Nhập dữ liệu từ nhiều dịch vụ như Google Takeout, iCloud, Facebook, Twitter/X, Strava, Instagram và tự động sắp xếp vào cơ sở dữ liệu dựa trên SQLite
  • Cung cấp các tính năng khám phá trực quan như bản đồ, chế độ xem 3D, chế độ xem hội thoại hợp nhất, nhận diện thực thể, đồng thời hiển thị mối liên hệ giữa các loại dữ liệu khác nhau như tin nhắn, ảnh và vị trí
  • Toàn bộ dữ liệu được lưu trên PC cá nhân thay vì đám mây, nên không có rủi ro rò rỉ ra bên ngoài và có thể duyệt nguyên trạng các tệp gốc
  • Đây là một dự án biên niên sử số về bản thân, có thể tái dựng trực quan cuộc sống cá nhân và mở rộng sang chia sẻ dữ liệu trong gia đình hoặc lưu giữ di sản số

Tổng quan

  • Timelinizecông cụ tích hợp dữ liệu cục bộ tạo một dòng thời gian hợp nhất từ nhiều dấu vết số cá nhân khác nhau
  • Công cụ thu thập ảnh, video, cuộc trò chuyện, mạng xã hội, lịch sử vị trí, danh bạ... rồi tái cấu trúc xoay quanh thời gian, không gian và con người
  • Cho phép ghi lại chi tiết đời sống của bản thân và gia đình, đồng thời khám phá câu chuyện đầy đủ và sâu sắc hơn so với thư viện ảnh hay ứng dụng nhật ký truyền thống
  • Hoạt động trong trình duyệt và vẫn có thể truy cập ngay cả khi ngoại tuyến
  • Không thay thế các ứng dụng và dịch vụ đang dùng, mà tạo ra một bản sao lưu vĩnh viễn và mang tính cá nhân cho toàn bộ dữ liệu người dùng xử lý
  • Timelinize hoạt động ở phía sau môi trường sử dụng hiện có, đóng vai trò như một kho lưu trữ nền không làm gián đoạn cuộc sống của người dùng

Tính năng chính

  • Hỗ trợ nhiều nguồn dữ liệu
    • Nhập trực tiếp các định dạng xuất dữ liệu GDPR từ Google Takeout, Apple iCloud, Facebook, Instagram, Twitter/X, Strava...
    • Tự động nhận diện và sắp xếp mà không cần giải nén .zip hoặc .tar
  • Giao diện khám phá trực quan
    • Chế độ xem dòng thời gian: hiển thị hợp nhất mọi mục dữ liệu theo ngày
    • Chế độ xem bản đồ 3D: trực quan hóa lộ trình di chuyển theo thời gian dựa trên dữ liệu vị trí
    • Biểu đồ bong bóng: phân tích loại dữ liệu được để lại nhiều nhất theo từng khung giờ trong ngày
  • Cấu trúc dữ liệu dựa trên thực thể
    • Sắp xếp quan hệ dữ liệu xoay quanh các thực thể như người, động vật, tổ chức
    • Tự động nhận diện cùng một người hoặc tổ chức và có thể gộp thủ công khi cần
  • Hợp nhất hội thoại
    • Liên kết tin nhắn từ các nền tảng khác nhau trong một chế độ xem Conversations duy nhất
    • Gộp Facebook Messenger và SMS thành một để khôi phục ngữ cảnh hội thoại
  • Hợp nhất thư viện ảnh
    • Hiển thị cùng nhau không chỉ thư viện ảnh mà cả ảnh tải lên từ tin nhắn hoặc SNS, meme...
    • Hỗ trợ khám phá theo từng loại phương tiện hoặc chủ đề với nhiều bộ lọc khác nhau

Cấu trúc và nguyên lý hoạt động

  • Dữ liệu được sắp xếp trên đĩa cục bộ theo cấu trúc thư mục theo ngày, còn metadata được lưu trong cơ sở dữ liệu SQLite
  • Cung cấp đối xứng HTTP API và CLI, cho phép thực thi cùng một lệnh trên cả web lẫn dòng lệnh
  • Tự động chuyển đổi đối số lệnh và trường form HTTP bằng schema dựa trên JSON
  • Cung cấp môi trường Dev Container để thiết lập môi trường phát triển dựa trên Docker

Triết lý và tầm nhìn dự án

  • Mục tiêu cốt lõi của dự án là bảo tồn và giải phóng dữ liệu cá nhân theo cách tự chủ
    • Được thiết kế để người dùng tự quản lý dữ liệu của mình, phòng trường hợp các dịch vụ đám mây tập trung biến mất
    • Trực quan hóa cuộc sống cá nhân dưới dạng định lượng để có thể phát triển thành tự truyện số và hồ sơ lịch sử gia đình
  • Về lâu dài, dự án còn đưa ra lý tưởng có thể hợp nhất dòng thời gian của từng cá nhân để tạo nên “dòng thời gian của toàn nhân loại”

Phát triển và cài đặt

  • Có thể tải bản phát hành mới nhất cho Linux/macOS/Windows
  • Có thể phát triển bằng Dev Container trong môi trường VSCode + Docker
  • Dự án được phát hành theo giấy phép AGPL, hạn chế việc tái gia công cho mục đích thương mại

Lịch sử dự án

  • Bắt đầu từ dự án cá nhân ‘Photobak’ vào năm 2013, sau đó mở rộng thành công cụ sao lưu cho Google Photos, Facebook, Twitter
  • Về sau tiếp tục phát triển với hỗ trợ nhiều người dùng, tích hợp dữ liệu vị trí... và tiến hóa thành Timelinize như hiện nay
  • Tác giả cũng là nhà phát triển của máy chủ Caddy, và đang thực hiện dự án này như một thử nghiệm dài hạn vì chủ quyền dữ liệu cá nhân

1 bình luận

 
GN⁺ 2025-10-08
Ý kiến trên Hacker News
  • Tôi nghĩ đây là một dịch vụ tuyệt vời, nhưng tôi muốn nó được mở rộng hơn nhiều để có thể thay thế cả Nextcloud và Zotero, ghi lại mọi tài liệu và cuốn sách tôi thêm vào, mở ra hoặc chỉnh sửa, mọi ghi chú tôi viết, cả các tab trình duyệt tôi đã mở, thao tác sao chép/dán, thậm chí cả phím gõ, để có thể trả lời ngay những câu hỏi như: "Hôm nay cách đây 2 tuần tôi đã làm gì?". Tất cả những thứ này cần phải có thể tìm kiếm được và nhất định phải self-hosted, không phải nhằm biến nó thành phần mềm giám sát. Khi nhìn những người dùng hệ thống liên kết thủ công trong Obsidian, tôi lại càng thấy góc nhìn theo thời gian quan trọng hơn; nếu hôm nay tôi tìm thứ gì đó trên Wikipedia thì khả năng cao ở cùng thời điểm đó tôi cũng đang tìm thông tin tương tự hoặc làm việc liên quan, và điều đó rất có ý nghĩa

    • Tôi nhớ là trước đây Microsoft từng có một sản phẩm giúp Recall lại những gì tôi đã làm

    • Tôi không tìm lại được địa chỉ chính xác, nhưng nhớ là đã từng có ai đó đưa ra ý tưởng về một hệ thống máy tính nơi mọi object chỉ tồn tại thuần túy dựa trên thời gian, còn ngoài ra chỉ truy cập thông qua bộ lọc; tôi muốn tìm lại nó

    • Về chuyện thay thế Nextcloud, Zotero và lưu toàn bộ ghi chú, tab trình duyệt, clipboard, cả phím gõ thì về dài hạn đúng là có vẻ rất hữu ích. Tuy nhiên, đến mức tab trình duyệt hay phím gõ thì tôi thấy quá chi tiết. Tôi không cần đến mức đó, nhưng tôi cho rằng việc ghi lại và thấu hiểu cuộc sống của mình bằng dữ liệu là cần thiết, và ứng dụng này cũng xuất phát từ chính nhận thức đó

  • mholt nổi tiếng là người tạo ra web server Caddy, nên điều đó càng làm tôi hứng thú hơn với Timelinize

  • Suốt 10 năm qua tôi đã ghi lại dữ liệu GPS mỗi 2~3 phút vì tôi cần đúng kiểu sản phẩm này, thấy cực kỳ thú vị

    • Tôi tò mò không biết bạn đã ghi log GPS như thế nào
  • Timelinize là một hệ thống entity-aware, nên ngay cả khi không có dữ liệu tọa độ thì nó vẫn có thể hiển thị trên bản đồ những thông tin gần nhau về mặt thời gian theo từng entity. Điều đó khiến tôi thực sự cảm nhận được Google có thể kết hợp bao nhiêu dữ liệu của tôi dựa trên Android/Chrome/Gmail/Maps/Timeline. Tôi tò mò không biết dự định sẽ tận dụng dữ liệu thời tiết cụ thể như thế nào, ví dụ có đang cân nhắc liên kết entity có vị trí với dữ liệu thời tiết trong quá khứ hay không

    • Đúng vậy, dự định là sẽ dùng theo cách đó. Có thể tích hợp thêm dữ liệu công khai như thời tiết/tin tức để bổ sung ngữ cảnh cho timeline
  • Tôi nghĩ đây là một ý tưởng thật sự rất hay, nhưng nếu mỗi lần thêm dữ liệu lại phải chạy Google Takeout thì quá phiền. Nếu có cập nhật thời gian thực thì đúng là killer app luôn, khá đáng tiếc
    Tài liệu nguồn dữ liệu Google Photos

    • Đó đúng là một trở ngại rất lớn. Tôi đã thử tự động hóa bằng Chrome headless, nhưng trên thực tế cứ 10 phút lại phải xác thực vật lý nên gần như không thể tự động hóa. Nói chung thì mỗi năm tôi vẫn làm Takeout một hoặc hai lần, và ngay cả khi không dùng Timelinize thì làm vậy để sao lưu dữ liệu cũng là điều nên làm
  • Tôi rất quan tâm đến dịch vụ này, (và cũng cảm ơn vì Caddy)
    Tôi tò mò không biết việc cập nhật/chỉnh sửa dữ liệu được xử lý như thế nào. Khi import dữ liệu bán cấu trúc, ví dụ một sự kiện "jog" được chia nhỏ thành "light run" và "intense walk" rồi áp dụng ngược cả vào dữ liệu cũ, thì sẽ phải import trùng dữ liệu. Trong FAQ chỉ nhắc đến additive import; vì cấu trúc dữ liệu cứ thay đổi liên tục nên tôi không muốn khổ sở với các lệnh UPDATE trong SQL, hiện giờ tôi đang dùng plain text và git để version control. Làm vậy thì một cá nhân có thể theo dõi sự thay đổi dữ liệu của mình như thể du hành thời gian, điều này khá hay

    • Cảm ơn bạn đã thích Caddy,
      trong các tùy chọn import nâng cao, bạn có thể chỉ định cách xác định tính duy nhất của item và cách phát hiện trùng lặp. Bạn cũng có thể tự chọn cách xử lý dữ liệu trùng. Mặc định là bỏ qua bản trùng, nhưng cũng có thể cập nhật, và còn có thể chỉ định giá trị nào sẽ được ưu tiên. Tuy nhiên, cập nhật là truy vấn UPDATE nên không thể hoàn tác. Tôi cũng đã thử nghiệm schema thuần additive, nhưng trên thực tế nó gặp khó khăn do độ phức tạp, rủi ro lỗi và hiệu năng duyệt chậm hơn. Dù vậy, vì ý tưởng có thể quay lại xem timeline biến đổi theo thời gian vẫn rất hấp dẫn nên tôi vẫn đang suy nghĩ về khả năng đó
  • Dịch vụ này sẽ gần như hoàn hảo nếu kết hợp với dữ liệu tài chính (ví dụ dữ liệu ngân hàng) và local LLM.
    Tôi chưa biết chính xác sẽ dùng thế nào, nhưng nó có thể phân tích lịch sử thanh toán thẻ dựa trên tin nhắn, thông tin vị trí v.v. để phân loại vào ngân sách và hiển thị nhiều thống kê khác nhau.
    Nếu có xe dùng cloud như Tesla thì còn có thể tự động phân loại quãng đường công tác/cá nhân, chi phí v.v. để phục vụ mục đích thuế vụ.
    Có lẽ cũng hữu ích cho việc gợi ý trải nghiệm địa phương mà mình chưa thử và quản lý thời gian

    • ledger.txt(plaintextaccounting.org), tích hợp g-cal, và Home Assistant đều đang tụ lại khá giống nhau

    • Tôi cũng nghe kiểu ý tưởng này rất thường xuyên, và rất kỳ vọng vào việc tích hợp thông tin tài chính với LLM. Tôi nghĩ nó sẽ cực kỳ thú vị, hữu ích và cũng đủ tốt để dùng như một trợ lý cá nhân dưới góc độ bảo vệ dữ liệu cá nhân

  • Dự án rất hay. Nếu không thích cái tên timelinize thì bạn có từng cân nhắc tên Latin chưa, ví dụ có ứng viên như Temperi
    Và sẽ rất tuyệt nếu hỗ trợ cả FindPenguins, nơi có nhiều loại dữ liệu như GPS, ảnh, văn bản v.v.

    • Tôi đã được đề xuất tên Latin nhiều lần, nhưng đa số đều khó đánh vần và cũng khó phát âm, nên không phải là cải thiện có ý nghĩa gì mấy. Tôi cũng nghĩ FindPenguins là một dịch vụ tốt; bản thân tôi không dùng, nhưng bất kỳ ai cũng có thể tự triển khai và thêm nguồn dữ liệu của riêng mình
  • Gần đây tôi thấy bức bối vì các công cụ ghi lịch sử vị trí ngày càng khép kín hơn, và tôi nghĩ dự án này là một bước tiến quan trọng để thực sự giành lại quyền sở hữu dữ liệu. Tôi nhất định sẽ thử

    • Đồng ý, tôi cũng nghĩ vậy
  • Trông thật sự rất ngầu và giống như kiểu dịch vụ mà tôi đã vô thức mong muốn từ lâu.
    Tôi có vài ý tưởng

  • Vì mức độ nhạy cảm về quyền riêng tư rất cao, tốt nhất là nên tự self-host ở nhà sau VPN như Wireguard hoặc Tailscale nếu có thể, và sẽ tuyệt hơn nữa nếu là ứng dụng mã hóa E2E như Ente.io

  • Nếu có thể tách riêng index và backend lưu trữ thì ảnh v.v. có thể để ở chỗ sẵn có (Immich, Ente.io v.v.) để tránh lưu trùng lặp. Timelinize không thể thay thế hoàn toàn mọi loại dữ liệu, nên tôi muốn dùng song song với các ứng dụng chuyên biệt xử lý tốt nhất từng loại dữ liệu

  • Sẽ tốt hơn rất nhiều nếu hỗ trợ import lịch sử du lịch từ Polarsteps và cả backup Signal
    GitHub công cụ backup Signal

    • Cảm ơn vì các câu hỏi và bình luận rất hay
    • Đúng là mô hình chạy trên máy tính cá nhân tại nhà
    • Nếu host ở bên ngoài thì chủ sở hữu phần cứng thực tế luôn có thể truy cập vật lý bất cứ lúc nào, nên tôi nghĩ rất khó có được quyền riêng tư thực sự. Tôi cũng từng cân nhắc những thứ như DB mã hóa thời gian thực, nhưng trong quá trình xử lý cuối cùng vẫn phải giải mã, nên về mặt logic hoặc là bất khả thi hoặc là cực kỳ phiền phức và dễ tổn thương. Có thể tôi sai, nhưng có vẻ không có lựa chọn thay thế thực tế nào
    • Về dữ liệu trùng lặp, mục tiêu là cố ý sao chép dữ liệu vào bên trong timeline này. Nó cũng kiêm luôn vai trò backup và đảm bảo tính nhất quán, độ tin cậy và khả dụng. Các ứng dụng khác như PhotoStructure chỉ index chứ không tạo bản sao dữ liệu; Timelinize khó mà ép buộc theo cách đó
    • Tôi muốn hỗ trợ nhiều nguồn dữ liệu khác nhau, bao gồm cả Polarsteps/Signal. Dữ liệu Signal thay đổi định dạng thường xuyên và còn được mã hóa, nên rất khó import một cách ổn định. Tuy vậy, bất kỳ ai cũng có thể tự thêm nguồn mới, và trong tương lai tôi cũng dự định chuẩn bị API import. Tôi đang nghĩ đến việc cho phép script hoặc ứng dụng bên ngoài push dữ liệu vào Timelinize
    • Cuối cùng thì mục tiêu của Timelinize là thực sự nắm được dữ liệu, nên tôi nghĩ chấp nhận một mức độ trùng lặp nhất định là xứng đáng. Dung lượng lưu trữ ngày càng rẻ hơn, và kể cả nếu vẫn đắt thì nó vẫn đáng giá