<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://cnd173.github.io/spweb/feed.xml" rel="self" type="application/atom+xml" /><link href="https://cnd173.github.io/spweb/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-09-09T20:28:20+07:00</updated><id>https://cnd173.github.io/spweb/feed.xml</id><title type="html">Singularity Pencil</title><subtitle>Screenplay-native production workspace</subtitle><entry><title type="html">Vì sao kịch bản nên là nguồn duy nhất</title><link href="https://cnd173.github.io/spweb/writing/vi-sao-kich-ban-nen-la-nguon-duy-nhat/" rel="alternate" type="text/html" title="Vì sao kịch bản nên là nguồn duy nhất" /><published>2026-08-27T13:47:24+07:00</published><updated>2026-08-27T13:47:24+07:00</updated><id>https://cnd173.github.io/spweb/writing/vi-sao-kich-ban-nen-la-nguon-duy-nhat</id><content type="html" xml:base="https://cnd173.github.io/spweb/writing/vi-sao-kich-ban-nen-la-nguon-duy-nhat/"><![CDATA[<p>Buổi tối bạn sửa cảnh 42. Đổi một câu thoại, đổi luôn đạo cụ nhân vật cầm ở đầu cảnh — từ bật lửa sang một hộp diêm cũ, hợp với thời điểm phim hơn. Lưu file, tắt máy, đi ngủ. Ba tuần sau ở hiện trường, tổ đạo cụ vẫn mang theo bật lửa, vì bảng breakdown họ cầm là bản xuất từ trước khi bạn sửa cảnh đó.</p>

<p>Không ai sai cả. Kịch bản nằm một file, breakdown nằm một bảng tính khác, lịch quay lại một file khác nữa. Mỗi lần sửa kịch bản là một lần phải nhớ đi sửa lại từng chỗ còn lại — hoặc quên, và không ai biết mình quên cho tới khi đứng giữa hiện trường.</p>

<p>Singularity Pencil gom bảy giai đoạn — Write, Rewrite, Visualize, Storyboard, Breakdown, Plan, Shoot — vào chung một file <code class="language-plaintext highlighter-rouge">.sp</code>. Không phải bảy phần mềm rời rồi export qua lại, mà một file, một chỗ mở ra là thấy hết.</p>

<p>Cái giữ cho các giai đoạn đó nói chung một chuyện là scene identity: mỗi cảnh có một id ổn định, gắn từ Breakdown, không đổi khi bạn chèn thêm cảnh hay xoá cảnh phía trước nó. Plan dùng đúng id đó khi xếp lịch quay. Đến Shoot, dữ liệu không phải nhập lại lần nữa — Shoot lấy thẳng từ Breakdown và Plan.</p>

<p>Cái đáng nói không phải là “tự động cập nhật” — không có phép màu nào ở đây, và Singularity Pencil không tự viết lại lịch quay giùm bạn mỗi khi bạn sửa kịch bản. Việc đó vẫn của bạn. Cái nó làm là: khi có lệch, nó nói ra thay vì im lặng. Nếu bạn sửa Breakdown sau khi Plan đã lên lịch cho cảnh đó — đổi cảnh, xoá cảnh — Shoot báo cụ thể là id lịch quay đã cũ. Bạn biết ngay chỗ cần xem lại, thay vì mang ra hiện trường một bảng đã lệch từ ba tuần trước mà không ai hay.</p>

<p>Đó là khác biệt giữa đồng bộ và báo lệch. Một cái tự sửa cho bạn, cái kia chỉ đảm bảo id của một cảnh cầm nguyên từ lúc bạn gõ scene heading ở Write cho tới lúc AD cầm tờ lịch quay ở Shoot, và lên tiếng khi hai đầu không còn khớp nhau.</p>

<p>Nói rõ để không ai hiểu nhầm: Singularity Pencil hiện chưa phát hành công khai, chưa có bản để tải về. Những gì mô tả ở đây là thứ đang chạy trong bản dựng hiện tại, không phải lời hứa cho một bản ra mắt nào đó.</p>

