Lolly
অ্যাপ চালু করুন

ওভারভিউ

signed by Lollyoverview.htmlHTMLpixels, not shapes১২ KBAI generatedgenerated by Claudeনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিন

Lolly Icon - একটি বড় সবুজ ও সাদা ললিপপ ক্যান্ডি

এই নথিটি Lolly প্ল্যাটফর্মের উদ্দেশ্য, কাঠামো ও স্থাপত্যগত সিদ্ধান্তগুলো ধারণ করে। এটি প্রোডাক্ট ভিশন এবং কোডবেসের বর্তমান অবস্থা উভয়ই প্রতিফলিত করে।

Status: Lolly প্রকাশিত হয়েছে। ভার্সন 1.0 2026 সালের আগস্টের 30 তারিখে MPL-2.0 লাইসেন্সে ওপেন সোর্স হিসেবে প্রকাশিত হয়েছে, এবং ফিচার, ডিফল্ট ও টুল ক্যাটালগ এখনো রিলিজের মধ্যে বদলায়। ইঞ্জিনটি ডিটারমিনিস্টিক, প্রতিটি শেলের পেছনে একটিই রেন্ডার পথ। এর নিরাপত্তা এখনো স্বাধীন কোনো অডিটের মধ্য দিয়ে যায়নি, এবং গ্রহণযোগ্যতার প্রমাণ কয়েক মাসের পুরনো। বর্তমান অবস্থা এবং গ্রহণযোগ্যতা কীভাবে পরিমাপ করা হয় তার জন্য দেখুন Adoption & Governance।

এই পাতাটি কীভাবে পড়বেন। এটি দুই ধরনের বিষয়বস্তু বহন করে, ক্রমানুসারে। প্রথমার্ধ হলো কেন এটি বিদ্যমান: সমস্যা, পজিশনিং এবং একটি একক অ্যাসেট যে জীবনচক্রের মধ্য দিয়ে যায়। The big picture থেকে সামনে এটি কীভাবে স্তরগুলো খাপ খায়: কন্ট্রিবিউটরদের জন্য স্থাপত্য নথি, যা ইঞ্জিন/শেল/প্যাক বিভাজন, রিপোজিটরি লেআউট, ডেলিভারি টার্গেট এবং প্ল্যাটফর্মে প্রতিটি পরিবর্তনকে সীমাবদ্ধ করা প্রতিশ্রুতিগুলো কভার করে। আপনি যদি পণ্যটি বোঝার বদলে কোডবেস পরিবর্তন করতে এসে থাকেন, তাহলে big picture থেকে শুরু করুন।

এই পাতার চেয়ে গভীরে যায় এমন দুটি সহায়ক নথি আছে। রিপোজিটরির engine/README.md হলো ইঞ্জিনের মডিউল-বাই-মডিউল ম্যাপ, প্রতিটি মডিউল এবং তা কী পার্স বা লেখে তার একটি জেনারেটেড টেবিলসহ। Threat Model & Trust Boundaries হলো একই স্থাপত্য যা ট্রাস্ট বাউন্ডারি হিসেবে পড়া হয়েছে, এবং ইঞ্জিন কী অবিশ্বস্ত হিসেবে গণ্য করে তার যেকোনো প্রশ্নের জন্য এটিই সঠিক পাতা।


কেন এটি বিদ্যমান

পুনরাবৃত্তিমূলক ক্রিয়েটিভ কাজ এতটাই পূর্বানুমানযোগ্য যে প্রতিবার দক্ষ হাতের প্রয়োজন যুক্তিসঙ্গত হয় না, আবার এতটাই গুণমান-সংবেদনশীল যে গার্ডরেল ছাড়া হস্তান্তর করা যায় না। একা ছেড়ে দিলে এটি তিনটি পথের একটিতে যায়: ধীর, অসামঞ্জস্যপূর্ণ, অথবা একটি ভেন্ডরের টেমপ্লেটে আটকে থাকা।

এই প্ল্যাটফর্মটি এর সরাসরি উত্তর:

স্কেলে প্রোগ্রামেটিক ক্রিয়েটিভ ও কনটেন্ট - ইনপুট থেকে তৈরি অ্যাসেট, নিয়ম একবার নির্ধারণ করে, যাদের প্রয়োজন তাদের জন্য।

Lolly এমন জায়গা নয় যেখানে একটি ডিজাইন সিস্টেম উদ্ভাবিত হয় - এটি সেই জায়গা যেখানে এটি উৎপাদিত হয়। এটিকে ডিজাইনের জন্য একটি ভেন্ডিং মেশিনের মতো ভাবুন: একটি নির্বাচন করুন, একটি ফলাফল পান। প্রতিবার। ইঞ্জিনটি আপনার সামনের হার্ডওয়্যারে প্রতিটি ফরম্যাট যে সর্বোচ্চ মান তৈরি করতে পারে তার জন্য কাজ করে, এবং একই ইঞ্জিন যেখানেই শিপ করা হোক না কেন প্রতিটি প্ল্যাটফর্মে একই ফাইল তৈরি করে।

ফলাফল হলো প্রাচুর্য: প্রতিটি ইভেন্টে সঠিক সাইনেজ থাকে, প্রতিটি CVE সতর্কতা হাউস স্টাইলের সাথে মেলে, প্রতিটি লেবেল পরিষ্কারভাবে প্রিন্ট হয়, প্রতিটি ইমেইল স্বাক্ষর সবসময় হালনাগাদ থাকে - সবকিছুই এমন টুল থেকে আসে যেগুলো ইতিমধ্যে নিয়মগুলো বহন করে। প্ল্যাটফর্মটি পুনরাবৃত্তিমূলক অপারেশনালাইজড ক্রিয়েটিভ পরিচালনা করে। এটি ইচ্ছাকৃতভাবে একটি বেসপোক ক্রিয়েটিভ টুল নয় - ডিজাইনাররা এখনও ফ্ল্যাগশিপ কাজের মালিক।

সম্ভাব্যতার ভিত্তিতে উদ্ভাবন করুন, নিশ্চিতভাবে স্কেল করুন

একটি ক্রিয়েটিভ পাইপলাইনে AI নিয়ে প্রতিটি তর্ক একই প্রশ্নে আটকে যায়: এর কোন অংশটি মেশিনের কাজ? এটি একটি পুরনো প্রশ্ন যার একটি নিষ্পত্তিকৃত উত্তর আছে। স্ক্রাইব ও ইলুমিনেটররা ইতিমধ্যে দুটি যন্ত্রের মধ্যে কাজ করতেন - ঢিলেঢালা স্কেচ, যেখানে কিছুই স্থির ছিল না এবং সবকিছু চেষ্টা করা যেত, এবং প্রিন্টিং প্রেস, যা ঠিক এই কারণেই ভয়জাগানিয়া ছিল যে এটি প্রতিশ্রুতিবদ্ধ হতো। স্কেচগুলোই ছিল যেখানে শিল্প ঘটত। প্রেসই ছিল যেভাবে এটি যে কারও কাছে পৌঁছাত। কেউ দুটিকে গুলিয়ে ফেলত না, এবং দুটোই এগিয়ে চলত - নতুন কালি, নতুন টাইপফেস, নতুন প্রেস - প্রতিটি কারুকাজ ও তা যে উদ্দেশ্য সাধন করত তার সাথে সঙ্গতিপূর্ণভাবে উন্নত হতো।

Lolly একই সীমারেখা টানে। সম্ভাব্যতার ভিত্তিতে অন্বেষণ করুন: একটি মডেল, একজন ডিজাইনার, একটি অগোছালো ধারণা, এমন একটি প্রম্পট যা এমন কোথাও যায় যা কেউ পরিকল্পনা করেনি। তারপর নিশ্চিতভাবে স্কেল করুন - যে জিনিসটি বহু আউটপুটে পরিণত হয় তা একটি টুল, এবং একটি টুল প্রতিবার একইভাবে রেন্ডার হয় এমন ইনপুট থেকে যা আপনি পড়তে পারেন। অন্বেষণ মুক্ত থাকে কারণ ডাউনস্ট্রিমে কিছুই নির্ভর করে না এটি দুবার একইভাবে অবতরণ করার উপর। আউটপুট বিশ্বাস অর্জন করে কারণ এটি একটি অনুমান নয়। AI পরীক্ষণকে অনুমানযোগ্য, পুনরুৎপাদনযোগ্য ফলাফলে আনা কোনো নতুন শৃঙ্খলা নয়; এটি একই শ্রম বিভাজন যা প্রথম স্থানে মুদ্রিত কাজকে বিশ্বাসযোগ্য করে তুলেছিল।

ক্রিয়েটিভ প্রক্রিয়াকে বিশ্বাস করুন, কঠোরতার সাথে স্কেল করুন।

বিকল্পগুলোর বিপরীতে

Lolly includes lolly.work, the same project's separately deployed organisation service. Local creation needs no account; shared work and server rendering use the configured instance. Competitor scores: August 2026. Lolly coverage: 28 September 2026.

