এডিটর যেখানে শেষ, মডেল যেখানে শুরু।
বেশির ভাগ টুলে একটি সেলাই থাকে। আপনি এক্সপোর্ট করেন, আপলোড করেন, অপেক্ষা করেন, ডাউনলোড করেন, ফলটা আবার জায়গামতো বসিয়ে আশা করেন যে সব এখনো মিলে আছে। ওই সেলাইয়ের এক পাশে আপনার প্রজেক্ট; অন্য পাশে এমন একটি প্রোগ্রাম, যে প্রজেক্টটির নামও কোনোদিন শোনেনি। Sparkle-এ ওই সেলাই নেই, আর এই পাতার ইঞ্জিনিয়ারিংয়ের বেশির ভাগটাই সেটিকে তুলে ফেলার কাজ।
এডিটর মানে একটি ডকুমেন্ট আর তা বদলানোর অপারেশনগুলো
প্যানেলগুলোর নিচে এডিটর আসলে একটিই জিনিস: একটি ডকুমেন্ট, যেটি বলে কখন কী ঘটে, আর নাম দেওয়া একগুচ্ছ অপারেশন, যেগুলোই সেটি বদলানোর একমাত্র উপায়। ক্লিপ ভাগ করা, তার গতি বদলানো, রং বসানো, ক্যাপশন ট্র্যাক যোগ করা। ডকুমেন্টে আর কিছুই হাত দেয় না।
শুনতে মনে হয় এটি নিছক বাস্তবায়নের খুঁটিনাটি, অথচ এটাই গোটা আর্কিটেকচার। অপারেশনগুলোই যখন একমাত্র দরজা, তখন পরে যা যা গুরুত্বপূর্ণ হয়ে ওঠে — undo, কনকারেন্সি, replay, কী ঘটেছে তার নিরীক্ষা — তার সবটাই ওই দরজার নিজস্ব ধর্ম; দরজা দিয়ে যাওয়া প্রতিটি ফিচারের গায়ে আলাদা করে জুড়ে দেওয়া কিছু নয়।
তাই অ্যাসিস্ট্যান্ট আরেকটি প্রোগ্রাম নয়, আরেকটি caller
অ্যাসিস্ট্যান্ট কোড বানায় না, ফ্রেমও বানায় না। মেনুর একটি আইটেম যে নামের অপারেশনগুলো পাঠায়, সে-ও ঠিক সেগুলোই পাঠায় — একই টাইপ-নির্দিষ্ট প্যারামিটারসহ, একই ডকুমেন্টে। তাকে একটি ভার্টিক্যাল সংস্করণ কেটে দিতে বললে সে এডিটরের আগে থেকেই থাকা অপারেশনটিকেই ডাকে।
এ থেকে দুটি জিনিস আসে, আর দুটিই আসল কথা। এডিটর যা পারে না, অ্যাসিস্ট্যান্ট তা প্রকাশই করতে পারে না; ফলে AI-এর এমন কোনো ফলাফল থাকে না যেটিকে পরে প্রজেক্টের সঙ্গে মিলিয়ে নিতে হয়। আর সে যা করেছে, আপনিও তা করতে পারতেন — অর্থাৎ সেটি আপনি পড়তে পারেন, বদলাতে পারেন, কিংবা হাতে ধরে খুলে ফেলতে পারেন।
এক অপারেশন, এক undo
অ্যাসিস্ট্যান্টের একটি অপারেশন একশোটি ক্লিপে হাত দিতে পারে: সবগুলোর গতি বদলাতে পারে, রং বদলাতে পারে, প্রতিটি ক্যাপশনের স্টাইল বদলাতে পারে। তবু গোটাটা মিলিয়ে একটিমাত্র checkpoint হয়, তাই একটি undo আপনাকে ফিরিয়ে দেয় ঠিক অনুরোধ করার আগের অবস্থায়।
এটি নিছক সুবিধা নয়। একটি এডিটিং অ্যাসিস্ট্যান্টকে ব্যবহারযোগ্য করে তোলে এই নয় যে সে কত বার ঠিক হয় — বরং তার সঙ্গে দ্বিমত করা কত সস্তা। যাকে পরিষ্কারভাবে বাতিল করা যায় না, তার ওপর নজর রাখতে হয়; আর নজর রাখার খরচ কাজটা নিজে করার চেয়েও বেশি।
মডেলটাই সহজ অংশ। তার চারপাশের সবটা মিলেই এডিটর।
দুই হাত, একটাই ডকুমেন্ট
লম্বা একটি অপারেশন চলার সময়ও আপনি কাজ চালিয়ে যান, অর্থাৎ ডকুমেন্টের রচয়িতা তখন দুজন। সরল উপায়ে এটি করলে একটি এডিট হারিয়ে যায়: যে ধীরে লেখে সে সবার শেষে সেভ করে এবং চুপচাপ অন্যজনের কাজটি মুছে দিয়ে যায়।
তাই প্রতিটি সেভ ডকুমেন্টের বর্তমান head operation-এর বিপরীতে একটি compare-and-swap। সরে যাওয়া কোনো সংস্করণের ওপর দাঁড়িয়ে থাকা লেখা প্রত্যাখ্যান করা হয় — মিলিয়েও নেওয়া হয় না, নীরবে বসিয়েও দেওয়া হয় না। প্রত্যাখ্যানই এখানে কাজের আচরণ — প্রত্যাখ্যাত সেভ সত্যিকারের অবস্থার বিপরীতে আবার চেষ্টা করা যায়, আর হারিয়ে যাওয়া এডিট যিনি করেছিলেন তিনি সেটি টের পান কয়েক দিন পরে।
হয় exactly once, নয়তো একেবারেই নয়
অ্যাসিস্ট্যান্টের পরিকল্পনার কোনো একটি ধাপ একদিন না একদিন পড়বেই — আবার চেষ্টা, দুবার ক্লিক, সংযোগ ছিঁড়ে যাওয়া, পাতা রিফ্রেশ, মাঝপথে ক্র্যাশ, কিংবা এমন দুটি executor যারা দুজনেই ভাবছে ধাপটি তাদের। এর যেকোনোটিতেই একটি এডিট দুবার বসে যেতে পারে, আর একটি টাইমলাইনে দুবার বসা এডিট নকল নয় — সেটি অন্য একটি টাইমলাইন।
তাই সিদ্ধান্তটা executor-এর হাতে রাখা হয় না। কিছু বদলানোর আগে তাকে plan store-এর কাছ থেকে ধাপটি claim করতে হয়, আর plan store সেটি একটি লকের নিচে অবিভাজ্যভাবে মঞ্জুর করে; কেবল মঞ্জুর হওয়া claim-ই এডিটটির অনুমতি দেয়, আর replay হলে ডকুমেন্টে হাত না দিয়েই প্রথমবারের ফলটি ফিরে আসে। কোনো অপারেশন সত্যিই ঘটেছে তার প্রমাণ হলো লিখে রাখা একটি অপারেশন id, ব্রাউজার ট্যাবের কোনো ফ্ল্যাগ নয়।
মডেলগুলো আপলোডের ওপারে নয়, টাইমলাইনের পাশেই থাকে
ম্যাটিং, সেগমেন্টেশন ও ডেপথ এডিটরের সঙ্গে একই প্রসেসেই চলে, এডিটরের হাতে আগে থেকেই থাকা ফ্রেমগুলোর ওপর। কোনো এক্সপোর্ট নেই, আপলোড নেই, অপেক্ষা নেই, আবার ইম্পোর্ট করা নেই, আর পরে কিছু মিলিয়ে নেওয়ারও নেই।
এটি লেটেন্সি নিয়ে নেওয়া একটি নকশাগত সিদ্ধান্ত, আর এতে এমন একটি প্রশ্নের নিষ্পত্তি হয় যেটি সেলাই সাধারণত খোলা রেখে দেয়: প্রকাশ-নিষেধাজ্ঞার অধীনে থাকা ফুটেজ নিষেধাজ্ঞার অধীনেই থাকে, কারণ সেটি কোথাও যায়ইনি। যে কাজের জন্য সত্যিই ক্লাউড লাগে, তা যায় একটিমাত্র গেটওয়ে দিয়ে; সেটি যে অ্যাকাউন্টের অনুরোধে কাজটি হয়েছে তার নামেই খরচ মিটার করে।
যে প্রিভিউটিই এক্সপোর্ট
একই শেডার স্ক্রাব আর চূড়ান্ত রেন্ডার দুটোই আঁকে, তাই আপনি যেটি অনুমোদন করেন সেটিই আপনি পাঠান। এটি না থাকলে প্রতিটি AI এডিটই সাময়িক: আপনি একটি ছবি মেনে নিতেন আর ফাইলটি পরে আবার যাচাই করতেন — অর্থাৎ পাইপলাইনের অন্য প্রান্তে ওই সেলাইয়েরই ফিরে আসা।
সব মিলিয়ে — একটি ডকুমেন্ট, একগুচ্ছ অপারেশন, একটি undo, একটি head, একটি এক্সিকিউশন, একটি রেন্ডার পথ — আকর্ষণীয় প্রশ্নটি তখন আর এই থাকে না যে মডেলটি কতটা ভালো। প্রশ্নটি হয়ে দাঁড়ায়, তার সঙ্গে দ্বিমত করা কত সস্তা। আমরা ওই অংশটাই বানাই।