<p>Cần đưa file cho AD hay tổ đạo cụ xem trước khi ra hiện trường, cách làm hôm nay là lưu <code class="language-plaintext highlighter-rouge">.sp</code> và gửi file đó đi — không phải mở cùng lúc trên một phiên bản đang chạy.</p>

<p>Một cảnh viết ra ở Write vẫn là chính cảnh đó khi nó hiện lên trên bảng breakdown, trên shot list, và trên tờ lịch quay AD cầm ở hiện trường — không phải một bản chép tay lại của nó, dễ lệch mỗi lần ai đó gõ lại số.</p>

<p>Nội dung có sự hỗ trợ của AI, được soát tự động trước khi đăng.</p>]]></content><author><name></name></author><category term="kịch bản" /><category term="breakdown" /><category term="lịch quay" /><category term="quy trình sản xuất" /><summary type="html"><![CDATA[Kịch bản, breakdown, lịch quay lệch nhau vì nằm ba file riêng — xem cách một scene id ổn định giữ chúng khớp và báo khi lệch.]]></summary></entry><entry><title type="html">Vì sao file .sp mở được bằng thứ khác</title><link href="https://cnd173.github.io/spweb/writing/vi-sao-file-sp-mo-duoc-bang-thu-khac/" rel="alternate" type="text/html" title="Vì sao file .sp mở được bằng thứ khác" /><published>2026-08-26T20:46:38+07:00</published><updated>2026-08-26T20:46:38+07:00</updated><id>https://cnd173.github.io/spweb/writing/vi-sao-file-sp-mo-duoc-bang-thu-khac</id><content type="html" xml:base="https://cnd173.github.io/spweb/writing/vi-sao-file-sp-mo-duoc-bang-thu-khac/"><![CDATA[<p>Một ngày nào đó, bạn mở lại file kịch bản cũ để tìm một cảnh từng viết ba năm trước. Phần mềm bạn dùng hồi đó không còn được cập nhật nữa. File vẫn nằm đó, nhưng công cụ đọc nó thì không. Bất cứ ai từng đổi máy tính, đổi hãng phần mềm viết kịch bản, hay chỉ đơn giản là chờ một bản cập nhật không bao giờ tới, đều biết cảm giác này.</p>

<p><code class="language-plaintext highlighter-rouge">.sp</code> được thiết kế để tránh đúng tình huống đó.</p>

<p>Về bản chất, một file <code class="language-plaintext highlighter-rouge">.sp</code> là một file ZIP chứa dữ liệu dự án. Không cần công cụ chuyên dụng để nhìn vào bên trong — một trình giải nén bình thường cũng mở được. Đây không phải là lối tắt kỹ thuật. Đây là lựa chọn để dữ liệu dự án của bạn không bị khoá sau một định dạng đóng mà chỉ một phần mềm duy nhất đọc được.</p>

<p>Font cũng theo nguyên tắc tương tự, nhưng theo hướng ngược lại: <code class="language-plaintext highlighter-rouge">.sp</code> không nhúng font của bên thứ ba vào file. Nó chỉ lưu profile, hash và tham chiếu tới font đang có sẵn trên máy bạn. Nghĩa là gửi file cho người khác không đồng nghĩa với việc phát tán bản sao font mà bạn đã mua giấy phép — và cũng có nghĩa là quyền sử dụng font vẫn thuộc về đúng người sở hữu nó, không phải công ty làm phần mềm.</p>

<p>File cũng mang một document id ổn định xuyên suốt vòng đời dự án, cộng với các trường tuỳ chọn tương thích ngược. Khi công cụ thêm tính năng mới, bản file cũ của bạn — viết từ trước khi tính năng đó tồn tại — vẫn mở được bình thường. Không có tính năng mới nào có quyền làm file cũ của bạn thành file mồ côi.</p>