Capability Lolly+ lolly.work Penpotopen design CanvaAffinity
Cavalry
Adobedesktop pro Brand DAMFrontify
Bynder
Cloudinarymedia pipeline Figmaonline pro Render APIsBannerbear
Placid
Creatomate
Overall completenessunweighted mean - weight rows for your own context · columns are sorted by this row 84 70 57 48 41 41 41 34
Production maturity & track recordCanva, Adobe, Figma, Bynder/Frontify: a decade-plus at massive scale. Render APIs: years in production pipelines. Penpot: shipping, large community, younger at enterprise scale. Lolly: version 1.0 public since 30 August 2026 under MPL-2.0, and SUSE runs it as an internal deployment; no usage data is shared yet and there are no public case studies yet. Cloudinary: 2012, enterprise media infrastructure at global scale.
25 75 100 100 100 100 100 75
Mass generation from data (CSV / API)Lolly: batch grid and CLI, plus lolly.work's recoverable server jobs and batches with retries, cancellation and retained outputs. Canva: Bulk Create + Autofill API - real, but Enterprise-gated, async, text/image fields only; Affinity Publisher adds desktop data merge. Adobe: InDesign data merge and scripting. Figma: Buzz fills templates from CSV or XLSX, free in beta (Aug 2026) - cloud- and account-gated, 50. Penpot: open API/MCP, not purpose-built. Render APIs: this is their entire product - account- and cloud-gated, so 75 under the method rule. DAM: Studio-style batch create and resize. Cloudinary: URL-driven overlays and named transforms derive variants at scale - account-gated, 75.
100 50 50 50 75 75 50 75
Offline & air-gap operationLolly: standalone creation works offline once its assets are available; lolly.work's organisation services need a reachable instance, which can run on an internal network. The Canva column is scored on its best family member: Affinity (free since Oct 2025) runs offline as a desktop suite once a verified account activates it - 75, the same deduction Adobe takes. Canva's own Offline (2026) still edits pre-synced designs only, per device, in a 14-day window. Adobe: desktop apps run offline; licensing phones home. Figma: cached-file viewing and limited editing. Penpot: self-host on your infra behind a firewall (server required). Cloud APIs and DAM: none.
100 75 75 75 0 0 25 0
On-device rendering - data never leavesLolly: local rendering and conversion in-browser or CLI need no upload. Choosing lolly.work's shared storage, work collabs or server rendering sends the relevant data to the configured instance. Adobe: local desktop rendering, but cloud services and telemetry in the suite. Figma: canvas renders locally, files live in Figma's cloud. Penpot: 90 - rendering happens in the browser and the save target is a server that can be your own sovereign private cloud, even your own laptop, with private export throughout; only the server hop separates it from Lolly. Canva itself is server-side by design; the column's 75 is Affinity - local desktop rendering, account activation and telemetry, the same shape as Adobe. Render APIs, DAM: server-side by design.
100 90 75 75 0 0 25 0
Hard brand constraints (structural)Lolly: templates fix layout rules and expose permitted inputs. lolly.work adds group access, input policies, shared catalogues, approvals and audit records. Copy and usage rights can still need review. Canva: element locks - permission-based, admin-set and static: no template logic such as conditional logo switching or responsive recomposition at fill time, and Canva AI does not yet respect Brand Controls - 50. Render APIs: templates are fixed (only declared fields vary) but no governance layer. DAM: locked templates with restrictions. Figma: Buzz templates hold locked guidelines at fill time; the design surface stays review-enforced - 50. Penpot: tokens and systems enforced by review, not runtime. Adobe: libraries, little enforcement. Cloudinary: presets and Enterprise-gated transformation templates fix operations, not brand layout - 50.
100 50 50 25 75 50 50 75
C2PA provenance, signed at creationAdobe: the broadest shipped implementation (Photoshop, Lightroom, Premiere, Firefly) - signing happens locally in the desktop apps and in the cloud for the Content Authenticity web app, and nothing signs without an Adobe account and an Adobe-provisioned identity, so it is account-gated end to end: 75 under the method rule. Lolly: optional on-device signing without an account, plus lolly.work server signing with a configured organisation identity. A verifier must trust the signer's root to show a trusted identity. Version 1.0 is public and SUSE runs it internally, but no usage data is shared yet, so 75. Penpot: 50 via the official Lolly Export plugin - the same on-device engine signing Lolly uses, opt-in, as in Lolly (and disclosed plainly: it is Lolly's own plugin). No evidence of C2PA writing in Canva, Figma, render APIs or DAM as of Aug 2026. Cloudinary: 50 - signs images on delivery (fl_c2pa, CAI member since 2020), attesting delivery by Cloudinary rather than creation by you.
75 50 0 75 0 50 0 0
CLI, pipeline & AI-agent automationLolly: CLI, TUI, MCP server and URL mode, plus lolly.work's authenticated render API, recoverable batches and governed delivery. One engine across the local and server paths. Render APIs: API-first, webhooks, integrations - account- and cloud-gated, so 75 under the method rule. Penpot: open API, plugins, official MCP server. Canva: Connect API - Enterprise-gated, async, rate-limited. Adobe: UXP/ExtendScript plus Firefly APIs. Figma: strong REST/plugin API, no render pipeline. DAM: asset-management APIs. Cloudinary: API-first media pipeline - account-gated, 75.
100 75 50 50 50 75 50 75
Live collaboration (real-time co-editing)Figma: the scale benchmark - 200 simultaneous editors, up to 500 people in a file - account and cloud required. Canva: mature real-time editing across the product, same precondition. Penpot: real-time multiplayer with live cursors; self-hosting lifts the vendor-account precondition, but a server is still required. Lolly: direct two-device private collabs without an account, plus authenticated work collabs through lolly.work with shared edits, cursors and saved team sessions. Partial reflects the current single-node work deployment and limited operating history. Private collabs work without internet on a shared network; work collabs need the organisation's instance. Adobe: Live Co-Editing in beta, cloud documents only. Render APIs: no editing surface. DAM: comments and approvals, not canvas co-editing. Cloudinary: DAM comments and workflows, no canvas co-editing.
50 75 75 25 25 25 75 0
No design skill requiredCanva: the category benchmark for ease. DAM: fill a locked template. Lolly: fill in fields using an existing tool, or publish a tool from Design through Share with rules. lolly.work manages access and input policy for the team. Render APIs: swaps design skill for developer skill. Adobe, Figma, Penpot: professional tools. Cloudinary: the media library is easy; transformations are developer territory.
100 25 100 25 100 50 25 50
Open source, self-hosted, no lock-inPenpot: MPL-licensed, 51k+ stars, self-host via Docker/K8s - fully verifiable today. Lolly and lolly.work: MPL-2.0 open source in separate repositories, both self-hostable. lolly.work provides the organisation services as part of the project. The current 75 reflects the young project and limited deployment history. Everything else is proprietary SaaS or proprietary desktop.
75 100 0 0 0 0 0 0
Cost at production scaleLolly + lolly.work and Penpot: no per-seat software licence charge for the open-source self-hosted path; hardware, storage and operations remain costs. Render APIs: metered - roughly $0.005–0.049 per image, credits often expiring monthly. Canva/Figma: per-seat; Canva's automation needs Enterprise, though Affinity itself is free since Oct 2025. Adobe: premium per-seat suite. DAM: sales-led enterprise quotes, MAU or seat models. Cloudinary: credit-metered across transforms, storage and bandwidth - 25.
100 100 50 25 25 25 50 25
Annual medium enterprise spendIndicative list-price arithmetic for a medium enterprise - think 500-5000 people - August 2026: a guess range, not a quote; deals vary and the seat mix dominates. Ring = how much of the board's largest annual spend (US$500k) you keep; the number in the ring is each range's upper bound. Canva (US$75k-400k; Affinity free since Oct 2025 pulls the design-seat share down), Adobe (US$100k-500k) and Figma (US$30k-250k) assume the realistic creative-seat share of an organisation this size - tens to hundreds of seats, not a licence for every employee. Render APIs price by usage (US$5k-60k). DAM is quote-only, commonly US$50k-250k and up. Penpot is hand-set at 99: "your server" can be your own laptop - a small technical hurdle at well under 1% of an Adobe-scale spend. Lolly + lolly.work: US$0 in software licence charges for self-hosting. The figure excludes devices, organisation hosting, storage, support and administration; these need a separate budget. Standalone Lolly does not need the organisation service. Cloudinary: US$30k-150k, credit-based; enterprise contracts commonly sit near US$82k.
$0 $0 $400k $500k $250k+ $150k $250k $60k

আজকের ক্রিয়েটিভ টুলগুলো জুড়ে সক্ষমতার সম্পূর্ণতা, আগস্ট 2026-এ গবেষণা করা। স্কোরিং: 0 অনুপস্থিত, 25 ওয়ার্কঅ্যারাউন্ড-গ্রেড, 50 বাস্তব কিন্তু গেটেড বা আংশিক, 75 সতর্কতাসহ শক্তিশালী, 100 মূল দক্ষতা।

signed by Lollypositioning-comparison.htmlHTMLpixels, not shapes৪০ KBAI generatedgenerated by GPT-6নিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিন

ব্যবধানটি স্পষ্ট: আজ শিপ হওয়া কোনো কিছুই আমাদের কনস্ট্রেইন্টস-ফার্স্ট, অফলাইন-সক্ষম, স্বল্প-দক্ষতাসম্পন্ন, অভ্যন্তরীণভাবে অ্যাক্সেসযোগ্য আউটপুট দেয় না। Lolly-তে এমনকি একটি খোলা ক্যানভাসও অন্তর্ভুক্ত আছে - Design - যেখানে রং, টাইপ ও অ্যাসেট ব্র্যান্ড গ্লোবালগুলোর সাথে সামঞ্জস্যপূর্ণ থাকে, তাই মুক্ত বিন্যাসও কনস্ট্রেইন্টস-ফার্স্ট থেকে যায়। এটি যা নয় তা হলো একটি অনিয়ন্ত্রিত ডিজাইন স্যুট: ডিজাইনাররা বেসপোক ফ্ল্যাগশিপ কাজের জন্য Illustrator ও Figma ব্যবহার করতে থাকেন। এই টুল দিয়ে বিন্যাস তৈরি করা যায়।

লাইব্রেরির প্রতিটি টুল একটি কার্ড হিসেবে, বিভাগ অনুযায়ী গোষ্ঠীভুক্ত, যাতে একজন প্রোডিউসার একটি বেছে নিয়ে শুরু করতে পারেন signed by Lollyvector SVG৩৬৭ paths~62k nodes৭৭৩ groups৩ images১,৪৫৩ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিনলাইব্রেরির প্রতিটি টুল একটি কার্ড হিসেবে, বিভাগ অনুযায়ী গোষ্ঠীভুক্ত, যাতে একজন প্রোডিউসার একটি বেছে নিয়ে শুরু করতে পারেন signed by Lollyvector SVG৩৬৭ paths~62k nodes৭৭৬ groups৩ images১,৪৫৪ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিন

এটি ব্যবহার করুন: অপারেশনালাইজড ক্রিয়েটিভ অ্যাসেটের দ্রুত জেনারেশনের জন্য - ইভেন্ট টাইল, নেম ব্যাজ, স্বাক্ষর, CVE সতর্কতা, QR কোড, সোশ্যাল কার্ড, কনসাইনমেন্ট লেবেল, স্ট্রাকচার্ড রিপোর্ট।

এটি এজন্য ব্যবহার করবেন না: বেসপোক হিরো কনটেন্ট।


একটি ক্যাম্পেইনের জীবনচক্র