<p>Đi ra ngoài cũng dễ như đi vào. <code class="language-plaintext highlighter-rouge">.sp</code> nhập và xuất được Fountain và FDX, hai định dạng đã quen thuộc với người viết kịch bản từ trước khi công cụ này tồn tại. Xuất PDF khi cần bản in chỉnh phân trang cho buổi đọc, xuất DOCX khi biên tập cần ghi chú bằng công cụ khác. Không ai phải học lại cách làm việc chỉ vì đổi phần mềm.</p>

<p>Việc lưu file cũng theo cùng logic: local-first. Autosave chạy trên IndexedDB ngay trên máy bạn, và cơ chế lưu dùng Yjs — dữ liệu ưu tiên nằm ở máy bạn trước, không phụ thuộc vào việc có một máy chủ nào đó đang chạy hay không. Cộng tác trực tuyến hiện đang bị khoá mặc định, vì máy chủ production cho tính năng đó chưa sẵn sàng. Cách chia sẻ dự án lúc này đơn giản hơn: lưu file <code class="language-plaintext highlighter-rouge">.sp</code>, gửi cho người cần xem. Không có máy chủ nào đứng giữa bạn và file của mình.</p>

<p>Mã nguồn của công cụ này theo giấy phép MIT. Và thứ bạn kiểm được ngay không cần tin ai: mở file <code class="language-plaintext highlighter-rouge">.sp</code> bằng một trình giải nén bình thường.</p>

<p>Sản phẩm chưa phát hành công khai. Chưa có bản tải về, chưa có bảng giá, chưa có ngày ra mắt cụ thể. Tên gọi “Singularity Pencil” hiện là tên tạm, chưa qua thẩm định nhãn hiệu. Những gì viết ở trên là về cách file được thiết kế — không phải lời hứa về khi nào bạn cầm được nó trên tay.</p>

<p>Nội dung có sự hỗ trợ của AI, được con người duyệt.</p>]]></content><author><name></name></author><category term="định dạng file" /><category term="local-first" /><category term="tương thích ngược" /><category term="giấy phép mở" /><summary type="html"><![CDATA[File .sp thực chất là một file ZIP mở được bằng công cụ khác — đây là lựa chọn có chủ đích, không phải sơ suất.]]></summary></entry><entry><title type="html">AI trong Singularity Pencil: bạn mang khoá của mình</title><link href="https://cnd173.github.io/spweb/writing/ai-trong-singularity-pencil-ban-mang-khoa-cua-minh/" rel="alternate" type="text/html" title="AI trong Singularity Pencil: bạn mang khoá của mình" /><published>2026-08-26T19:50:55+07:00</published><updated>2026-08-26T19:50:55+07:00</updated><id>https://cnd173.github.io/spweb/writing/ai-trong-singularity-pencil-ban-mang-khoa-cua-minh</id><content type="html" xml:base="https://cnd173.github.io/spweb/writing/ai-trong-singularity-pencil-ban-mang-khoa-cua-minh/"><![CDATA[<p>Bạn mở Rewrite, chọn một cảnh, bấm AI Rewrite. Câu hỏi trước khi bấm thường không phải “kết quả có tốt không” mà là: nội dung cảnh này đi đâu, và ai đứng giữa tôi và mô hình.</p>

<p>Singularity Pencil trả lời câu hỏi đó bằng một lựa chọn kiến trúc: BYOK — bring your own key. Bạn tự tạo khoá API ở OpenAI hoặc Anthropic, dán khoá đó vào sản phẩm, và các tính năng AI dùng khoá của bạn để gọi thẳng tới nhà cung cấp đó. Riêng phần sinh ảnh cho storyboard hiện chỉ chạy được với khoá OpenAI. Sản phẩm không bán token, không gộp chi phí AI vào giá.</p>

<p>Vì sao không phải mô hình quen thuộc hơn — nơi sản phẩm tự lo phần AI, người dùng chỉ trả một mức phí gộp?</p>

<p>Lý do đơn giản nhất, và cũng là lý do đáng nói nhất: kịch bản là tài sản riêng của người viết. Một bản draft chưa xong, một plot twist chưa ai biết, một câu thoại đang thử rồi xoá — đó là tài sản, đôi khi là sinh kế. Mô hình BYOK giữ khoá AI trong tay bạn, không phải trong tay Singularity Pencil. Chúng tôi không giữ một khoá dùng chung để thay bạn gửi nội dung kịch bản đi bất cứ đâu.</p>

<p>Hai câu hỏi mà người viết kịch bản thường hỏi trước tiên:</p>

<p><strong>Kịch bản của tôi có bị dùng để huấn luyện mô hình không?</strong> Với BYOK, câu trả lời không nằm ở Singularity Pencil — chúng tôi không sở hữu mô hình, không giữ bản sao nội dung để huấn luyện bất cứ thứ gì.</p>

<p><strong>Ai trả tiền cho AI?</strong> Bạn. Khoá là của bạn, hoá đơn là của bạn, trực tiếp với nhà cung cấp bạn chọn.</p>

<p>Những chỗ AI hiện diện trong sản phẩm: viết lại cảnh ở giai đoạn Rewrite, gợi ý breakdown, tóm tắt cảnh trong Story Graph, và sinh ảnh cho storyboard. Tất cả đều dùng khoá do bạn cắm vào. Consistency Check và Scene Variations thì không dùng AI — một cái là bộ luật kiểm tra viết sẵn, một cái là các bản thử do chính bạn viết ra.</p>

<p>Mã nguồn của Singularity Pencil là MIT. Điều này không trực tiếp trả lời câu hỏi về AI, nhưng cùng một logic: sản phẩm không giữ bạn lại bằng cách khoá bạn vào hạ tầng của mình — ở phần mã nguồn, và ở phần AI.</p>

<p>Bài này không nói AI trong Singularity Pencil tốt hơn công cụ nào khác, cũng không so sánh mô hình nào với mô hình nào. Điều kiểm soát được, và đáng nói, là: bạn biết khoá đi đâu, biết ai đứng giữa bạn và mô hình, và không phải trả tiền cho ai ngoài nhà cung cấp bạn tự chọn.</p>

<p>Singularity Pencil chưa phát hành công khai. Những gì mô tả ở đây là cách các tính năng AI được thiết kế để hoạt động trong sản phẩm đang phát triển, không phải lời mời dùng thử ngay hôm nay.</p>

<p>Nội dung có sự hỗ trợ của AI, được con người duyệt.</p>]]></content><author><name></name></author><category term="ai" /><category term="byok" /><category term="quyền riêng tư" /><summary type="html"><![CDATA[Vì sao các tính năng AI chạy bằng khoá API của chính bạn, và điều đó đổi gì về việc kịch bản của bạn đi tới đâu.]]></summary></entry><entry><title type="html">Chúng tôi đang ở đâu, và còn thiếu gì</title><link href="https://cnd173.github.io/spweb/writing/chung-toi-dang-o-dau-va-con-thieu-gi/" rel="alternate" type="text/html" title="Chúng tôi đang ở đâu, và còn thiếu gì" /><published>2026-08-26T19:50:51+07:00</published><updated>2026-08-26T19:50:51+07:00</updated><id>https://cnd173.github.io/spweb/writing/chung-toi-dang-o-dau-va-con-thieu-gi</id><content type="html" xml:base="https://cnd173.github.io/spweb/writing/chung-toi-dang-o-dau-va-con-thieu-gi/"><![CDATA[<p>Bản đang chạy nội bộ vẫn mang số hiệu 0.1.0-rc1. Đây vẫn là một bản dựng thử nghiệm, chưa ký số. Singularity Pencil chưa phát hành công khai, chưa có bản tải về cho người ngoài công ty, và chưa có bảng giá. Không có ngày ra mắt nào được chốt — nên bài này sẽ không hứa ngày nào cả.</p>

<p>Phần đã chạy được, ngay trong bản rc1:</p>