Lolly আসলে কী তা দেখার সবচেয়ে স্পষ্ট উপায় কোনো ফিচার তালিকা নয় - এটি একটি একক অ্যাসেটকে অনুসরণ করা যখন তা হাত থেকে হাতে যায়। একটি লোকালাইজড ক্যাম্পেইন কার্ড প্রতিষ্ঠানের মধ্য দিয়ে চলাচল করতে দেখুন:

  1. ক্রিয়েটিভ নিয়ম নির্ধারণ করেন। একজন ডিজাইনার Design টুলে বেস টেমপ্লেট রচনা করেন, ব্র্যান্ডের টাইপোগ্রাফি ও কালার ভেরিয়েবল হার্ড-কোড করে। তারা একটি কার্ড তৈরি করছেন না - তারা মৌলিক কাজটি একবার করছেন যাতে তাদের আর কখনও হাতে-লোকালাইজ করতে না হয়।
  2. ডেভেলপার এটি স্কেল করেন। সেই একই টেমপ্লেট CLI-এর মাধ্যমে একটি নাইটলি পাইপলাইনে যুক্ত করা হয়, যাতে একটি নতুন চার্ট বা নতুন ভাষা ভেরিয়েন্ট স্বয়ংক্রিয়ভাবে জেনারেট হয় - কোনো ডিজাইনার ফাইলটি পুনরায় খোলেন না।
  3. প্রোডিউসার শুধু এটি ব্যবহার করেন। একজন সেলস রেপ, প্লেনে অফলাইনে, একই টুল খুলে একটি ক্লায়েন্ট মিটিংয়ের জন্য নিখুঁতভাবে অন-ব্র্যান্ড ডেক জেনারেট করেন। কোনো ডিজাইন দক্ষতা নেই, কোনো নেটওয়ার্ক নেই, কোনো অপেক্ষা নেই।

ধাপ দুইয়ের "নতুন চার্ট" হলো এমন একটি রেন্ডার, একটি ডেটা স্ট্রিং ও কয়েকটি প্যারামিটার থেকে তৈরি, কেউ কোনো ডিজাইন ফাইল না খুলেই:

একটি শিরোনামসহ স্ট্যাকড এরিয়া চার্ট, যার তিনটি সিরিজ একটি কুল প্যালেটে ব্যান্ড করা, যেখানে অক্ষ, লেজেন্ড ও শিরোনাম হাতে নয় বরং টেমপ্লেট দিয়ে বসানো signed by Lollyvector SVG১৫ paths~1.3k nodes৪ groups২০ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিনএকটি শিরোনামসহ স্ট্যাকড এরিয়া চার্ট, যার তিনটি সিরিজ একটি কুল প্যালেটে ব্যান্ড করা, যেখানে অক্ষ, লেজেন্ড ও শিরোনাম হাতে নয় বরং টেমপ্লেট দিয়ে বসানো signed by Lollyvector SVG১৫ paths~1.3k nodes৪ groups২০ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিন

বিষয়টি এই নয় যে Lolly ডিজাইনারদের জন্য ভালো এবং ডেভেলপারদের জন্য ভালো এবং সেলসের জন্য ভালো, প্রতিটি আলাদা শূন্যতায়। এটি একটি রিলে রেস: ক্রিয়েটিভের প্রাথমিক কাজ ডেভেলপার দ্বারা স্কেল হয়, যা পরবর্তীতে প্রোডিউসারকে ক্ষমতায়িত করে। প্লেনে থাকা অ-প্রযুক্তিগত রেপের জন্য অনায়াস অভিজ্ঞতাটি কেবল সম্ভব হয় ডিজাইনার যে কঠোরতা নির্ধারণ করেছিলেন এবং ডেভেলপার যা ডিপ্লয় করেছিলেন তার কারণে।

এটাই ফোর্স মাল্টিপ্লায়ার। Lolly আলাদা আলাদা ভূমিকার জন্য আলাদা আলাদা টুলের একটি ড্রয়ার নয় - এটি একটি নিশ্চিত অ্যাসেট জীবনচক্র যা প্রতিটি ভূমিকা স্পর্শ করে, এবং যে প্রতিটি হাতের মধ্য দিয়ে এটি যায় তা আগেরটির মূল্য বহুগুণ করে।


একটি টুল, বহু আউটপুট

ব্র্যান্ড নিয়মগুলো থাকে টুলে, প্রতিটি ফাইলে নয় যা এটি তৈরি করে (দেখুন Lolly কীভাবে তুলনীয়)। টুলটিকে একবার ঠিকভাবে তৈরি করুন, আর প্রতিটি আউটপুট একই টাইপ, রং ও স্পেসিং উত্তরাধিকারসূত্রে পায়, তা একটি কার্ড হোক অথবা এক ডজন ভাষায় সারিতে ভরা একটি স্প্রেডশিট। আপনি আপনার কাজ কীভাবে যাচাই করেন এবং কে তা করে তা আপনারই থেকে যায়; Lolly যাচাই করার মতো জিনিসটিকে ছোট করে দেয় এবং আউটপুট তৈরিকে দ্রুততর করে তোলে।

একই নিশ্চিত টুল তিনটি উপায়ে সেই স্কেলে পৌঁছায়, সবগুলোই অভিন্ন আউটপুট তৈরি করে:

একটি ফ্রেশ ইনস্টলে Batch মোড: কোনো টুলের অপেক্ষায় একটি খালি সারি, যেখানে কোনো ডেটা আসার আগেই পুরো স্প্রেডশিট পৃষ্ঠতল ও এর Render বোতাম প্রস্তুত signed by Lollyvector SVG১৩৩ paths~15k nodes১৮৫ groups১ image১৯৫ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিনএকটি ফ্রেশ ইনস্টলে Batch মোড: কোনো টুলের অপেক্ষায় একটি খালি সারি, যেখানে কোনো ডেটা আসার আগেই পুরো স্প্রেডশিট পৃষ্ঠতল ও এর Render বোতাম প্রস্তুত signed by Lollyvector SVG১৩৩ paths~15k nodes১৮৫ groups১ image১৯৫ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিন

একজন ডিজাইনার দ্বারা একবার নির্ধারিত ব্র্যান্ড কনস্ট্রেইন্টের একটি সেট; অভিন্ন আউটপুটে যাওয়ার তিনটি পথ।


বৃহৎ চিত্র: স্তরগুলো কীভাবে খাপ খায়

এখান থেকে নিচের সবকিছুই স্থাপত্য। ডায়াগ্রামটি একদৃষ্টিতে সম্পূর্ণ সিস্টেম: শীর্ষে টুলগুলো ডেটা, মাঝখানে ইঞ্জিন কোনো প্ল্যাটফর্ম সম্পর্কে কিছুই জানে না, এর নিচের শেলগুলো একটি চুক্তি বাস্তবায়ন করে, এবং ক্যাটালগগুলো কনটেন্ট সরবরাহ করে।

                ┌─────────────────────────────────────────────┐
                │              Tools (data, not code)         │
                │   tool.json + template.html + hooks.js?     │
                └─────────────────────────────────────────────┘
                                    ▲
                                    │ talks to via Capability Bridge v1
                                    ▼
                ┌─────────────────────────────────────────────┐
                │                  Engine                     │
                │   loader · validator · runtime · template   │
                │   inputs · url-mode                         │
                │   PLATFORM AGNOSTIC. Knows nothing of DOM,  │
                │   filesystem, or You.                       │
                └─────────────────────────────────────────────┘
                                    ▲
                                    │ implements HostV1
                                    ▼
        ┌──────────────┬──────────────┬──────────────┬──────────────┐
        │  Web Shell   │ Tauri Desktop│ Tauri Mobile │  CLI Shell   │
        │   (PWA)      │              │              │              │
        └──────────────┴──────────────┴──────────────┴──────────────┘
                                    ▲
                                    │ fetches from
                                    ▼
                ┌─────────────────────────────────────────────┐
                │              Catalogs                       │
                │   catalog/tools/index.json + tool dirs      │
                │   catalog/assets/index.json + asset files   │
                └─────────────────────────────────────────────┘

রিপোজিটরি লেআউট

Lolly একটি একক রিপোজিটরি। engine/, schemas/, scripts/, tests/, api/, docs/, community/, brands/lolly-start/, প্রতিটি shells/ এবং উভয় services/ এতে সাধারণ ডিরেক্টরি হিসেবে আছে। একমাত্র ব্যতিক্রম হল brands/suse, একটি প্রাইভেট git সাবমডিউল যা SUSE টুল প্যাক এবং ক্যাটালগ ধারণ করে, যা ঐচ্ছিক এবং একটি পাবলিক ক্লোনে অনুপস্থিত থাকে। একটি নির্দিষ্ট বিল্ড কোন কোন প্যাক পড়বে তা একটি কনটেন্ট প্রোফাইল (profiles.json) দ্বারা নির্ধারিত হয়, যা গ্লোবালি সুইচ করার পরিবর্তে প্রতি প্রসেসে রেজলভ করা হয়। ক্লোন করার কমান্ড এবং প্রাইভেট প্যাকের ভেতরে একটি পরিবর্তন কীভাবে কমিট করা হয় তা জানতে দেখুন Build Guide » Getting the source।

lolly/
├── engine/           # Platform-agnostic core. Open source (MPL-2.0).
│   └── src/
│       ├── index.ts          # public surface - loader, runtime, template, inputs, url-mode
│       ├── loader.ts         # fetches and validates tool files
│       ├── runtime.ts        # orchestrates the 5-step lifecycle
│       ├── template.ts       # Handlebars hydration + annotateTemplate
│       ├── inputs.ts         # manifest → runtime input model
│       ├── url-mode.ts       # URL ↔ input state round-trip
│       ├── validate.ts       # JSON Schema validation of manifests
│       ├── compose.ts        # resolve nested tool renders (composes)
│       ├── embed.ts          # parse portable lolly.tools embed URLs
│       └── bridge/
│           └── host-v1.ts    # type re-export of the @lolly-tools/core contract
│
├── shells/
│   ├── web/          # PWA - hosted online; primary distribution
│   │   └── src/
│   │       ├── main.ts           # boot, routing
│   │       ├── theme.ts          # theme apply/persist (FOUC prevention)
│   │       ├── bridge/           # web implementations of HostV1 APIs
│   │       │   ├── index.ts      # compose all bridge pieces
│   │       │   ├── db.ts         # IndexedDB setup
│   │       │   ├── state.ts      # host.state - saved edits
│   │       │   ├── profile.ts    # host.profile - user details
│   │       │   ├── assets.ts     # host.assets - catalog + user uploads
│   │       │   ├── clipboard.ts  # host.clipboard
│   │       │   ├── export.ts     # host.export - rasterise/serialize
│   │       │   ├── net.ts        # host.net - allowlisted fetch
│   │       │   └── media.ts      # host.media - live camera frames (onFrame)
│   │       ├── catalog/
│   │       │   └── sync.ts       # boot-time catalog sync + offline cache
│   │       ├── styles/           # app-wide CSS (app.css, picker.css, tokens.css)
│   │       └── views/
│   │           ├── gallery.ts    # tool library listing + saved-state cards
│   │           ├── tool.ts       # mounts one tool (inputs + canvas + actions)
│   │           ├── picker.ts     # asset picker UI (invoked by host.assets)
│   │           ├── profile.ts    # user details editor
│   │           ├── projects.ts   # /p - folders of saved sessions (nested; folder/selection export)
│   │           └── free-canvas.ts # free-canvas editor overlay for render.layout:"editor" tools
│   │
│   ├── cli/          # Node.js CLI - same engine, headless jsdom
│   │   ├── bin/lolly.ts
│   │   └── src/
│   │       ├── run.ts    # loadTool → createRuntime → export → write file
│   │       └── bridge.ts # CLI implementation of HostV1
│   │
│   ├── tui/          # Interactive terminal shell (Ink) - reuses the CLI bridge
│   │   └── src/
│   │       ├── main.tsx  # full-screen app: Gallery / Projects / Profile / ToolView
│   │       └── bridge.ts # CLI bridge + on-disk state under ~/.lolly
│   │
│   ├── tauri-desktop/ # downloadable desktop app
│   └── tauri-mobile/  # iOS/Android app
│
├── community/        # the brand-agnostic tool pack - data, not code. Public (MPL-2.0).
│                     #   A SELECTION follows; a profile mounts these plus whatever
│                     #   tools the active brand pack carries of its own.
│   ├── qr-code/
│   ├── snippet/
│   ├── countdown-timer/
│   ├── color-palette/
│   ├── street-map/        # offline vector city-block maps
│   ├── url-shot/          # "URL Screenshot" (capture capability)
│   ├── strip-data/        # on-device metadata strip - JPEG/PNG/SVG/PDF (file in → clean file out)
│   ├── compress-pdf/      # on-device PDF compressor - recompresses images (file in → smaller file out)
│   ├── chart/             # SVG charts from structured data
│   ├── filter/            # photo effects in one tool - halftone/scanline/posterize/voronoi (vector), duotone/pixel-stretch/imperfections (raster)
│   ├── meeting-planner/   # global timezone meeting scheduler
│   ├── calendar-ics/      # event → .ics calendar file plus a card
│   ├── wayfinding-signage/ # event signage; directions blocks auto-fit label text
│   ├── text-helper/       # on-device text workbench (format/decode/hash/de-identify)
│   ├── design/     # "Design" - freeform WYSIWYG editor canvas (render.layout: editor)
│   ├── multi-page-pdf/    # multi-page PDF document - cover, flowing content blocks, back page
│   ├── diagram-builder/   # org / layercake / process / cycle / pyramid diagrams
│   ├── logo-wall/         # many logos → auto-packed grid
│   ├── icon/              # favicon .ico / png / svg from text + colours
│   └── lottie-digi-ad/    # animated Lottie ad banners
│
├── brands/            # brand packs - a catalog each, and optionally tools of their own
│   ├── lolly-start/   # the blank starter brand, owned here
│   │   └── catalog/
│   │       ├── tools/index.json    # tool registry, generated per brand
│   │       └── assets/
│   │           ├── index.json      # asset registry
│   │           └── lolly/...       # logo, palette, tokens
│   └── suse/          # PRIVATE submodule - the SUSE tools and the SUSE catalog
│
├── schemas/          # JSON Schema for tool.json, asset entries, AssetRef
├── scripts/          # build-catalog-index.ts, checksum-assets.ts, validate-catalog.ts
├── tests/            # engine tests
└── docs/             # this file + authoring guides + positioning

প্ল্যাটফর্ম ডেলিভারি মডেল

প্ল্যাটফর্মটি একাধিক সারফেস জুড়ে চলে - web PWA, Tauri ডেস্কটপ/মোবাইল, স্ক্রিপ্টযোগ্য CLI এবং ইন্টারঅ্যাক্টিভ TUI। এগুলো সবই একই ইঞ্জিন ও একই টুল ফাইল ব্যবহার করে।

Web (PWA) - প্রাথমিক বিতরণ

SUSE-নিয়ন্ত্রিত একটি URL-এ হোস্ট করা। সার্ভিস ওয়ার্কার একবার টুল ও অ্যাসেট ক্যাশ করলে অফলাইনে কাজ করে। এখানেই বেশিরভাগ কর্মী, ভেন্ডর ও অংশীদার প্ল্যাটফর্মটি ব্যবহার করবেন। কোনো অ্যাকাউন্টের প্রয়োজন নেই - প্রতি ডিভাইসে IndexedDB-তে স্টেট সংরক্ষিত হয়।

ওয়েব শেলটি একটি লেআউট থেকে রেসপন্সিভ। ডেস্কটপে একটি টুল হলো একটি রিসাইজেবল কন্ট্রোল সাইডবার একটি প্রিভিউ স্টেজের পাশে, ট্র্যাকপ্যাড-নেটিভ ক্যানভাস নেভিগেশনসহ (কার্সরের চারপাশে জুম করতে Cmd/Ctrl-হুইল বা পিঞ্চ, প্যান করতে Space- বা মিডল-ড্র্যাগ, 0/1/+/− কী এবং একটি Fit/% HUD)। মোবাইলে (≤640px) কন্ট্রোলগুলো একটি টপ-অ্যাঙ্কর্ড শিট হয়ে যায় একটি ড্র্যাগ গ্রিপসহ যা peek/half/full-এ স্ন্যাপ করে (ট্যাপ টগল করে) একটি স্ট্যাটিক ফুল-স্ক্রিন প্রিভিউর উপরে, এবং একটি ফ্লোটিং Render বোতাম একটি বটম-শিট পপআপে Export কন্ট্রোল খোলে। টাচে প্রিভিউতে পিঞ্চ-জুম ও ড্র্যাগ-প্যান পাওয়া যায়। রেন্ডার পাথ ও এক্সপোর্ট কন্ট্রোল উভয়েই অভিন্ন - শুধু chrome রিফ্লো করে।

ডেস্কটপ স্প্লিট ভিউ - বাঁদিকে ম্যানিফেস্ট থেকে তৈরি নিয়ন্ত্রণগুলি, ডানদিকে লাইভ ক্যানভাস signed by Lollyvector SVG১৩১ paths~6.1k nodes১৫৮ groups১ image১৪২ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিন

ফোন প্রস্থে একই টুল, রক্ষণাবেক্ষণের জন্য কোনো দ্বিতীয় লেআউট নেই: নিয়ন্ত্রণগুলি উপরে একটি শিটে পরিণত হয়, প্রিভিউ পুরো স্ক্রিন জুড়ে থাকে এবং রেন্ডার পিলটি তার উপরে ভাসতে থাকে।

430px চওড়া স্ক্রিনে একটি অডিওগ্রাম - ওপরে কন্ট্রোল শিট, নিচে তৈরি হওয়া বর্গাকার আর্টওয়ার্ক এবং ফ্লোটিং রেন্ডার পিল signed by Lollyvector SVG৯৭ paths~3.3k nodes১১৩ groups৯৯ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিন430px চওড়া স্ক্রিনে একটি অডিওগ্রাম - ওপরে কন্ট্রোল শিট, নিচে তৈরি হওয়া বর্গাকার আর্টওয়ার্ক এবং ফ্লোটিং রেন্ডার পিল signed by Lollyvector SVG৯৭ paths~3.3k nodes১১৩ groups১০০ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিন

ব্যাচ মোড (/pro)। ওয়েব শেল একটি স্প্রেডশিট-স্টাইল ব্যাচ গ্রিডও (shells/web/src/pro/) সরবরাহ করে যা একটি বা একাধিক টুল জুড়ে একসঙ্গে অনেকগুলি সারি রেন্ডার করে। এটি CSV/TSV রাউন্ড-ট্রিপ প্লাস স্প্রেডশিট পেস্ট, প্রতি-সারি টেমপ্লেট/ফরম্যাট/সাইজ/ইউনিট/dpi, লাইভ প্রিভিউ সহ একটি ব্লকস-এডিটর সাইড প্যানেল, সংকোচনযোগ্য এক্সপোর্ট কলাম, প্রতি-সারি "প্রাসঙ্গিকতা" ট্যাগ বার, বাঁদিকের ড্র্যাগ-হ্যান্ডেল দিয়ে সারি পুনর্বিন্যাস, দুই-ধাপের ডিলিট নিশ্চিতকরণ, সংরক্ষিত ব্যাচ সেশন এবং একটি .zip ডাউনলোড সরবরাহ করে। এটিই "মাস কনটেন্ট জেনারেশন" পজিশনিংয়ের পেছনে থাকা এক-থেকে-বহু সারফেস।

Tauri ডেস্কটপ / মোবাইল

প্যাকেজড নেটিভ অ্যাপ (Tauri-এর মাধ্যমে ছোট ফুটপ্রিন্ট)। এটি সম্পূর্ণ অফলাইন উপলব্ধতা, CLI-নির্ভর টুলগুলির (PDF Smasher, Font Outliner) জন্য ফাইলসিস্টেম অ্যাক্সেস এবং ক্যামেরা অ্যাক্সেস প্রদান করে। 2026 সালের মাঝামাঝি টুলিং উন্নতির জন্য নির্ধারিত।

CLI

lolly <tool-id> [--input=value ...] --output=file.png

ডেস্কটপ ব্যবহারকারীরা টার্মিনাল থেকে অনেক টুল চালাতে পারেন। CLI শেল একই ইঞ্জিন লোড করে, একটি jsdom DOM তৈরি করে, একই রেন্ডার পাথ চালায় এবং ফাইল লেখে। URL মোড হলো ট্রান্সপোর্ট - CLI কোনো আলাদা ইমপ্লিমেন্টেশন নয়। এটি নিশ্চিত করে যে CLI এবং GUI আউটপুট অভিন্ন।

lolly qr-code --url=https://suse.com --output=qr.svg
lolly quotes --quote="Ship it." --output=quote.png
lolly                        # lists available tools
lolly qr-code                # lists inputs for that tool

TUI

pnpm run tui