<p>Trình soạn kịch bản dựng trên Tiptap/ProseMirror, nhận đủ các loại dòng của một kịch bản phim — action, dialogue, character, parenthetical, transition — và chuyển loại dòng bằng Tab hoặc Enter thay vì phải chọn menu. Gõ tiếng Việt bằng bộ gõ (IME) hoạt động trong khung soạn thảo; bộ kiểm tự động có phủ ca gõ tiếng Việt dạng precomposed.</p>

<p>Nhập và xuất định dạng Fountain và FDX, để không khóa người dùng vào một định dạng riêng ngay từ đầu. Xuất PDF và DOCX cho khâu in ấn hoặc gửi đọc. Beat Board, Outline, và Characters để theo cấu trúc và nhân vật song song với bản thảo.</p>

<p>File dự án lưu ở định dạng <code class="language-plaintext highlighter-rouge">.sp</code>, là một file ZIP chứa dữ liệu dự án — không nhúng font của bên thứ ba, chỉ lưu profile/hash/tham chiếu tới font mà máy người dùng đang có sẵn. Autosave chạy trên IndexedDB, và việc lưu là local-first bằng Yjs — nghĩa là dữ liệu ưu tiên nằm trên máy trước, không phụ thuộc một máy chủ đang chạy.</p>

<p>Bản desktop dựng bằng Electron, có hộp thoại mở/lưu file gốc của hệ điều hành và tự gắn đuôi <code class="language-plaintext highlighter-rouge">.sp</code>. Storyboard theo từng cảnh là một image board: mỗi cảnh có các shot card kèm title/prompt/notes/status, sắp xếp lại được, nhận ảnh import/kéo-thả/dán, và import shot thẳng từ Visualize. Rewrite là một workspace soạn thảo riêng: bản gốc giữ nguyên không sửa được, bản viết lại nằm cạnh nó trong cùng editor, mỗi lần lưu là một mốc không ghi đè. Ba tác vụ chính là Workspace, Compare và Notes; Scene Variations, AI Rewrite và Consistency Check nằm trong nhóm công cụ mở rộng. Đưa bản viết lại về bản chính là một thao tác riêng, có tạo mốc phục hồi trước. Breakdown chia 15 hạng mục sản xuất và xuất được ra CSV. Story Graph trình bày cấu trúc truyện dưới dạng đồ thị.</p>

<p>Series là một workspace riêng cho phim nhiều tập: một Series Bible có giới hạn dung lượng, các tab Mùa, bản đồ tập, mỗi tập mang trạng thái, logline và thời lượng riêng và trỏ tới một tài liệu kịch bản độc lập chứ không phải một chương trong cùng một file. Trần hiện tại là 100 mùa và 500 tập mỗi mùa. Story Guide là lộ trình chín chặng có checkpoint, đi từ ý tưởng lõi, chủ đề và xung đột, nhân vật, logline, cấu trúc, synopsis, outline, tới bản thảo đầu và bản viết lại.</p>

<p>Xuất bản có workspace riêng chứ không phải một hộp thoại. Chọn được phần nào của dự án đi ra, theo preset — kịch bản PDF, hồ sơ dự án, sổ sản xuất, gói chia sẻ, hoặc tự đặt — và xuất được ra HTML, Markdown, PDF, DOCX, XLSX, CSV, Fountain, FDX, cùng một bản HTML chỉ đọc.</p>

<p>Giao diện có tiếng Việt và tiếng Anh, đổi ngay trong ứng dụng. Ngôn ngữ giao diện tách khỏi ngôn ngữ kịch bản: cái sau đặt riêng theo từng dự án. Bố cục trang kịch bản có bốn hồ sơ theo khu vực — US/Hollywood là mặc định, cùng Japan (Kido 2026), Mainland China (Xia Yan Cup 2026) và Korea (KOFIC 2026). Chỗ nào giải thưởng không công bố số đo trang cụ thể thì sản phẩm ghi thẳng đó là mốc dựng của mình, không trình bày như yêu cầu chính thức của ban tổ chức.</p>