CLI-র ইন্টারঅ্যাক্টিভ প্রতিরূপ: একটি ফুল-স্ক্রিন, কীবোর্ড-ফার্স্ট টার্মিনাল অ্যাপ (Ink-এর উপর নির্মিত) যা টুল ব্রাউজ করা, ইনপুট পূরণ করা, প্রজেক্ট সংরক্ষণ করা এবং এক্সপোর্ট করার জন্য ব্যবহৃত হয় - কোনো GUI ছাড়াই। এর হোস্ট ব্রিজ DOM-মুক্ত ফরম্যাটগুলির (SVG/EMF/EPS/HTML + text/data) জন্য CLI-র ইমপ্লিমেন্টেশন পুনর্ব্যবহার করে, এবং ~/.lolly-এর অধীনে ডিস্কে-অবস্থিত স্টেট প্লাস একটি অপ্ট-ইন ইনলাইন প্রিভিউ যোগ করে। এর বাইরে এর একটি ব্রাউজার রেন্ডার টিয়ার রয়েছে: একটি স্কোপড হেডলেস Chromium (MCP সার্ভার যেটি ইনস্টল করে সেটিই) যা চাহিদামাফিক রাস্টার/PDF/ভিডিও এবং লাইভ-URL ক্যাপচার তৈরি করে - ওয়েব শেলের একটি নির্মিত কপি চালিয়ে যাতে আউটপুট অভিন্ন থাকে, এবং কেবল আপনি প্রথমবার এমন কোনো ফরম্যাট এক্সপোর্ট করলেই চালু হয়। তাই url-shot (ক্রপ + রিকালার + ভেক্টর PDF/SVG সহ) এবং প্রতিটি রাস্টার/pdf টুল টার্মিনালেও চলে। দেখুন TUI গাইড।

আপনি যে সারফেসেই থাকুন না কেন, ড্যাশবোর্ডের Capabilities ট্যাব হলো প্ল্যাটফর্মটি কী করতে পারে বলে ঘোষণা করে তার সম্পূর্ণ মানচিত্র, গোষ্ঠীবদ্ধ এবং একটিও টুল না খুলেই পঠনযোগ্য।


টুল ক্যাটাগরি

টুলগুলিকে গ্যালারি গ্রুপিংয়ের জন্য তাদের ম্যানিফেস্টে একটি category দিয়ে ট্যাগ করা হয়।

সারিগুলি গ্যালারি সেকশনের ক্রম অনুযায়ী তালিকাভুক্ত। utility সেকশন সর্বদা গ্যালারিতে সবার শেষে রেন্ডার হয় (অন্য প্রতিটি ক্যাটাগরির পরে, ভবিষ্যতেরগুলি সহ) - এটি অন-ডিভাইস "Offline Utilities" ড্রয়ার।

বিভাগউদাহরণপরিকল্পিত
everyoneQR Code Generator, Quote Card, Email Signature, Logo, Wordmark, Audiogram, Battlecards, Sequence, RecordEmployee Image Stationery
designerBrand Lockup, Design, Chart, Darkroom, Filter, Pose Geeko, BookletFont Outliner
eventMeeting Planner, Event Name Badge, Wayfinding Signage, Calendar ICS, Booth StudioEvent Stationery, Bulk Name Badges, Room Agenda Cards
product-CVE Alert, Product Release Announcement, Blog OG Image
utilityStrip Hidden Data, Text, Compress PDF, Convert Image, Convert Font, Redact, Run Web Code, Screen Capture, URL ScreenshotUnit/format converters, more on-device privacy utilities

সেই সেলগুলি উদাহরণ, তালিকা নয়। কোন টুল বিদ্যমান তা আপনার মাউন্ট করা প্রোফাইলের একটি বৈশিষ্ট্য, এই পাতার নয়: একটি ব্র্যান্ড প্যাক নিজের টুল যোগ করে, এবং এমন একটি কমিউনিটি টুল বাদও দিতে পারে যেটি সে শিপ করতে চায় না। catalog/tools/index.json - যা ম্যানিফেস্ট থেকে তৈরি হয় এবং গ্যালারি প্রকৃতপক্ষে যা পড়ে সেই রেজিস্ট্রি - হলো কর্তৃত্বপূর্ণ তালিকা; একটি প্রোফাইল কী মাউন্ট করে তা গুনতে, এখানে লেখা কোনো সংখ্যা বিশ্বাস করার বদলে ম্যানিফেস্টগুলি গুনুন (ls community//tool.json brands//tools/*/tool.json)। (দুটি প্যাকে উপস্থিত একটি টুল id একবারই মাউন্ট হয়, বিজয়ী প্যাক থেকে।)

টুলগুলিকে স্ট্যাটাস অনুযায়ীও শ্রেণীবদ্ধ করা হয়: official (ব্র্যান্ড অনুমোদিত, ওয়াটারমার্কহীন), community (বাহ্যিক অবদান), experimental (ওয়াটারমার্কযুক্ত এক্সপোর্ট)। লাইব্রেরির বেশিরভাগই official; নতুন স্টুডিওগুলি এবং ক্যাপচার টুলগুলি স্থিতিশীল হওয়ার সময় community বা experimental-এ থাকার প্রবণতা দেখায়। প্রতিটি সারফেসে ব্যাজ দেখানো হয়, তাই পাঠক এটি খোলার আগেই জানতে পারেন তারা কী নিচ্ছেন - এবং উপরের ক্যাটাগরি সেলগুলির মতোই, প্রতি-স্ট্যাটাস সদস্যপদ এখানে তালিকাভুক্ত করার জন্য খুব দ্রুত বদলায়। এটি গ্যালারি বা জেনারেট করা ইনডেক্স থেকে পড়ে নিন।

Design হলো render.layout: "editor" ফ্রি-ক্যানভাস মোডে তৈরি প্রথম টুল - একটি ক্রোমহীন, প্রত্যক্ষ-ম্যানিপুলেশন সারফেস যেখানে আপনি টেক্সট, শেপ এবং ইমেজের বক্স টেনে, রিসাইজ করে, ঘুরিয়ে এবং স্ন্যাপ করে বসাতে পারেন, তারপর অন্য প্রতিটি টুলের মতো একই রেন্ডার পাথের মাধ্যমে এক্সপোর্ট করতে পারেন।

Strip Hidden Data হল প্রথম অন-ডিভাইস ইউটিলিটি (privacy: "on-device"): এটি এমন একটি কনটেন্ট-ট্রান্সফর্ম টুল যা আপনার দেওয়া একটি ফাইল নেয়, সম্পূর্ণভাবে ব্রাউজারের মধ্যে প্রসেস করে এবং একটি পরিষ্কার কপি ফেরত দেয় - কখনো আপলোড করা হয় না, কখনো ওয়াটারমার্ক করা হয় না, কোনো প্রোভেন্যান্স স্ট্যাম্প করা হয় না। Text হল দ্বিতীয়টি - প্রতিদিনের পেস্ট-ইনটু-এ-ওয়েবসাইট কাজের জন্য একটি অন-ডিভাইস ওয়ার্কবেঞ্চ (JSON ফরম্যাট, JWT ডিকোড, Base64, URL এনকোড/ডিকোড, SHA হ্যাশিং)। Compress PDF হল তৃতীয়টি - এটি একটি PDF-এর ছবিগুলো পুনরায় কম্প্রেস করে এর আকার ছোট করে, আবারও সম্পূর্ণভাবে অন-ডিভাইসে। মার্কার এবং এর ব্যাজ টেক্সট "আপনার ডিভাইসে চলে - কিছুই আপলোড করা হয় না" এখন পুরো ট্রান্সফর্ম সেট কভার করে: Strip Hidden Data, Text, Compress PDF, Convert Image (HEIC/TIFF/AVIF → WebP/JPG/PNG), Convert Font, Redact (একটি ছবি, SVG বা PDF-এর অংশ ধ্বংস করে), Prompt Card এবং Rebrand (একটি .pptx-কে যথাস্থানে রি-থিম করে) যেখানে প্রোফাইল এটি মাউন্ট করে। এটি একটি প্রাইভেসি-ইউটিলিটি বিভাগ যা গোপনীয় ফাইল একক-উদ্দেশ্য ওয়েবসাইটে হস্তান্তর করার প্রয়োজনীয়তা প্রতিস্থাপন করে।

Utilities ড্রয়ার, যেখানে প্রতিটি কার্ড এমন একটি টুল যা আপনার কাছে থাকা একটি ফাইল রূপান্তর করে signed by Lollyvector SVG১২৪ paths~29k nodes৩২৪ groups৩৯৫ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিনUtilities ড্রয়ার, যেখানে প্রতিটি কার্ড এমন একটি টুল যা আপনার কাছে থাকা একটি ফাইল রূপান্তর করে signed by Lollyvector SVG১২৪ paths~29k nodes৩২৪ groups৩৯৬ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিন

নোট: category এবং status প্রতিটি tool.json থেকে catalog/tools/index.json-এ (গ্যালারি যে রেজিস্ট্রি পড়ে) ডিনরমালাইজড করা হয়। ম্যানিফেস্টই একমাত্র সোর্স অফ ট্রুথ - ইনডেক্সটি pnpm run build:catalog দ্বারা জেনারেট করা হয় এবং কমিট করা ইনডেক্স ম্যানিফেস্ট থেকে ড্রিফট করলে pnpm run validate:catalog CI ফেইল করে।


আর্কিটেকচারাল প্রতিশ্রুতি

এই সিদ্ধান্তগুলি চূড়ান্ত। এগুলির যেকোনো একটি পরিবর্তন করা একটি বড় কাজ - এগুলি কোডবেসের প্রতিটি অন্য সিদ্ধান্তকে আকার দেয়।

1. ডিক্লারেটিভ টুল, একটি ইম্পারেটিভ এস্কেপ হ্যাচসহ

একটি টুল হলো একটি ম্যানিফেস্ট (tool.json) + একটি টেমপ্লেট (template.html) + ঐচ্ছিক hooks.js।

ম্যানিফেস্ট ইনপুট ঘোষণা করে। টেমপ্লেট নয়। Handlebars টোকেন থেকে ইনপুট অনুমান করা হয় না। ম্যানিফেস্ট হলো চুক্তি; টেমপ্লেট {{id}} দিয়ে নামযুক্ত ভেরিয়েবল ব্যবহার করে।

Street Map-এর কন্ট্রোল স্ট্যাক - একটি শহর ড্রপডাউন, একটি থিম সিলেক্ট, ওয়েট স্লাইডার এবং কালার ট্রিগার, এদের প্রতিটিই একটি ম্যানিফেস্ট লাইন থেকে আঁকা signed by Lollyvector SVG৩৯ paths~2.6k nodes৫৪ groups২ images৪৩ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিনStreet Map-এর কন্ট্রোল স্ট্যাক - একটি শহর ড্রপডাউন, একটি থিম সিলেক্ট, ওয়েট স্লাইডার এবং কালার ট্রিগার, এদের প্রতিটিই একটি ম্যানিফেস্ট লাইন থেকে আঁকা signed by Lollyvector SVG৩৯ paths~2.6k nodes৫৪ groups২ images৪৩ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিন

হুক ঐচ্ছিক। বেশিরভাগ টুল বিশুদ্ধভাবে ডিক্লারেটিভ - ম্যানিফেস্ট + টেমপ্লেটই যথেষ্ট। যে টুলগুলির গণনাকৃত মান দরকার (QR এনকোডিং, চার্ট ডেটা শেপিং) তারা hooks.js সরবরাহ করে যা নামযুক্ত লাইফসাইকেল ফাংশন এক্সপোজ করে (onInit, onInput, onFrame - মোশন-রিঅ্যাক্টিভ টুলের জন্য প্রতি-ফ্রেম লাইভ-ক্যামেরা হুক - onLevel, beforeExport, afterExport, exportFile - অন-ডিভাইস ইউটিলিটি যেমন Strip Hidden Data-তে ব্যবহৃত ফাইল-ইন/ফাইল-আউট ট্রান্সফর্ম পাথ - এবং exportStill, এমন একটি টুলের জন্য যেটি নিজের গভীর রাস্টার নিয়ন্ত্রণ করে)। হোস্ট ক্লোজার স্কোপ হিসেবে ক্যাপাবিলিটি ব্রিজ ইনজেক্ট করে new Function('host', …) দিয়ে হুক লোড করে। এটি একটি পোর্টেবিলিটি চুক্তি, নিরাপত্তা স্যান্ডবক্স নয়: হুক এখনও পেজ রিয়েলমে চলে এবং ব্রাউজার শেলে পারে window/fetch/document-এ পৌঁছাতে - host. হলো সমর্থিত, পোর্টেবল সারফেস, প্রয়োগকৃত সীমানা নয়। অ্যাসিঙ্ক হুক ফলাফল সময়-সীমাবদ্ধ (onInit 5s, onInput 2s, beforeExport/afterExport 5s, exportFile/exportStill 10s) এবং দেরিতে আসা ফলাফল বাতিল হয়ে যায়; একটি রানঅ্যাওয়ে সিঙ্ক্রোনাস* হুক প্রিএম্পট করা যায় না। তাই Worker আইসোলেশন চালু না হওয়া পর্যন্ত অবিশ্বস্ত তৃতীয়-পক্ষের হুক কোড চালানো নিরাপদ নয়।

এটি গুরুত্বপূর্ণ কারণ: ডিক্লারেটিভ টুল নন-ডেভেলপারদের দ্বারা তৈরি করা যায়। যদি প্রতিটি টুল একটি ওয়েব অ্যাপ হতো, তাহলে "ওয়ার্কহর্স টেমপ্লেট তৈরি/রক্ষণাবেক্ষণের সীমিত দক্ষতা" ঝুঁকির নোটটি একটি স্থায়ী বটলনেক হয়ে উঠত।

2. টুল এবং অ্যাসেট হলো ডেটা, বান্ডল করা কোড নয়

ওয়েব এবং Tauri অ্যাপগুলি বুট করার সময় একটি পরিচিত URL থেকে টুল এবং অ্যাসেট ক্যাটালগ ফেচ করে, স্থানীয়ভাবে ক্যাশ করে এবং যা কিছু সেখানে আছে তার উপর কাজ করে। নতুন কোনো ইভেন্ট টাইল বা মৌসুমি অ্যাসেট যোগ করতে কোনো অ্যাপ রিলিজের প্রয়োজন নেই।

অ্যাসেট বাইটগুলি CDN পয়জনিং প্রতিরোধ করতে SHA-256 চেকসাম করা হয়। অ্যাসেট id + version ক্যাশ ইনভ্যালিডেশন চালায়।

3. ক্যাপাবিলিটি ব্রিজই টুলগুলি যা দেখতে পায় তার একমাত্র API

টুলগুলি তাদের টেমপ্লেট এরিয়ার বাইরে কখনো DOM স্পর্শ করে না, কখনো সরাসরি fetch কল করে না, কখনো ফাইলসিস্টেম পড়ে না। তারা সংস্করণযুক্ত host.* মেথড কল করে। চুক্তির প্রামাণিক সংজ্ঞা হলো packages/core/src/host-v1.ts - টুল-অথর SDK @lolly-tools/core, যাতে একটি তৃতীয় পক্ষ ইঞ্জিনের উপর নির্ভর না করেই এর বিরুদ্ধে বিল্ড করতে পারে; engine/src/bridge/host-v1.ts হলো এর একটি টাইপ রি-এক্সপোর্ট, এবং ইঞ্জিন/শেল কোড সেই পাথ থেকেই আমদানি করা অব্যাহত রাখে:

ব্রিজ APIএটি কী করে
host.profileব্যবহারকারীর firstname, email, headshot, city ইত্যাদি। bindToProfile দিয়ে ইনপুট প্রি-ফিল করে।
host.assetsক্যাটালগ কোয়েরি, অ্যাসেট রেজোলিউশন, হোস্ট-প্রদত্ত পিকার UI।
host.stateইনপুট স্লট সংরক্ষণ / লোড করে। ওয়েবে IndexedDB, Tauri-তে ফাইলসিস্টেম, CLI-তে মেমরি।
host.clipboardক্লিপবোর্ডে টেক্সট বা ইমেজ লেখে (প্ল্যাটফর্ম ফলব্যাকসহ)।
host.exportরেন্ডার টার্গেট রাস্টারাইজ বা সিরিয়ালাইজ করে। এক্সপেরিমেন্টাল টুলের জন্য ওয়াটারমার্ক প্রয়োগ করে।
host.netঅ্যালাউলিস্টেড fetch - কেবল তখনই উপলব্ধ যখন টুল "network" ক্যাপাবিলিটি ঘোষণা করেছে। (বর্তমানে কোনো শিপিং টুল এটি ব্যবহার করে না।)

ঐচ্ছিক, অ্যাডিটিভ সারফেসগুলি কেবল তখনই দেখা যায় যখন একটি শেল সেগুলি সরবরাহ করে। কিছু ক্যাপাবিলিটি-গেটেড - কেবল তখনই এক্সপোজ হয় যখন টুল মিলে যাওয়া ফ্ল্যাগ ঘোষণা করে: host.compose (অন্য একটি টুলের রেন্ডার এম্বেড করা - compose), host.capture (URL Screenshot-এর জন্য পেজ ক্যাপচার - capture) এবং host.recorder (রেকর্ডিং টুলের জন্য মাইক/ক্যামেরা/ডিসপ্লে ক্যাপচার - microphone / camera / screen)। বাকিগুলি ফিচার-ডিটেক্টেড - শেল যখনই সেগুলি সরবরাহ করতে পারে তখনই উপস্থিত থাকে, আর টুল এমন শেলের জন্য একটি ফলব্যাক রাখে যেগুলি পারে না।

এটি যা কভার করে তা দেখাতে কয়েকটি হেডলাইন সারফেস - Host API প্রতিটি নথিভুক্ত করে, এবং packages/core/src/host-v1.ts নিজেই চুক্তি:

সারফেসকবে থেকেএটি কী যোগ করে
host.tokens1.0DTCG ডিজাইন টোকেন - ব্র্যান্ডের নিজস্ব প্রিমিটিভ
host.text1.0HarfBuzz WASM-এর মাধ্যমে টেক্সট-টু-পাথ (wasm ক্যাপাবিলিটি সেসব টুলকে ফ্ল্যাগ করে যা এর ওপর নির্ভরশীল)
host.media1.4onFrame হুক চালানো লাইভ ক্যামেরা ফ্রেম। প্রগ্রেসিভ এনহ্যান্সমেন্ট, ইচ্ছাকৃতভাবে camera ফ্ল্যাগ দিয়ে গেট করা হয়নি - এমন একটি টুল তবু একটি সাধারণ স্টিল-ইমেজ টুলের মতোই কাজ করে
host.color1.40পারসেপচুয়াল কালার ম্যাথস: ΔEOK, WCAG + APCA কনট্রাস্ট, OKLab র‌্যাম্প, ক্লাস-ব্রেক, ক্যাটেগরিক্যাল প্যালেট, হারমনি স্কিম (1.60), CSS Color 4 মিক্সিং এবং গ্রেডিয়েন্ট বেকিং (1.68)। বিশুদ্ধ ও সিনক্রোনাস - শেলগুলো ইঞ্জিনের makeColorApi() জুড়ে দেয়, নিজে কিছু বাস্তবায়ন করে না, তাই এতে ড্রিফট হতে পারে না
host.images1.60ডিভাইসে বাইট ডিকোড / রিসাইজ / রি-এনকোড করা - কনভার্ট পাথ (HEIC → JPEG, WebP-তে কমপ্রেস, ডাউনস্কেল)। ওয়েব শেলে একটি lazy facade হিসেবে শিপ করা, তাই HEIC ডিকোডার কখনো বুট চাংকে ঢোকে না
host.geom1.64নিখুঁত ভেক্টর জ্যামিতি: পাথ বুলিয়ান, অফসেটিং, স্ট্রোক-টু-ফিল, স্প্লাইন লোয়ারিং, সরলীকরণ, হিট টেস্টিং। এটিও বিশুদ্ধ, সিনক্রোনাস এবং ইঞ্জিন থেকে জোড়া (makeGeomApi()); ব্যর্থতা ফেরত দেওয়া হয়, কখনো থ্রো করা হয় না

বাকিগুলি একই নিয়ম অনুসরণ করে এবং তাদের পাশে নথিভুক্ত করা হয়েছে: অন-ডিভাইস ডকুমেন্ট সার্জারির জন্য pdf (1.8) এবং pptx (1.58), ক্লিপ বিশ্লেষণ এবং অন-ডিভাইস TTS/ট্রান্সক্রিপশনের জন্য audio (1.71) এবং speech (1.96), MilkDrop প্লেসহোল্ডার চুক্তির জন্য viz (1.72), গভীর-বিট এবং লেয়ারড-বিটম্যাপ আউটপুটের জন্য codec (1.100) এবং layers (1.102), অন-ডিভাইস মডেলের জন্য upscale (1.101) এবং matte (1.103), নিজের পিক্সেল কাজ করা হুকের জন্য raster (1.105), এক্সপোর্ট-সেফ অ্যারোর জন্য connectors (1.106) এবং সম্পন্ন বাইট সাইন করার জন্য c2pa (1.85)। সংখ্যাটি বাড়ে; নিয়মগুলি বাড়ে না।

ঘোষণাযোগ্য ক্যাপাবিলিটিগুলি হলো: network, filesystem, clipboard, camera, microphone, screen, ffmpeg, wasm, capture, compose। (screen, 1.54-এ যোগ করা হয়েছে, হলো host.recorder-এর মাধ্যমে ডিসপ্লে ক্যাপচার - ব্যবহারকারী ব্রাউজার-নেটিভ UI-তে একটি স্ক্রিন/উইন্ডো/ট্যাব বেছে নেন; capture থেকে আলাদা, যা টুল নিজে নাম দেওয়া একটি URL রাস্টারাইজ করে।)

একই টুল ব্রাউজার, Tauri এবং হেডলেস CLI-তে চলে কারণ প্রতিটি শেল এই ইন্টারফেস ইমপ্লিমেন্ট করে - টুলটি কখনো জানে না এটি কোনটিতে আছে।

ব্রিজটি সংস্করণযুক্ত। মেথড যোগ করা একটি মাইনর সংস্করণ। সিগনেচার সরানো বা পরিবর্তন করা একটি মেজর সংস্করণ বাম্প। যখন v2 শিপ হবে, v1 কাজ করা চালিয়ে যেতে হবে।

4. অ্যাসেট আইডি চিরকালীন

suse/logo/primary একটি চুক্তি। একবার প্রকাশিত হলে:

এটি সংরক্ষিত টুল স্টেট এবং URL-শেয়ারড লিংককে বছরের পর বছর টেকসই করে তোলে।

5. URL মোড প্রথম শ্রেণির

প্রতিটি ইনপুট অবশ্যই একটি URL প্যারামিটার হিসেবে প্রকাশযোগ্য হতে হবে:

lolly.tools/#/tool/qr-code?url=https://suse.com&ecl=H

সেই লিংকটি একাই, এতে আর কিছু নেই, সেটাই সম্পূর্ণ অ্যাসেট signed by Lollyvector SVG৫৫ paths~2.6k nodes৩৮ groups৬০ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিনসেই লিংকটি একাই, এতে আর কিছু নেই, সেটাই সম্পূর্ণ অ্যাসেট signed by Lollyvector SVG৫৫ paths~2.6k nodes৩৮ groups৬১ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিন

CLI মোড হলো ভিন্ন ট্রান্সপোর্টে URL মোড - CLI শেল argv থেকে একটি URL-স্টেট অবজেক্ট তৈরি করে এবং একই ইঞ্জিন পাইপলাইন চালায়। একটি মাত্র রেন্ডার পাথ রয়েছে। CLI GUI থেকে বিচ্যুত হতে পারে না কারণ এটি একটি আলাদা ইমপ্লিমেন্টেশন নয়।

url-mode.ts রাউন্ড-ট্রিপ (পার্স এবং সিরিয়ালাইজ) হ্যান্ডেল করে। একটি সেট রিজার্ভড প্যারাম কখনো ইনপুট হিসেবে টুলে ফরওয়ার্ড করা হয় না: আউটপুট কন্ট্রোল (format, export, copy, filename, width/w, height/h, unit, dpi), প্রিন্ট ও প্রোভেন্যান্স ডায়াল (bleed, marks, profile, password, c2pa, imprint, durable, meta, hdr, depth, cuts) এবং স্টেট ক্যারিয়ার (template, z - "Shortest link" প্যাকড টোকেন - এবং zx, একই কিন্তু পাসওয়ার্ডের অধীনে এনক্রিপ্টেড)। engine/src/url-mode.ts-এর RESERVED সেটটি হলো কর্তৃপক্ষ এবং একটি টেস্ট দ্বারা পিন করা; URL Mode এগুলির প্রতিটি নথিভুক্ত করে, এখানে তালিকাভুক্ত না হওয়া কয়েকটিসহ। URL মোডে অ্যাসেট ইনপুটগুলি তাদের id দ্বারা সিরিয়ালাইজ করা হয়; রানটাইম হাইড্রেশনের আগে host.assets.get()-এর মাধ্যমে সেগুলি রেজলভ করে। width/height হলো unit-এ মান (ডিফল্ট px, এছাড়াও mm/cm/in/pt/pc); একটি ফিজিক্যাল ইউনিটের সাথে dpi রাস্টার রেজোলিউশন সেট করে। এগুলি ক্যানভাস ডকুমেন্টের আকার সেট করে এবং এক্সপোর্ট ডাইমেনশন প্যানেল প্রি-ফিল করে।

যেহেতু প্রতিটি ইনপুট লিংকে ভ্রমণ করে, একটি প্যারামিটার পরিবর্তন মানে একটি ভিন্ন সম্পূর্ণ অ্যাসেট। এই পুরো প্যালেটটি একটি সিড কালার, একটি হারমনি এবং একটি স্টেপ কাউন্ট:

নয়টি ধাপ চারটি রঙের ছটায়, সবই লিংকে বহন করা একটিমাত্র বীজ রং থেকে জাত signed by Lollyvector SVG১০ groups২৫ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিননয়টি ধাপ চারটি রঙের ছটায়, সবই লিংকে বহন করা একটিমাত্র বীজ রং থেকে জাত signed by Lollyvector SVG১০ groups২৫ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিন

৬. স্টোরেজ ব্রিজের মধ্য দিয়ে যায়, সরাসরি নয়

ওয়েব শেল: IndexedDB। Tauri: ফাইলসিস্টেম। CLI: ইন-মেমোরি। টুলগুলো শুধু host.state.save(slot, data) আর host.state.load(slot) দেখতে পায়। localStorage ব্যবহার হয় না - এটা খুব ছোট আর ব্লব ধরে রাখতে পারে না।

ব্যবহারকারীরা প্রতিটি টুলে একাধিক নাম দেওয়া এডিট স্লট সেভ করতে পারেন এবং পরে প্রতিটি সেশনে ফিরে আসতে পারেন। অ্যাকাউন্ট তৈরির দরকার নেই; স্টেট প্রতি-ডিভাইস ভিত্তিক। যেহেতু ব্রিজই একমাত্র সংযোগ বিন্দু, তাই সেই প্রতি-ডিভাইস স্টেট পোর্টেবলও বটে: shells/web/src/data-transfer.ts host.profile/host.state/host.assets দিয়ে সবকিছু ফিরিয়ে পড়ে একটাই lolly-backup zip-এ নেয়, যা অন্য যেকোনো ইনস্টলে ইম্পোর্ট করা যায় - 'নতুন ডিভাইসে যাওয়া'-র অফলাইন সমাধান, যাতে সার্ভারের দরকার নেই (সম্পূর্ণ স্পেক: docs/data-transfer.md)। মাল্টি-ডিভাইস সিঙ্ক এর উপরেই আগে থেকে চলছে, একই বান্ডল সেই স্টোরেজে পাঠিয়ে যা ব্যক্তি বেছে নেন (docs/sync.md)।

৭. Maturity ট্যাগ বলে দেয় একটা টুল আসলে কী

প্রতিটি টুল তার ম্যানিফেস্টে status: official | community | experimental ঘোষণা করে। গ্যালারি স্ট্যাটাস অনুযায়ী সাজায়। এক্সপেরিমেন্টাল টুল স্বয়ংক্রিয়ভাবে তাদের এক্সপোর্টে ওয়াটারমার্ক করে - ওয়াটারমার্কটি host.export.render প্রয়োগ করে, টুল নয়, তাই কোনো নন-অফিসিয়াল টুল অথর সেটা বাদ দিতে পারেন না।

এটি একটি কাঠামোগত উত্তর সেই ধারণাগত ঝুঁকির যে গ্যালারির প্রতিটি টুল একই গুরুত্ব বহন করে। একটি টিম ক্যাটালগের চারপাশে যে প্রক্রিয়াই রাখুক না কেন, তা এর উপরে যুক্ত হয়।

৮. টুল ইনপুট ম্যানিফেস্টের মাধ্যমে টাইপড, অ্যাসেট সহ

ইনপুটগুলো একটি type ঘোষণা করে: text, longtext, number, boolean, color, select, asset, date, time, datetime-local, url, blocks, vector, table এবং file। হোস্ট ম্যানিফেস্ট থেকে প্রতিটি টাইপের জন্য একটি জেনেরিক কন্ট্রোল রেন্ডার করে - টুলগুলো কোনো কন্ট্রোল কোড লেখে না। (ব্যবহারকারীর প্রোফাইল থেকে প্রি-ফিল করা কোনো টাইপ নয় - যেকোনো ইনপুট bindToProfile বহন করতে পারে।) তিনটি বাকিদের চেয়ে বেশি গুরুত্ব বহন করে:

৯. টেমপ্লেট লজিক-হীন (Handlebars, EJS নয়)

EJS-এর বদলে Handlebars ইচ্ছাকৃতভাবে বেছে নেওয়া হয়েছে:

লজিক থাকে hooks.js-এ, যেখানে তা স্পষ্ট ও পর্যালোচনাযোগ্য। উপলব্ধ Handlebars হেল্পার: {{default}}, {{upper}}, {{lower}}, {{eq}}, {{markdown}}, {{asset ref}}, {{asset ref "property"}} (এবং সহোদর .ics/.vcf/.csv টেমপ্লেটে ব্যবহৃত ডেটা-ফরম্যাট হেল্পার icsStamp/rfcText/csvCell)।

১০. টুল টুল কম্পোজ করে

একটি টুল অন্য একটি টুলের রেন্ডার এমবেড করতে পারে টুল-থেকে-টুল ইমপোর্ট ছাড়াই - কম্পোজিশন এঞ্জিন দ্বারা রিজলভড হয়, কখনো টুল কোড দ্বারা নয়। এর দুটি পৃষ্ঠতল আছে:

যেকোনো টুলের রেন্ডার কম্পোজ করুন: একটি SVG চাইল্ড সত্যিকারের ভেক্টর থেকে যায় যখন প্যারেন্ট SVG বা PDF-এ এক্সপোর্ট করে এবং PNG-এর জন্য নিখুঁতভাবে র‍্যাস্টারাইজ হয়; PNG/JPG/WEBP চাইল্ড ছবি হিসেবে এমবেড হয়। compose ক্যাপাবিলিটি প্রয়োজন। কম্পোজড চাইল্ড হলো মধ্যবর্তী উপাদান - কখনো ওয়াটারমার্কড বা প্রোভেন্যান্স-স্ট্যাম্পড নয় - এবং কম্পোজিশন সুন্দরভাবে ডিগ্রেড করে: যে শেল কোনো চাইল্ড রেন্ডার করতে পারে না, সে শুধু সেই স্লট বাদ দেয় আর প্যারেন্ট তবুও রেন্ডার হয়।


যা আমরা স্পষ্টভাবে না করা বেছে নিয়েছি


একটি রেন্ডারের জীবনচক্র

একজন ব্যবহারকারী lolly.tools/#/tool/qr-code?url=https://suse.com&ecl=H খোলেন:

  1. বুট। ওয়েব শেল IndexedDB খোলে, ক্যাপাবিলিটি ব্রিজ তৈরি করে, টুল এবং অ্যাসেট ক্যাটালগ সিঙ্ক করে (অথবা অফলাইন থাকলে ক্যাশ থেকে লোড করে)।
  2. রুট। URL হ্যাশ → tool ভিউ, qr-code এবং URL প্যারামিটার এক্সট্র্যাক্ট করা সহ।
  3. লোড। loadTool('qr-code', fetchFile) tool.json ফেচ করে, JSON স্কিমার বিপরীতে ভ্যালিডেট করে, template.html, styles.css এবং hooks.js সোর্স ফেচ করে।
  4. URL স্টেট পার্স করুন। parseUrlState URL প্যারামিটারগুলোকে ইনিশিয়াল ইনপুট ভ্যালুতে রূপান্তর করে। অ্যাসেট রেফারেন্স (?logo=suse/logo/primary) হালকা { id, _unresolved: true } অবজেক্ট হিসেবে পার্স করা হয়।
  5. রানটাইম। createRuntime(tool, host, initialValues) ইনপুট মডেল তৈরি করে (প্রোফাইল ডেটা, ডিফল্ট এবং ইনিশিয়াল ভ্যালু মার্জ করে), host.assets.get()-এর মাধ্যমে অ্যাসেট রেফারেন্স রেজলভ করে, হুক লোড করে (ক্লোজার-স্কোপড host, স্যান্ডবক্সড নয়), hooks.onInit কল করে।
  6. রেন্ডার। শেল রানটাইমে সাবস্ক্রাইব করে; প্রতিটি স্টেট পরিবর্তনে এটি { model, hydrated } পায়। এটি মডেল থেকে ইনপুট কন্ট্রোল রেন্ডার করে এবং হাইড্রেটেড টেমপ্লেট HTML #tool-canvas-এ লেখে।
  7. ইন্টারঅ্যাক্ট। ব্যবহারকারী একটি ইনপুটে টাইপ করেন → runtime.setInput(id, value) → কনস্ট্রেইন্ট প্রয়োগ হয় → hooks.onInput কল হয় → পুনরায় হাইড্রেট → পুনরায় রেন্ডার। ক্যানভাস লাইভ আপডেট হয়।
  8. এক্সপোর্ট। ব্যবহারকারী Download(PNG)-এ ক্লিক করেন → runtime.export(canvasNode, 'png') → host.export.render (dom-to-image-more দিয়ে র‍্যাস্টারাইজ করে; SVG/PDF ডেডিকেটেড DOM-ওয়াকিং ভেক্টরাইজারের মধ্য দিয়ে যায়) → ব্লব → host.export.download। একটি টুল যে ফরম্যাট রেঞ্জ বেছে নিতে পারে তা বিস্তৃত, এবং schemas/tool.schema.json-এর render.formats enum হল তার একমাত্র কর্তৃপক্ষ - র‍্যাস্টার এবং ফ্লোট র‍্যাস্টার, ভেক্টর এবং কাট ফাইল, প্রিন্ট/CMYK, মোশন, এডিটেবল ডকুমেন্ট (pptx, docx, odt), প্যালেট এবং ডেটা/টেক্সট আউটপুট, অডিও এবং ফন্ট ফাইল। URL Mode প্রতিটি id এবং তা কী প্রোডিউস করে তার নাম দেয়। অডিও সেই enum-এ অন্য যেকোনো কিছুর মতোই আছে (wav, mp3, m4a, opus, অডিওগ্রাম এবং রেকর্ডিং টুলগুলো দ্বারা ঘোষিত); আলাদাভাবে, একটি রেকর্ডিং টুলের render.capture মোড host.recorder চালায়, যার টেক ব্রাউজার যে কন্টেইনারে রেকর্ড করেছে তাতে একটি সমাপ্ত Blob হিসেবে আসে। (যেসব টুল render.export: false সেট করে - যেমন Color Palette, Countdown Timer, Strip Hidden Data, Text, Compress PDF - ডাউনলোড/ফরম্যাট/ডাইমেনশন কন্ট্রোল লুকায়।) ফিজিক্যাল ইউনিট এখানে প্রতি ফরম্যাটে রূপান্তরিত হয় (PDF → প্রকৃত পেজ পয়েন্ট, র‍্যাস্টার → DPI-তে পিক্সেল একটি pHYs চাংক সহ)। অথরশিপ/প্রোভেন্যান্স মেটাডেটা (অথর, টুল, সোর্স - engine/src/metadata.ts দ্বারা নির্মিত) প্রতি ফরম্যাটে এমবেড করা হয়: PNG iTXt, JPEG EXIF, PDF info dict, SVG <metadata>, GIF কমেন্ট। এক্সপেরিমেন্টাল টুলে হোস্ট দ্বারা একটি ওয়াটারমার্ক ঢোকানো হয়, টুল দ্বারা নয়।

এক্সপোর্ট প্যানেল যা ?options খোলে: ফাইলনেম ও ফরম্যাট জোড়া, আউটপুট সাইজ এবং যে কন্ট্রোলগুলো ফাইল লেখে signed by Lollyvector SVG৭৭ paths~6.0k nodes৮৭ groups৩ images৮৮ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিনএক্সপোর্ট প্যানেল যা ?options খোলে: ফাইলনেম ও ফরম্যাট জোড়া, আউটপুট সাইজ এবং যে কন্ট্রোলগুলো ফাইল লেখে signed by Lollyvector SVG৭৭ paths~6.0k nodes৮৭ groups৩ images৮৮ KBনিজেই যাচাই করুনস্বাক্ষরিত ফাইলটি নিন

একই জীবনচক্র Tauri-তে। একই জীবনচক্র CLI-তে - jsdom হেডলেস DOM সরবরাহ করে; আউটপুট একটি ফাইলে বা stdout-এ যায়।


ওপেন-সোর্স অবস্থা

কোড MPL-2.0। engine/, shells/, services/, schemas/ এবং docs/*.ts MPL-2.0-এর অধীনে ওপেন সোর্স - ব্র্যান্ড টুলিংয়ের জন্য একটি ভেন্ডর-নিউট্রাল স্ক্যাফোল্ডিং প্ল্যাটফর্ম, সবকিছু একটি পাবলিক রিপোজিটরিতে, lolly-tools/lolly।

টুল কনটেন্ট ব্র্যান্ড প্যাক হিসেবে শিপ করা হয়, প্রতিটির নিজস্ব শর্তাবলী সহ (প্যাকের NOTICE.md দেখুন)। community/ এই রিপোজিটরির একটি ডিরেক্টরি এবং এর ব্র্যান্ড-অ্যাগনস্টিক টুলগুলোও MPL-2.0। brands/suse/ হল প্রাইভেট suse-lolly প্যাক, একমাত্র সাবমডিউল: SUSE টুল এবং SUSE ক্যাটালগ, SUSE-এর মালিকানাধীন, এর লাইসেন্সপ্রাপ্ত PremiumBeat মিউজিক সহ। brands/lolly-start/ হল খালি স্টার্টার ব্র্যান্ড যার মালিক এই রিপোজিটরি। ফন্ট একটি প্যাকের ভেতরে SIL Open Font License 1.1-এর অধীনে শিপ করা হয় - SUSE প্যাকে SUSE এবং SUSE Mono টাইপফেস রয়েছে।

কোনো রিপো-রুট tools/ বা catalog/ ডিরেক্টরি নেই। packages/node-shell/src/content-roots.ts রিড টাইমে profiles.json থেকে "টুল <id> কোথায় থাকে" এবং "ক্যাটালগ কোথায়" এর উত্তর দেয়, তাই একটি প্রোফাইল হল প্রতি-প্রসেস উত্তর এবং আগে থেকে কোনো ট্রি অ্যাসেম্বল করার প্রয়োজন হয় না। একটি প্রকৃত tools/ + catalog/ জোড়া কেবল একটি বিল্ড আউটপুটে লেখা হয় - dist/, একটি RPM পেলোড, একটি কন্টেইনার ইমেজ - কারণ একটি ব্রাউজার সেই দুটি পাথ HTTP-এর মাধ্যমে ফেচ করে।

বিভাজনটি প্রয়োগ করা হয় - engine/ থেকে টুল কন্টেন্টে কোনো cross-import নেই - যাতে প্ল্যাটফর্ম/কন্টেন্ট সীমানা পরিষ্কার থাকে।


এঞ্জিন যেখানে শেষ হয় আর হোস্ট যেখানে শুরু

যদি আপনি এটাকে বিশুদ্ধ ডেটা + Handlebars-এ বর্ণনা করতে পারেন → এঞ্জিন। যদি এটা DOM, ফাইলসিস্টেম, নেটওয়ার্ক বা কোনো ব্রাউজার/OS API স্পর্শ করে → হোস্ট।

সীমারেখাটি ইচ্ছাকৃতভাবে তীক্ষ্ণ। এঞ্জিন হলো ওপেন-সোর্স অংশ। SUSE, নির্দিষ্ট প্ল্যাটফর্ম বা রানটাইম পরিবেশ সম্পর্কে জ্ঞাত সবকিছু এর বাইরে থাকে।

বিস্তারিত পরবর্তী স্তরের জন্য, engine/README.md প্রতিটি এঞ্জিন মডিউল এবং তা কীসের জন্য দায়ী তা গণনা করে, আর Threat Model & Trust Boundaries নথিভুক্ত করে যেখানে সেই একই সীমারেখা একটি ট্রাস্ট বাউন্ডারি হিসেবেও কাজ করে।