<p>Phần chưa xong, hoặc đang cố tình khóa lại:</p>

<p>Cộng tác trực tuyến — nhiều người cùng sửa một kịch bản qua mạng — đang bị khóa mặc định. Lý do đơn giản: chưa có máy chủ production để chạy nó, không phải vì tính năng chưa viết xong ở phía client. Cách chia sẻ bây giờ là lưu file <code class="language-plaintext highlighter-rouge">.sp</code> rồi gửi cho người kia.</p>

<p>Bản web hosted thì đang chạy thật, nhưng cần nói rõ nó là gì: một bản thí điểm kín ở <code class="language-plaintext highlighter-rouge">sp.cdsfilms.com</code> cho vài người được mời, khoá bằng mật khẩu từ 30/08/2026. Đó không phải bản phát hành công khai, và nó không rút ngắn bất cứ mục nào trong danh sách còn thiếu ở phần này. Đăng nhập Google trên tên miền thật cũng chưa qua thẩm định, nên cộng tác trực tuyến vẫn tắt mặc định ngay cả ở đó.</p>

<p>Tên gọi “Singularity Pencil” hiện là tên tạm. Nó chưa qua thẩm định nhãn hiệu, và có thể sẽ đổi trước khi phát hành. Chúng tôi không coi đây là tên chính thức cho tới khi việc thẩm định xong.</p>

<p>Bản ký số/notarize cho bản desktop — bước cần để hệ điều hành không cảnh báo “ứng dụng không rõ nguồn gốc” khi mở lần đầu — chưa hoàn tất. Smoke chức năng cho bản web hosted — onboarding, nhập/xuất, round-trip <code class="language-plaintext highlighter-rouge">.sp</code>, hành vi ngoại tuyến — cũng chưa chạy; lượt smoke đã làm chỉ phủ khả năng truy cập, độ mới của bundle và các header. Bản iOS chưa bắt đầu — trong repo mới chỉ có tài liệu phạm vi cho Phase 3, chưa có dòng mã nào để dùng thử.</p>

<p>Về giấy phép: mã nguồn theo MIT. Phần AI trong sản phẩm theo mô hình BYOK (bring your own key) — người dùng tự cắm khóa API của họ, chúng tôi không cung cấp AI miễn phí hay không giới hạn kèm sản phẩm.</p>

<p>Về chuyện bán cái gì: chưa có mức giá nào, nhưng ranh giới thì đã chốt ngày 29/08/2026. Bản cài đã ký số và notarize là thứ miễn phí, không bán. Bán nó nghĩa là bắt người không trả tiền chọn giữa một cảnh báo “ứng dụng không rõ nguồn gốc” và tự dựng từ mã nguồn — mà người viết kịch bản thì không tự dựng từ mã nguồn. Thứ được bán là kênh cập nhật có quản lý và quản lý phiên bản theo đội, thứ chỉ nơi có bộ phận IT mới cần. Kèm theo đó là một cam kết không được phép lùi: nếu dự án ngừng bảo trì, không bản thảo nào bị mắc kẹt — mã nguồn MIT, file <code class="language-plaintext highlighter-rouge">.sp</code> nằm trên máy người dùng, và xuất được ra những định dạng công cụ khác đọc được.</p>

<p>Chúng tôi viết bài này không phải để xin lỗi vì chưa xong, mà để ghi lại đúng một mốc: đây là những gì chạy được hôm nay, đây là những gì đang khóa và vì sao. Danh sách này sẽ còn thay đổi.</p>

<p>Nội dung có sự hỗ trợ của AI, được con người duyệt.</p>]]></content><author><name></name></author><category term="trạng thái" /><category term="phát hành" /><category term="tính năng" /><summary type="html"><![CDATA[Bản nội bộ 0.1.0-rc1: những gì đã chạy được, những gì đang cố tình khóa lại, và vì sao chưa hứa ngày ra mắt nào.]]></summary></entry></feed>