diff --git a/extension/test1.js b/extension/test1.js
new file mode 100644
index 0000000..50c17d2
--- /dev/null
+++ b/extension/test1.js
@@ -0,0 +1,627 @@
+(function () {
+ class SPMPackageBrowser {
+ getInfo() {
+ return {
+ id: 'SPMPackageBrowser',
+ name: 'SPM',
+ color1: '#5B7B97',
+ color2: '#8AA1B8',
+ blocks: [
+ { opcode: 'openBrowser', blockType: Scratch.BlockType.COMMAND, text: '打开SPM包浏览器' }
+ ]
+ };
+ }
+
+ openBrowser() {
+ if (document.getElementById('SPM-browser-window')) {
+ document.getElementById('SPM-browser-window').style.display = 'flex';
+ return;
+ }
+
+ // Material Symbols(替换 Font Awesome)
+ if (!document.getElementById('SPM-material-icons')) {
+ const mi = document.createElement('link');
+ mi.id = 'SPM-material-icons';
+ mi.rel = 'stylesheet';
+ mi.href = 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-25..200';
+ document.head.appendChild(mi);
+ }
+
+ // Tailwind 仍然保留(兼容原有样式系统)
+ if (!document.getElementById('SPM-tailwind')) {
+ const tw = document.createElement('script');
+ tw.id = 'SPM-tailwind';
+ tw.src = 'https://cdn.tailwindcss.com';
+ document.head.appendChild(tw);
+ }
+
+ const win = document.createElement('div');
+ win.id = 'SPM-browser-window';
+ win.style.cssText = `
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ width: 920px;
+ height: 620px;
+ background: #F8FAFC;
+ border-radius: 28px;
+ border: 1px solid #E2E8F0;
+ box-shadow: 0 25px 50px -12px rgb(91 123 151 / 0.25);
+ z-index: 999999;
+ display: flex;
+ flex-direction: column;
+ overflow: hidden;
+ font-family: 'Roboto', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
+ color: #334155;
+ `;
+
+ // Material Design 3 风格完整 UI
+ win.innerHTML = `
+
+
+
+
package_2
+
+
SPM Store
+
Scratch Package Manager
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ arrow_drop_down
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ drag_handle
+
+ `;
+
+ document.body.appendChild(win);
+
+ // 绑定全局函数
+ window.SPMLoadPackages = () => this.loadPackages();
+ window.SPMDirectView = () => this.directViewPackage();
+ window.SPMToggleToken = () => this.toggleTokenVisibility();
+ window.SPMShowVersions = (type, name, repository) => this.showPackageVersions(type, name, repository);
+ window.SPMLoadToEditorForVersion = (owner, type, name, version) => this.loadVersionToEditor(owner, type, name, version);
+
+ // Material 拖拽 & 触控支持
+ this.makeDraggable(win, win.querySelector('.spm-appbar'));
+ this.makeResizable(win);
+
+ setTimeout(() => this.loadPackages(), 150);
+ }
+
+ makeDraggable(el, header) {
+ let posX = 0, posY = 0, startX = 0, startY = 0;
+
+ const startDrag = (clientX, clientY) => {
+ startX = clientX; startY = clientY;
+ posX = el.offsetLeft; posY = el.offsetTop;
+ el.style.transform = 'none';
+ el.style.boxShadow = '0 30px 60px -15px rgb(91 123 151)';
+ };
+
+ const moveDrag = (clientX, clientY) => {
+ el.style.left = (posX + clientX - startX) + 'px';
+ el.style.top = (posY + clientY - startY) + 'px';
+ };
+
+ const endDrag = () => {
+ el.style.boxShadow = '0 25px 50px -12px rgb(91 123 151 / 0.25)';
+ };
+
+ // 鼠标拖拽
+ header.addEventListener('mousedown', e => {
+ if (e.target.closest('button')) return;
+ startDrag(e.clientX, e.clientY);
+ const onMove = ev => moveDrag(ev.clientX, ev.clientY);
+ const onUp = () => { endDrag(); document.removeEventListener('mousemove', onMove); document.removeEventListener('mouseup', onUp); };
+ document.addEventListener('mousemove', onMove);
+ document.addEventListener('mouseup', onUp);
+ });
+
+ // 触控拖拽(手机完美适配)
+ header.addEventListener('touchstart', e => {
+ if (e.target.closest('button')) return;
+ const touch = e.touches[0];
+ startDrag(touch.clientX, touch.clientY);
+ const onMove = ev => {
+ const t = ev.touches[0];
+ moveDrag(t.clientX, t.clientY);
+ };
+ const onEnd = () => { endDrag(); document.removeEventListener('touchmove', onMove); document.removeEventListener('touchend', onEnd); };
+ document.addEventListener('touchmove', onMove, { passive: false });
+ document.addEventListener('touchend', onEnd);
+ }, { passive: false });
+ }
+
+ makeResizable(el) {
+ const handle = document.getElementById('resize-handle');
+ let startX, startY, startWidth, startHeight;
+
+ const startResize = (clientX, clientY) => {
+ startX = clientX; startY = clientY;
+ startWidth = parseInt(getComputedStyle(el).width);
+ startHeight = parseInt(getComputedStyle(el).height);
+ };
+
+ const doResize = (clientX, clientY) => {
+ let newW = Math.max(420, startWidth + (clientX - startX));
+ let newH = Math.max(380, startHeight + (clientY - startY));
+ el.style.width = newW + 'px';
+ el.style.height = newH + 'px';
+ };
+
+ // 鼠标
+ handle.addEventListener('mousedown', e => {
+ e.stopImmediatePropagation();
+ startResize(e.clientX, e.clientY);
+ const onMove = ev => doResize(ev.clientX, ev.clientY);
+ const onUp = () => {
+ document.removeEventListener('mousemove', onMove);
+ document.removeEventListener('mouseup', onUp);
+ };
+ document.addEventListener('mousemove', onMove);
+ document.addEventListener('mouseup', onUp);
+ });
+
+ // 触控
+ handle.addEventListener('touchstart', e => {
+ e.stopImmediatePropagation();
+ const touch = e.touches[0];
+ startResize(touch.clientX, touch.clientY);
+ const onMove = ev => {
+ const t = ev.touches[0];
+ doResize(t.clientX, t.clientY);
+ };
+ const onEnd = () => {
+ document.removeEventListener('touchmove', onMove);
+ document.removeEventListener('touchend', onEnd);
+ };
+ document.addEventListener('touchmove', onMove, { passive: false });
+ document.addEventListener('touchend', onEnd);
+ }, { passive: false });
+ }
+
+ toggleTokenVisibility() {
+ const inp = document.getElementById('token-input');
+ const eye = document.getElementById('token-eye');
+ if (inp.type === 'password') {
+ inp.type = 'text';
+ eye.textContent = 'visibility_off';
+ } else {
+ inp.type = 'password';
+ eye.textContent = 'visibility';
+ }
+ }
+
+ getToken() {
+ return document.getElementById('token-input').value.trim();
+ }
+
+ async fetchWithAuth(url) {
+ const token = this.getToken();
+ const headers = token ? { Authorization: `token ${token}` } : {};
+ const res = await fetch(url, { headers });
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
+ return res;
+ }
+
+ async loadPackages() {
+ const owner = (document.getElementById('owner-input').value || 'deep').trim();
+ const type = document.getElementById('type-select').value;
+ const q = document.getElementById('search-input').value.trim();
+ const container = document.getElementById('packages-container');
+
+ container.innerHTML = `
+ `;
+
+ let apiUrl = `https://spm-proxy.vercel.app/api/fetch?apiBase=scdev&path=/api/v1/packages/${owner}`;
+ if (type || q) {
+ const params = new URLSearchParams();
+ if (type) params.append('type', type);
+ if (q) params.append('q', q);
+ params.append('limit', '80');
+ apiUrl += '?' + params.toString();
+ }
+
+ try {
+ const res = await this.fetchWithAuth(apiUrl);
+ let pkgs = await res.json();
+ if (!Array.isArray(pkgs)) pkgs = [pkgs];
+ this.renderPackages(pkgs);
+ } catch (e) {
+ container.innerHTML = `
+
+
error
+
${e.message}
+
请检查网络或令牌权限
+
`;
+ }
+ }
+
+ renderPackages(packages) {
+ const container = document.getElementById('packages-container');
+ let html = '';
+
+ packages.forEach(pkg => {
+ const t = pkg.type || 'generic';
+ const repo = pkg.repository ? pkg.repository.full_name : null;
+ const repoLink = repo
+ ? `📍 ${repo}`
+ : `未绑定仓库`;
+
+ html += `
+
+
+
+
${pkg.name}
+
+ ${t.toUpperCase()}
+ ${pkg.version || '—'}
+
+
+
inventory_2
+
+
+ ${repoLink}
+ chevron_right
+
+
`;
+ });
+
+ if (packages.length === 0) {
+ html = `
+
+
folder_open
+
没有找到包
+
尝试其他搜索条件
+
`;
+ }
+
+ container.innerHTML = html;
+ }
+
+ async directViewPackage() {
+ const val = document.getElementById('direct-input').value.trim();
+ if (!val) {
+ this.showToast('请输入 类型/包名', 'warning');
+ return;
+ }
+ const [type, name] = val.split('/').map(s => s.trim());
+ if (!type || !name) {
+ this.showToast('格式错误,应为:类型/包名', 'warning');
+ return;
+ }
+ this.showPackageVersions(type, name, null);
+ }
+
+ showToast(message, type = 'info') {
+ const toast = document.createElement('div');
+ const colors = {
+ info: 'bg-[#5B7B97]',
+ warning: 'bg-amber-500',
+ success: 'bg-emerald-500',
+ error: 'bg-red-500'
+ };
+ toast.style.cssText = `position:fixed;top:24px;right:24px;padding:16px 24px;border-radius:9999px;color:white;font-weight:500;box-shadow:0 10px 15px -3px rgb(0 0 0 / 0.2);transform:translateX(120%);transition:all 0.3s cubic-bezier(0.4,0,0.2,1);z-index:10000000;`;
+ toast.className = colors[type];
+ toast.textContent = message;
+ document.body.appendChild(toast);
+ setTimeout(() => toast.style.transform = 'translateX(0)', 10);
+ setTimeout(() => {
+ toast.style.transform = 'translateX(120%)';
+ setTimeout(() => toast.remove(), 300);
+ }, 2800);
+ }
+
+ async ensureMarkdownLibraries() {
+ if (window.SPMMarkdownReady) return;
+ await this.loadScript('https://cdn.jsdelivr.net/npm/marked@17.0.5/lib/marked.umd.min.js');
+ await this.loadScript('https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js');
+
+ const hlStyle = document.createElement('link');
+ hlStyle.rel = 'stylesheet';
+ hlStyle.href = 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github.min.css';
+ document.head.appendChild(hlStyle);
+ await this.loadScript('https://cdn.jsdelivr.net/npm/katex@0.16.44/dist/katex.min.js');
+ await this.loadScript('https://cdn.jsdelivr.net/npm/katex@0.16.44/dist/contrib/auto-render.min.js');
+ await this.loadScript('https://cdn.jsdelivr.net/npm/dompurify@3.3.3/dist/purify.min.js');
+ if (window.marked) {
+ marked.setOptions({
+ breaks: true,
+ gfm: true,
+ highlight: function(code, lang) {
+ if (window.hljs && hljs.getLanguage(lang)) {
+ return hljs.highlight(code, { language: lang }).value;
+ }
+ return window.hljs ? hljs.highlightAuto(code).value : code;
+ }
+ });
+ }
+ window.SPMMarkdownReady = true;
+ }
+
+ loadScript(src) {
+ return new Promise((resolve, reject) => {
+ const script = document.createElement('script');
+ script.src = src;
+ script.onload = resolve;
+ script.onerror = reject;
+ document.head.appendChild(script);
+ });
+ }
+
+ async loadRepoReadme(repoFullName) {
+ const section = document.getElementById('SPM-readme-section');
+ const contentEl = document.getElementById('SPM-readme-content');
+ if (!section || !contentEl) return;
+ section.classList.remove('hidden');
+ contentEl.innerHTML = `
+ `;
+
+ await this.ensureMarkdownLibraries();
+
+ try {
+ const repoUrl = `https://spm-proxy.vercel.app/api/fetch?apiBase=scdev&path=/api/v1/repos/${repoFullName}`;
+ const repoRes = await this.fetchWithAuth(repoUrl);
+ const repoInfo = await repoRes.json();
+ const defaultBranch = repoInfo.default_branch || 'main';
+ const readmeUrl = `https://spm-proxy.vercel.app/api/fetch?apiBase=scdev&path=/${repoFullName}/raw/${defaultBranch}/README.md`;
+ const readmeRes = await this.fetchWithAuth(readmeUrl);
+
+ if (readmeRes.ok) {
+ let mdText = await readmeRes.text();
+ let rawHtml = marked.parse(mdText);
+ let cleanHtml = DOMPurify.sanitize(rawHtml, { ADD_ATTR: ['target'] });
+ contentEl.innerHTML = cleanHtml;
+
+ if (window.hljs) {
+ document.querySelectorAll('#SPM-readme-content pre code').forEach(block => hljs.highlightElement(block));
+ }
+ if (window.renderMathInElement) {
+ renderMathInElement(contentEl, {
+ delimiters: [
+ {left: "$$", right: "$$", display: true},
+ {left: "$", right: "$", display: false}
+ ],
+ throwOnError: false
+ });
+ }
+ } else {
+ contentEl.innerHTML = `
+
+
description
+
该包暂无自述文件
+
`;
+ }
+ } catch (err) {
+ contentEl.innerHTML = `
+
+
error
+
加载描述失败
+
${err.message}
+
`;
+ }
+ }
+
+ async showPackageVersions(type, name, repoFullName) {
+ const owner = (document.getElementById('owner-input').value || 'deep').trim();
+ let modal = document.getElementById('SPM-modal');
+ if (!modal) {
+ modal = document.createElement('div');
+ modal.id = 'SPM-modal';
+ modal.style.cssText = `
+ position: fixed;
+ inset: 0;
+ background: rgba(15, 23, 42, 0.6);
+ z-index: 99999999;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ padding: 16px;
+ `;
+ document.body.appendChild(modal);
+ }
+
+ modal.innerHTML = `
+
+
+
+
package_2
+
+
${name}
+
+ ${type.toUpperCase()}
+ 所有者:${owner}
+
+
+
+
+
+
+
+
+
+ menu_book
+ 项目描述
+
+
+
+
+
+
+ `;
+
+ modal.addEventListener('click', e => {
+ if (e.target.id === 'SPM-modal') modal.remove();
+ });
+
+ if (repoFullName) {
+ this.loadRepoReadme(repoFullName);
+ }
+
+ try {
+ const url = `https://spm-proxy.vercel.app/api/fetch?apiBase=scdev&path=/api/v1/packages/${owner}/${type}/${name}`;
+ const res = await this.fetchWithAuth(url);
+ const versions = await res.json();
+
+ let versionsHTML = '';
+ if (versions && versions.length > 0) {
+ versionsHTML = versions.map(v => `
+
+
${v.version}
+
创建于
+
${new Date(v.created_at).toLocaleString('zh-CN')}
+
+
+ `).join('');
+ } else {
+ versionsHTML = `
+ `;
+ }
+ document.getElementById('versions-container').innerHTML = versionsHTML;
+ } catch (e) {
+ document.getElementById('modal-body').innerHTML += `
+
+
+
error
+
+
加载版本失败
+
${e.message}
+
+
+
`;
+ }
+ }
+
+ async loadVersionToEditor(owner, type, name, version) {
+ try {
+ const filesUrl = `https://spm-proxy.vercel.app/api/fetch?apiBase=scdev&path=/api/v1/packages/${owner}/${type}/${name}/${version}/files`;
+ const res = await this.fetchWithAuth(filesUrl);
+ const files = await res.json();
+ const jsFile = files.find(f => f.name.toLowerCase().endsWith('.js'));
+ if (!jsFile) {
+ this.showToast('此版本没有 .js 扩展文件', 'warning');
+ return;
+ }
+
+ const rawDownloadUrl = `https://scdev.top/api/packages/${owner}/${type}/${name}/${version}/${encodeURIComponent(jsFile.name)}`;
+ const proxyUrl = `https://spm-proxy.vercel.app/api/fetch?url=${encodeURIComponent(rawDownloadUrl)}`;
+
+ await Scratch.vm.extensionManager.loadExtensionURL(proxyUrl);
+ this.showToast(`✅ ${jsFile.name} 已成功加载到编辑器!`, 'success');
+
+ const modal = document.getElementById('SPM-modal');
+ if (modal) modal.remove();
+ } catch (e) {
+ console.error('加载扩展失败:', e);
+ this.showToast(`❌ 加载失败: ${e.message}`, 'error');
+ }
+ }
+ }
+
+ if (Scratch.extensions.unsandboxed) {
+ Scratch.extensions.register(new SPMPackageBrowser());
+ console.log('📦 SPM 包浏览器(Material UI + 手机触控适配)已加载!');
+ } else {
+ console.error('必须以 unsandboxed 方式加载此扩展!');
+ }
+})();
\ No newline at end of file
diff --git a/extensions.json b/extensions.json
index 03dfac0..d43c43b 100644
--- a/extensions.json
+++ b/extensions.json
@@ -1,1019 +1,1021 @@
-{
- "extensions": [
- {
- "slug": "kylin",
- "id": "kylin",
- "name": "kylin",
- "description": "Kylin is the first-ever obfuscator for Scratch (Turbowarp) that enables you to encrypt your project, preventing it from being stolen or hacked.",
- "descriptionTranslations": {
- "zh-cn": "Kylin 是业界第一个用于 Scratch (Turbowarp) 的混淆器,允许你 加密 你的项目,来避免它被盗或被破解。",
- "en": "Kylin is the first-ever obfuscator for Scratch (Turbowarp) that enables you to encrypt your project, preventing it from being stolen or hacked."
- },
- "image": "kylin.png",
- "by": [
- {
- "name": "FurryR",
- "link": "https://github.com/FurryR"
- }
- ],
- "docs": false
- },
- {
- "slug": "babylon3d",
- "id": "babylon3d",
- "name": "Babylon3D",
- "description": "Best scratch 3D engine.Based on babylonjs.",
- "image": "babylon3d.png",
- "by": [
- {
- "name": "PPN-design",
- "link": "https://github.com/DDguan2010"
- }
- ],
- "docs": false
- },
- {
- "slug": "tensorflow",
- "id": "tensorflow",
- "name": "TensorFlow",
- "description": "Scratch neural networks engine.Based on tensorflowjs.",
- "image": "tensorflow.png",
- "by": [
- {
- "name": "PPN-design",
- "link": "https://github.com/DDguan2010"
- }
- ],
- "docs": false
- },
- {
- "slug": "transformers",
- "id": "huggingfacetransformers",
- "name": "Hugging Face Transformers",
- "description": "Run Hugging Face Transformers.js models in TurboWarp with configurable tasks, devices, and dtypes.",
- "image": "transformers.svg",
- "by": [
- {
- "name": "0.2Studio"
- }
- ],
- "docs": false
- },
- {
- "slug": "spinepro",
- "id": "spinePro",
- "name": "SpinePro",
- "description": "Use Spine skeletal animation in Scratch projects.",
- "image": "spinepro.svg",
- "by": [
- {
- "name": "PPN-design",
- "link": "https://github.com/DDguan2010"
- }
- ],
- "docs": false
- },
- {
- "slug": "ShangCloud",
- "id": "ShangCloud",
- "name": "ShangCloud",
- "description": "ShangCloud SDK for Scratch",
- "image": "shangcloud.png",
- "by": [
- {
- "name": "Yearnstudio",
- "link": "https://yearn.studio"
- }
- ],
- "docs": false
- },
- {
- "slug": "cybertoolbox",
- "id": "toolbox",
- "name": "Cybertoolbox",
- "description": "Put a bunch of things together!",
- "nameTranslations": {
- "zh-cn": "赛博猫猫的工具箱",
- "en": "Cyberexplorer's ToolBox"
- },
- "descriptionTranslations": {
- "zh-cn": "把一堆东西塞到了一起!",
- "en": "Put a bunch of things together!"
- },
- "image": "toolbox.png",
- "by": [
- {
- "name": "Cyberexplorer",
- "link": "https://cyberneko.cn/about"
- }
- ],
- "docs": false
- },
- {
- "slug": "QwQAI大模型",
- "id": "QwQAI大模型",
- "name": "QwQAI大模型",
- "description": "与通义千问的QwQ大模型及部分其他AI大模型交互。非官方扩展。",
- "nameTranslations": {
-
- },
- "descriptionTranslations": {
-
- },
- "image": "QwQAI大模型.jpg",
- "by": [
- {
- "name": "zekkei",
- "link": "https://vlink.cc/zekkei"
- }
- ],
- "docs": false,
- "samples": [
- "QwQAI大模型"
- ]
- },
- {
- "slug": "小金鱼的屏蔽词",
- "id": "小金鱼的屏蔽词",
- "name": "小金鱼的屏蔽词",
- "description": "小金鱼编写的屏蔽词扩展,可以应用于聊天软件中。",
- "nameTranslations": {
-
- },
- "descriptionTranslations": {
-
- },
- "image": "小金鱼的屏蔽词.png",
- "by": [
- {
- "name": "小金鱼",
- "link": "https://space.bilibili.com/702559170"
- }
- ],
- "docs": false,
- "samples": [
- "小金鱼的屏蔽词"
- ]
- },
- {
- "slug": "本地数据库",
- "id": "本地数据库",
- "name": "本地数据库",
- "description": "更好地将数据储存在本地,与[本地储存]扩展不冲突。(即可储存同名数据而不冲突)",
- "nameTranslations": {
-
- },
- "descriptionTranslations": {
-
- },
- "image": "本地数据库.jpg",
- "by": [
- {
- "name": "zekkei",
- "link": "https://vlink.cc/zekkei"
- }
- ],
- "docs": false,
- "samples": [
- "本地数据库"
- ]
- },
- {
- "slug": "kmsBlur",
- "id": "kmsBlur",
- "name": "𝙆𝙢𝙨 𝘽𝙡𝙪𝙧",
- "description": "使角色迅速模糊.",
- "image": "kmsBlur.png",
- "by": [
- {
- "name": "Kimos",
- "link": "https://space.bilibili.com/3493289367964051?spm_id_from=333.1007.0.0"
- }
- ],
- "docs": false,
- "samples": [
- "kmsBlur"
- ]
- },
- {
- "slug": "seacloud",
- "id": "seacloud",
- "name": "SeaCloud",
- "description": "Account management tools used for SCOS on 02Engine, simplifying",
- "nameTranslations": {
- "zh-cn": "海云",
- "en": "SeaCloud"
- },
- "descriptionTranslations": {
- "zh-cn": "在02Engine上为SCOS使用的账户管理工具,化繁为简",
- "en": "Account management tools used for SCOS on 02Engine, simplifying"
- },
- "image": "seacloud.png",
- "by": [
- {
- "name": "Deep-Sea",
- "link": "https://www.deep-sea.filegear-sg.me"
- }
- ],
- "docs": true
- },
- {
- "slug": "补间 Plus",
- "id": "kmsTween",
- "name": "补间 Plus",
- "description": "计算三次贝塞尔曲线的动画进度和时间,需要一定的Css基础。",
- "image": "补间 Plus.png",
- "by": [
- {
- "name": "孔明",
- "link": "https://space.bilibili.com/3493289367964051?spm_id_from=333.1007.0.0"
- }
- ],
- "docs": false,
- "samples": [
- "补间 Plus"
- ]
- },
- {
- "slug": "msj的工具箱",
- "id": "msj的工具箱",
- "name": "msj的工具箱",
- "description": "包含和网络、文件处理、文件下载和计算有关的实用工具,但还在测试阶段",
- "image": "msj的工具箱.png",
- "by": [
- {
- "name": "玩MC的Sc俊杰",
- "link": "https://b23.tv/F2Ut3hr"
- }
- ],
- "docs": false,
- "samples": [
- "msj的工具箱"
- ]
- },
- {
- "slug": "神经网络",
- "id": "神经网络",
- "name": "神经网络",
- "description": "一个简单易上手的神经网络扩展",
- "image": "神经网络.jpg",
- "by": [
- {
- "name": "瓜子",
- "link": "https://space.bilibili.com/3546667668212509?spm_id_from=333.337.0.0"
- }
- ],
- "docs": true
- },
- {
- "slug": "MoistsTechnology",
- "id": "MoistsTechnology",
- "name": "MoistsTechnology",
- "description": "一个由汐.mec开发的千奇百怪工具箱😈",
- "image": "MoistsTechnology.png",
- "by": [
- {
- "name": "汐.mec",
- "link": ""
- }
- ],
- "docs": false
- },
- {
- "slug": "texturefix",
- "id": "texturefix",
- "name": "纹理画布",
- "nameTranslations": {
- "en-us": "Texture Canvas"
- },
- "description": "在独立于画笔的画布上更便携地进行图像绘制",
- "image": "texturefix.png",
- "descriptionTranslations": {
- "en-us": "Better conveniently draw rect,images and textures on standalone canvas"
- },
- "by": [
- {
- "name": "Xbodw",
- "link": "https://space.bilibili.com/1552375363"
- }
- ],
- "docs": false
- },
- {
- "slug": "oaa",
- "id": "objectArray",
- "name": "数组和对象",
- "nameTranslations": {
- "en-us": "Object and Array"
- },
- "description": "更完整的JSON对象/数组功能",
- "image": "test.png",
- "descriptionTranslations": {
- "en-us": "Better JSON Features"
- },
- "by": [
- {
- "name": "Xbodw",
- "link": "https://space.bilibili.com/1552375363"
- }
- ],
- "docs": false
- },
- {
- "slug": "B小猫",
- "id": "B小猫",
- "name": "B小猫",
- "description": "通过哔哩哔哩公开接口获取海量信息,喵(=・ω・=)~",
- "image": "B小猫.png",
- "by": [
- {
- "name": "10000why",
- "link": "https://space.bilibili.com/541080936"
- }
- ],
- "docs": true
- },
- {
- "slug": "更好的浏览器扩展",
- "id": "更好的浏览器扩展",
- "name": "更好的浏览器扩展",
- "description": "让你的舞台可以显示更多的iframe",
- "image": "更好的浏览器扩展.jpg",
- "by": [
- {
- "name": "是zx34呀",
- "link": "https://space.bilibili.com/1196118574"
- }
- ],
- "docs": false
- },
- {
- "slug": "方向猫扩展",
- "id": "方向猫扩展",
- "name": "方向猫扩展",
- "description": "(●ˇ∀ˇ●)~ 显示上下左右移动端辅助按钮",
- "image": "方向猫扩展.png",
- "by": [
- {
- "name": "10000why",
- "link": "https://space.bilibili.com/541080936"
- }
- ],
- "docs": false
- },
- {
- "slug": "快速注册登录",
- "id": "快速注册登录",
- "name": "快速注册登录",
- "description": "一个显示注册登录界面的扩展,可以帮你省下一些制作登陆界面或注册界面的时间(当然前提是你对界面美观不在乎)",
- "image": "快速注册登录.jpg",
- "by": [
- {
- "name": "数字生命3179",
- "link": "http://3179582.wikidot.com/start"
- }
- ],
- "docs": true,
- "samples": [
- "快速注册登录"
- ]
- },
- {
- "slug": "安卓adb工具",
- "id": "安卓adb工具",
- "name": "安卓adb工具",
- "description": "本扩展可以在你的作品里添加一些安卓功能",
- "image": "安卓adb工具.jpg",
- "by": [
- {
- "name": "青柠工作室",
- "link": "https://space.bilibili.com/3493280679463823"
- }
- ],
- "docs": false
- },
- {
- "slug": "一万的框选框",
- "id": "一万的框选框",
- "name": "一万的框选框",
- "description": "实现在舞台上框选角色并经行侦测。",
- "image": "一万的框选框.png",
- "by": [
- {
- "name": "10000why",
- "link": "https://space.bilibili.com/541080936"
- }
- ],
- "docs": false
- },
- {
- "slug": "贝塞尔曲线",
- "id": "bezierCurve",
- "name": "贝塞尔曲线",
- "description": "生成贝塞尔曲线,支持控制点设置,计算曲线上任意点的坐标和切线角度。",
- "image": "bezier-curve.png",
- "by": [
- {
- "name": "空明2403",
- "link": "https://m.bilibili.com/space/3493092640426109?spm_id_from=333.33.0.0"
- }
- ],
- "docs": false,
- "samples": [
- "bezierCurveExample"
- ],
- "version": "2.1.0"
- },
- {
- "slug": "更好的询问框",
- "id": "更好的询问框",
- "name": "更好的询问框",
- "description": "一个更加美观的询问框",
- "image": "更好的询问框.png",
- "by": [
- {
- "name": "瓜子",
- "link": "https://space.bilibili.com/3546667668212509?spm_id_from=333.337.0.0"
- }
- ],
- "docs": false
- },
- {
- "slug": "wrapper.global",
- "id": "extensionWrapper",
- "name": "Extension Wrapper",
- "description": "在Turbowarp中加载CCW扩展的前置扩展",
- "nameTranslations": {
- "en": "Extension Wrapper",
- "zh-cn": "扩展适配器"
- },
- "descriptionTranslations": {
- "en": "A bootstrap extension for CCW extensions loader in Turbowarp",
- "zh-cn": "在Turbowarp中加载CCW扩展的前置扩展"
- },
- "image": "ccw.svg",
- "by": [
- {
- "name": "Xbodwf",
- "link": "https://github.com/xbodwf"
- },
- {
- "name": "FurryR",
- "link": "https://github.com/FurryR"
- }
- ],
- "docs": false,
- "samples": [
- "ccwpolyfill"
- ]
- },
- {
- "slug": "textToURL",
- "id": "textToURL",
- "name": "文字转URL",
- "description": "将文字转换为可显示的URL",
- "nameTranslations": {
- "en": "Text to URL",
- "zh-cn": "文字转URL"
- },
- "descriptionTranslations": {
- "en": "Generate a URL that displays custom text in the browser, and parse the text from the generated URL",
- "zh-cn": "生成可在浏览器显示自定义文字的URL,并从生成的URL中解析文字"
- },
- "image": "textToURL.png",
- "by": [
- {
- "name": "Turboratch",
- "link": "https://space.bilibili.com/3546662593104166"
- }
- ],
- "docs": false,
- "samples": [
- "textToURL"
- ]
- },
- {
- "slug": "作品锁",
- "id": "projectLocking",
- "name": "作品锁",
- "description": "让你的项目更加安全。",
- "image": "projectLocking.png",
- "by": [
- {
- "name": "朱元翔",
- "link": "https://space.bilibili.com/3546902484224452?spm_id_from=333.1007.0.0"
- },
- {
- "name": "YL_YOLO",
- "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0"
- },
- {
- "name": "10000why",
- "link": "https://space.bilibili.com/541080936?spm_id_from=333.337.0.0"
- }
- ],
- "docs": false,
- "samples": [
- "作品锁示例作品"
- ],
- "version": "1.0.0",
- "license": "AGPL 3.0"
- },
- {
- "slug": "3d-basicrt",
- "id": "3d-basicrt",
- "name": "3d-basicrt",
- "description": "喵,这是一个简单易上手的3D扩展,快来试试吧!",
- "image": "3d-basicrt.png",
- "by": [
- {
- "name": "果汁的梦",
- "link": "https://space.bilibili.com/3546884505340624?spm_id_from=333.788.0.0"
- }
- ],
- "docs": false
- },
- {
- "slug": "音频可视化扩展",
- "id": "音频可视化",
- "name": "音频可视化",
- "description": "让音频有了形状",
- "image": "音频可视化扩展.png",
- "by": [
- {
- "name": "YL_YOLO",
- "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0"
- }
- ],
- "docs": false,
- "samples": [
- "音频可视化示例作品"
- ]
- },
- {
- "slug": "GmyOS",
- "id": "GmyOS",
- "name": "GmyOS",
- "description": "GmyOS 是一个复古 DOS 风格的 Scratch 扩展,能打开可拖动终端窗口,支持命令行、虚拟文件系统和简易汇编指令。",
- "image": "GmyOS.png",
- "by": [
- {
- "name": "Gmy",
- "link": "https://space.bilibili.com/1004646811?spm_id_from=333.40164.0.0"
- }
- ],
- "docs": false
- },
- {
- "slug": "简_艺术字",
- "id": "简_艺术字",
- "name": "简_艺术字",
- "description": "简单的艺术字显示扩展",
- "image": "简_艺术字.png",
- "by": [
- {
- "name": "YL_YOLO",
- "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0"
- }
- ],
- "docs": false,
- "samples": [
- "简_艺术字"
- ]
- },
- {
- "slug": "移动端按键映射",
- "id": "移动端按键映射",
- "name": "移动端按键映射",
- "description": "Advanced touch blocks and joystick with key simulation (触屏块加摇杆并且可实现按键模拟)",
- "image": "移动端按键映射.png",
- "by": [
- {
- "name": "YL_YOLO",
- "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0"
- }
- ],
- "docs": false,
- "samples": [
- "移动端按键映射"
- ]
- },
- {
- "slug": "SF文件系统",
- "id": "SF文件系统",
- "name": "SF文件系统",
- "description": "让数据有了形状",
- "image": "SF文件系统.png",
- "by": [
- {
- "name": "Starfall Twilight",
- "link": "https://starfallstudio.cn"
- }
- ],
- "docs": false
- },
- {
- "slug": "简·HTML",
- "id": "简·HTML",
- "name": "简·HTML",
- "description": "一款强大的HTML构建拓展(建议与“内嵌框架”搭配使用)",
- "image": "简·HTML.png",
- "by": [
- {
- "name": "Starfall Twilight",
- "link": "https://starfallstudio.cn"
- }
- ],
- "docs": false
- },
- {
- "slug": "简易3D",
- "id": "简易3D",
- "name": "简易3D",
- "description": "轻松制作适用于GPU加速的3D项目",
- "image": "简易3D.png",
- "by": [
- {
- "name": "Starfall Twilight(汉化)",
- "link": "https://scratch.mit.edu/users/Vadik1/"
- },
- {
- "name": "Vadik1",
- "link": "https://starfallstudio.cn"
- }
- ],
- "docs": false,
- "samples": [
- "简易3D"
- ]
- },
- {
- "slug": "全局提示",
- "id": "全局提示",
- "name": "全局提示",
- "description": "信息全掌握",
- "image": "全局提示.png",
- "by": [
- {
- "name": "Starfall Twilight",
- "link": "https://starfallstudio.cn"
- }
- ],
- "docs": false
- },
- {
- "slug": "微CSV",
- "id": "微CSV",
- "name": "微CSV",
- "description": "轻表格 轻数据 轻管理",
- "image": "微CSV.png",
- "by": [
- {
- "name": "Starfall Twilight",
- "link": "https://starfallstudio.cn"
- }
- ],
- "docs": false
- },
- {
- "slug": "星级评分",
- "id": "星级评分",
- "name": "星级评分",
- "description": "快捷获取用户评价",
- "image": "星级评分.png",
- "by": [
- {
- "name": "Starfall Twilight",
- "link": "https://starfallstudio.cn"
- }
- ],
- "docs": false
- },
- {
- "slug": "字符串处理",
- "id": "字符串处理",
- "name": "字符串处理",
- "description": "一些快捷的字符串处理积木",
- "image": "字符串处理.png",
- "by": [
- {
- "name": "Starfall Twilight",
- "link": "https://starfallstudio.cn"
- }
- ],
- "docs": false
- },
- {
- "slug": "网页嗅探器",
- "id": "网页嗅探器",
- "name": "网页嗅探器",
- "description": "让你轻松获取到网页上的内容,只要是能获取到的,都能下!",
- "image": "网页嗅探器.png",
- "by": [
- {
- "name": "F_code",
- "link": "https://space.bilibili.com/3546722598914878"
- }
- ],
- "docs": false,
- "samples": [
- "网页嗅探器"
- ]
- },
- {
- "slug": "hermiteCurve",
- "id": "hermiteCurve",
- "name": "hermite曲线",
- "description": "保证定点定速度的自定义曲线。",
- "image": "hermiteCurve.png",
- "by": [
- {
- "name": "空明2403",
- "link": "https://m.bilibili.com/space/3493092640426109?spm_id_from=333.33.0.0"
- }
- ],
- "docs": false,
- "samples": [
- "hermiteCurveExample"
- ]
- },
- {
- "slug": "markdown",
- "id": "WitCatMarkDown",
- "name": "WitCat MarkDown",
- "description": "Render Markdown content with custom syntax, tables, code highlighting, and interactive triggers.",
- "nameTranslations": {
- "zh-cn": "白猫的markdown"
- },
- "descriptionTranslations": {
- "zh-cn": "渲染 Markdown 内容,支持自定义语法、表格、代码高亮和交互触发器。"
- },
- "image": "markdown.svg",
- "by": [
- {
- "name": "白猫",
- "link": "https://www.ccw.site/student/6173f57f48cf8f4796fc860e"
- },
- {
- "name": "yuan",
- "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
- }
- ],
- "docs": true,
- "samples": [
- "markdown"
- ]
- },
- {
- "slug": "拼音转文字",
- "id": "拼音转文字",
- "name": "拼音转文字",
- "description": "将拼音转换为汉字。",
- "image": "拼音转文字.png",
- "by": [
- {
- "name": "Uonsan",
- "link": "https://space.bilibili.com/3546882573862975"
- }
- ],
- "docs": false,
- "samples": [
- "拼音转文字"
- ]
- },
- {
- "slug": "github面板",
- "id": "github面板",
- "name": "github面板",
- "description": "github面板。",
- "image": "GitHub面板.jpg",
- "by": [
- {
- "name": "yuan",
- "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
- }
- ],
- "docs": true,
- "samples": [
- "GitHub面板"
- ]
- },
- {
- "slug": "让变量列表换行",
- "id": "让变量列表换行",
- "name": "让变量列表换行",
- "description": "让变量列表换行的工具",
- "image": "让变量列表换行.jpg",
- "by": [
- {
- "name": "yuan",
- "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
- }
- ],
- "docs": false
- },
- {
- "slug": "寻路",
- "id": "寻路",
- "name": "寻路",
- "description": "一个高性能的寻路扩展",
- "nameTranslations": {
- "zh-cn": "一个高性能的寻路扩展"
- },
- "descriptionTranslations": {
- "zh-cn": "一个高性能的寻路扩展"
- },
- "image": "寻路.svg",
- "by": [
- {
- "name": "Arkos(使兼容)",
- "link": "https://space.bilibili.com/446532545?spm_id_from=333.337.0.0"
- },
- {
- "name": "朱元翔",
- "link": "https://space.bilibili.com/3546902484224452?spm_id_from=333.1387.0.0"
- }
- ],
- "docs": false
- },
- {
- "slug": "musicplus",
- "id": "musicplus",
- "name": "音乐 +",
- "description": "升级版音乐扩展",
- "nameTranslations": {
- "zh-cn": "音乐 +",
- "en": "Music Plus"
- },
- "descriptionTranslations": {
- "zh-cn": "升级版音乐扩展",
- "en": "Music extension, but advanced!"
- },
- "image": "musicplus.png",
- "by": [
- {
- "name": "ChessBrainIsNotHuman",
- "link": "https://chessbrain.qzz.io/"
- }
- ],
- "docs": false
- },
- {
- "slug": "调试器",
- "id": "DebuggerExtensionTS",
- "name": "调试器",
- "description": "调试器",
- "nameTranslations": {
- "zh-cn": "调试器"
- },
- "descriptionTranslations": {
- "zh-cn": "调试器"
- },
- "image": "调试器.png",
- "by": [
- {
- "name": "TheShovle"
- },
- {
- "name": "yuan",
- "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
- }
- ],
- "scratchCompatible": false,
- "docs": false
- },
- {
- "slug": "panel",
- "id": "settingspanel",
- "name": "panel",
- "description": "panel",
- "nameTranslations": {
- "zh-cn": "panel"
- },
- "descriptionTranslations": {
- "zh-cn": "panel"
- },
- "image": "panel.svg",
- "by": [
- {
- "name": "yuan",
- "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
- }
- ],
- "scratchCompatible": false,
- "docs": false
- },
- {
- "slug": "mdui",
- "id": "mdui",
- "name": "mdui弹窗",
- "description": "A dialog and snackbar extension based on mdui for building interactive UI in projects.",
- "nameTranslations": {
- "zh-cn": "mdui弹窗",
- "en": "mdui Dialog"
- },
- "descriptionTranslations": {
- "zh-cn": "基于 mdui 的弹窗与消息提示扩展,可用于在作品中构建交互式界面。",
- "en": "A dialog and snackbar extension based on mdui for building interactive UI in projects."
- },
- "image": "mdui.jpeg",
- "by": [
- {
- "name": "不想上学"
- }
- ],
- "scratchCompatible": false,
- "docs": false
- },
- {
- "slug": "cbeg",
- "id": "cbeg",
- "name": "CB Extension Gallery",
- "description": "A lightweight tool to build Scratch extensions and open the CB Extension Gallery.",
- "nameTranslations": {
- "zh-cn": "CB Extension Gallery",
- "en": "CB Extension Gallery"
- },
- "descriptionTranslations": {
- "zh-cn": "一个轻量的 Scratch 扩展制作工具,并可直接打开 CB Extension Gallery。",
- "en": "A lightweight tool to build Scratch extensions and open the CB Extension Gallery."
- },
- "image": "cbeg.png",
- "by": [
- {
- "name": "ChessBrainIsNotHuman",
- "link": "https://chessbrain.qzz.io/"
- }
- ],
- "docs": false
- },
- {
- "slug": "feishu",
- "id": "feishu",
- "name": "飞书",
- "description": "✨更好的WebHook",
- "nameTranslations": {
- "zh-cn": "飞书",
- "en": "FlyBook"
- },
- "descriptionTranslations": {
- "zh-cn": "✨更好的WebHook",
- "en": "✨Better WebHook"
- },
- "image": "FlyBook.png",
- "by": [
- {
- "name": "Maxkore",
- "link": "https://github.com/Maxkore-Geek/"
- }
- ],
- "scratchCompatible": false,
- "docs": false,
- "samples": [
- "飞书示例"
- ],
- "version": "1.0.0",
- "license": "MIT"
- },
- {
- "slug": "backgroundremoverpanel",
- "id": "backgroundremoverpanel",
- "name": "去背景",
- "description": "去背景",
- "nameTranslations": {
- "zh-cn": "去背景"
- },
- "descriptionTranslations": {
- "zh-cn": "去背景"
- },
- "image": "backgroundremoverpanel.png",
- "by": [
- {
- "name": "yuan",
- "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
- }
- ],
- "docs": false
- },
- {
- "slug": "更好的画板",
- "id": "更好的画板",
- "name": "更好的画板",
- "description": "更好的画板",
- "nameTranslations": {
- "zh-cn": "更好的画板"
- },
- "descriptionTranslations": {
- "zh-cn": "更好的画板"
- },
- "image": "更好的画板.png",
- "by": [
- {
- "name": "yuan",
- "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
- }
- ],
- "docs": false
- }
- ]
-}
+{
+ "extensions": [
+ {
+ "slug": "kylin",
+ "id": "kylin",
+ "name": "kylin",
+ "description": "Kylin is the first-ever obfuscator for Scratch (Turbowarp) that enables you to encrypt your project, preventing it from being stolen or hacked.",
+ "descriptionTranslations": {
+ "zh-cn": "Kylin 是业界第一个用于 Scratch (Turbowarp) 的混淆器,允许你 加密 你的项目,来避免它被盗或被破解。",
+ "en": "Kylin is the first-ever obfuscator for Scratch (Turbowarp) that enables you to encrypt your project, preventing it from being stolen or hacked."
+ },
+ "image": "kylin.png",
+ "by": [
+ {
+ "name": "FurryR",
+ "link": "https://github.com/FurryR"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "babylon3d",
+ "id": "babylon3d",
+ "name": "Babylon3D",
+ "description": "Best scratch 3D engine.Based on babylonjs.",
+ "image": "babylon3d.png",
+ "by": [
+ {
+ "name": "PPN-design",
+ "link": "https://github.com/DDguan2010"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "tensorflow",
+ "id": "tensorflow",
+ "name": "TensorFlow",
+ "description": "Scratch neural networks engine.Based on tensorflowjs.",
+ "image": "tensorflow.png",
+ "by": [
+ {
+ "name": "PPN-design",
+ "link": "https://github.com/DDguan2010"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "transformers",
+ "id": "huggingfacetransformers",
+ "name": "Hugging Face Transformers",
+ "description": "Run Hugging Face Transformers.js models in TurboWarp with configurable tasks, devices, and dtypes.",
+ "image": "transformers.svg",
+ "by": [
+ {
+ "name": "0.2Studio"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "spinepro",
+ "id": "spinePro",
+ "name": "SpinePro",
+ "description": "Use Spine skeletal animation in Scratch projects.",
+ "image": "spinepro.svg",
+ "by": [
+ {
+ "name": "PPN-design",
+ "link": "https://github.com/DDguan2010"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "ShangCloud",
+ "id": "ShangCloud",
+ "name": "ShangCloud",
+ "description": "ShangCloud SDK for Scratch",
+ "image": "shangcloud.png",
+ "by": [
+ {
+ "name": "Yearnstudio",
+ "link": "https://yearn.studio"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "cybertoolbox",
+ "id": "toolbox",
+ "name": "Cybertoolbox",
+ "description": "Put a bunch of things together!",
+ "nameTranslations": {
+ "zh-cn": "赛博猫猫的工具箱",
+ "en": "Cyberexplorer's ToolBox"
+ },
+ "descriptionTranslations": {
+ "zh-cn": "把一堆东西塞到了一起!",
+ "en": "Put a bunch of things together!"
+ },
+ "image": "toolbox.png",
+ "by": [
+ {
+ "name": "Cyberexplorer",
+ "link": "https://cyberneko.cn/about"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "QwQAI大模型",
+ "id": "QwQAI大模型",
+ "name": "QwQAI大模型",
+ "description": "与通义千问的QwQ大模型及部分其他AI大模型交互。非官方扩展。",
+ "nameTranslations": {},
+ "descriptionTranslations": {},
+ "image": "QwQAI大模型.jpg",
+ "by": [
+ {
+ "name": "zekkei",
+ "link": "https://vlink.cc/zekkei"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "QwQAI大模型"
+ ]
+ },
+ {
+ "slug": "小金鱼的屏蔽词",
+ "id": "小金鱼的屏蔽词",
+ "name": "小金鱼的屏蔽词",
+ "description": "小金鱼编写的屏蔽词扩展,可以应用于聊天软件中。",
+ "nameTranslations": {},
+ "descriptionTranslations": {},
+ "image": "小金鱼的屏蔽词.png",
+ "by": [
+ {
+ "name": "小金鱼",
+ "link": "https://space.bilibili.com/702559170"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "小金鱼的屏蔽词"
+ ]
+ },
+ {
+ "slug": "本地数据库",
+ "id": "本地数据库",
+ "name": "本地数据库",
+ "description": "更好地将数据储存在本地,与[本地储存]扩展不冲突。(即可储存同名数据而不冲突)",
+ "nameTranslations": {},
+ "descriptionTranslations": {},
+ "image": "本地数据库.jpg",
+ "by": [
+ {
+ "name": "zekkei",
+ "link": "https://vlink.cc/zekkei"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "本地数据库"
+ ]
+ },
+ {
+ "slug": "kmsBlur",
+ "id": "kmsBlur",
+ "name": "𝙆𝙢𝙨 𝘽𝙡𝙪𝙧",
+ "description": "使角色迅速模糊.",
+ "image": "kmsBlur.png",
+ "by": [
+ {
+ "name": "Kimos",
+ "link": "https://space.bilibili.com/3493289367964051?spm_id_from=333.1007.0.0"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "kmsBlur"
+ ]
+ },
+ {
+ "slug": "seacloud",
+ "id": "seacloud",
+ "name": "SeaCloud",
+ "description": "Account management tools used for SCOS on 02Engine, simplifying",
+ "nameTranslations": {
+ "zh-cn": "海云",
+ "en": "SeaCloud"
+ },
+ "descriptionTranslations": {
+ "zh-cn": "在02Engine上为SCOS使用的账户管理工具,化繁为简",
+ "en": "Account management tools used for SCOS on 02Engine, simplifying"
+ },
+ "image": "seacloud.png",
+ "by": [
+ {
+ "name": "Deep-Sea",
+ "link": "https://www.deep-sea.filegear-sg.me"
+ }
+ ],
+ "docs": true
+ },
+ {
+ "slug": "补间 Plus",
+ "id": "kmsTween",
+ "name": "补间 Plus",
+ "description": "计算三次贝塞尔曲线的动画进度和时间,需要一定的Css基础。",
+ "image": "补间 Plus.png",
+ "by": [
+ {
+ "name": "孔明",
+ "link": "https://space.bilibili.com/3493289367964051?spm_id_from=333.1007.0.0"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "补间 Plus"
+ ]
+ },
+ {
+ "slug": "msj的工具箱",
+ "id": "msj的工具箱",
+ "name": "msj的工具箱",
+ "description": "包含和网络、文件处理、文件下载和计算有关的实用工具,但还在测试阶段",
+ "image": "msj的工具箱.png",
+ "by": [
+ {
+ "name": "玩MC的Sc俊杰",
+ "link": "https://b23.tv/F2Ut3hr"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "msj的工具箱"
+ ]
+ },
+ {
+ "slug": "神经网络",
+ "id": "神经网络",
+ "name": "神经网络",
+ "description": "一个简单易上手的神经网络扩展",
+ "image": "神经网络.jpg",
+ "by": [
+ {
+ "name": "瓜子",
+ "link": "https://space.bilibili.com/3546667668212509?spm_id_from=333.337.0.0"
+ }
+ ],
+ "docs": true
+ },
+ {
+ "slug": "MoistsTechnology",
+ "id": "MoistsTechnology",
+ "name": "MoistsTechnology",
+ "description": "一个由汐.mec开发的千奇百怪工具箱😈",
+ "image": "MoistsTechnology.png",
+ "by": [
+ {
+ "name": "汐.mec",
+ "link": ""
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "texturefix",
+ "id": "texturefix",
+ "name": "纹理画布",
+ "nameTranslations": {
+ "en-us": "Texture Canvas"
+ },
+ "description": "在独立于画笔的画布上更便携地进行图像绘制",
+ "image": "texturefix.png",
+ "descriptionTranslations": {
+ "en-us": "Better conveniently draw rect,images and textures on standalone canvas"
+ },
+ "by": [
+ {
+ "name": "Xbodw",
+ "link": "https://space.bilibili.com/1552375363"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "oaa",
+ "id": "objectArray",
+ "name": "数组和对象",
+ "nameTranslations": {
+ "en-us": "Object and Array"
+ },
+ "description": "更完整的JSON对象/数组功能",
+ "image": "test.png",
+ "descriptionTranslations": {
+ "en-us": "Better JSON Features"
+ },
+ "by": [
+ {
+ "name": "Xbodw",
+ "link": "https://space.bilibili.com/1552375363"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "B小猫",
+ "id": "B小猫",
+ "name": "B小猫",
+ "description": "通过哔哩哔哩公开接口获取海量信息,喵(=・ω・=)~",
+ "image": "B小猫.png",
+ "by": [
+ {
+ "name": "10000why",
+ "link": "https://space.bilibili.com/541080936"
+ }
+ ],
+ "docs": true
+ },
+ {
+ "slug": "更好的浏览器扩展",
+ "id": "更好的浏览器扩展",
+ "name": "更好的浏览器扩展",
+ "description": "让你的舞台可以显示更多的iframe",
+ "image": "更好的浏览器扩展.jpg",
+ "by": [
+ {
+ "name": "是zx34呀",
+ "link": "https://space.bilibili.com/1196118574"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "方向猫扩展",
+ "id": "方向猫扩展",
+ "name": "方向猫扩展",
+ "description": "(●ˇ∀ˇ●)~ 显示上下左右移动端辅助按钮",
+ "image": "方向猫扩展.png",
+ "by": [
+ {
+ "name": "10000why",
+ "link": "https://space.bilibili.com/541080936"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "快速注册登录",
+ "id": "快速注册登录",
+ "name": "快速注册登录",
+ "description": "一个显示注册登录界面的扩展,可以帮你省下一些制作登陆界面或注册界面的时间(当然前提是你对界面美观不在乎)",
+ "image": "快速注册登录.jpg",
+ "by": [
+ {
+ "name": "数字生命3179",
+ "link": "http://3179582.wikidot.com/start"
+ }
+ ],
+ "docs": true,
+ "samples": [
+ "快速注册登录"
+ ]
+ },
+ {
+ "slug": "安卓adb工具",
+ "id": "安卓adb工具",
+ "name": "安卓adb工具",
+ "description": "本扩展可以在你的作品里添加一些安卓功能",
+ "image": "安卓adb工具.jpg",
+ "by": [
+ {
+ "name": "青柠工作室",
+ "link": "https://space.bilibili.com/3493280679463823"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "一万的框选框",
+ "id": "一万的框选框",
+ "name": "一万的框选框",
+ "description": "实现在舞台上框选角色并经行侦测。",
+ "image": "一万的框选框.png",
+ "by": [
+ {
+ "name": "10000why",
+ "link": "https://space.bilibili.com/541080936"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "贝塞尔曲线",
+ "id": "bezierCurve",
+ "name": "贝塞尔曲线",
+ "description": "生成贝塞尔曲线,支持控制点设置,计算曲线上任意点的坐标和切线角度。",
+ "image": "bezier-curve.png",
+ "by": [
+ {
+ "name": "空明2403",
+ "link": "https://m.bilibili.com/space/3493092640426109?spm_id_from=333.33.0.0"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "bezierCurveExample"
+ ],
+ "version": "2.1.0"
+ },
+ {
+ "slug": "更好的询问框",
+ "id": "更好的询问框",
+ "name": "更好的询问框",
+ "description": "一个更加美观的询问框",
+ "image": "更好的询问框.png",
+ "by": [
+ {
+ "name": "瓜子",
+ "link": "https://space.bilibili.com/3546667668212509?spm_id_from=333.337.0.0"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "wrapper.global",
+ "id": "extensionWrapper",
+ "name": "Extension Wrapper",
+ "description": "在Turbowarp中加载CCW扩展的前置扩展",
+ "nameTranslations": {
+ "en": "Extension Wrapper",
+ "zh-cn": "扩展适配器"
+ },
+ "descriptionTranslations": {
+ "en": "A bootstrap extension for CCW extensions loader in Turbowarp",
+ "zh-cn": "在Turbowarp中加载CCW扩展的前置扩展"
+ },
+ "image": "ccw.svg",
+ "by": [
+ {
+ "name": "Xbodwf",
+ "link": "https://github.com/xbodwf"
+ },
+ {
+ "name": "FurryR",
+ "link": "https://github.com/FurryR"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "ccwpolyfill"
+ ]
+ },
+ {
+ "slug": "textToURL",
+ "id": "textToURL",
+ "name": "文字转URL",
+ "description": "将文字转换为可显示的URL",
+ "nameTranslations": {
+ "en": "Text to URL",
+ "zh-cn": "文字转URL"
+ },
+ "descriptionTranslations": {
+ "en": "Generate a URL that displays custom text in the browser, and parse the text from the generated URL",
+ "zh-cn": "生成可在浏览器显示自定义文字的URL,并从生成的URL中解析文字"
+ },
+ "image": "textToURL.png",
+ "by": [
+ {
+ "name": "Turboratch",
+ "link": "https://space.bilibili.com/3546662593104166"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "textToURL"
+ ]
+ },
+ {
+ "slug": "作品锁",
+ "id": "projectLocking",
+ "name": "作品锁",
+ "description": "让你的项目更加安全。",
+ "image": "projectLocking.png",
+ "by": [
+ {
+ "name": "朱元翔",
+ "link": "https://space.bilibili.com/3546902484224452?spm_id_from=333.1007.0.0"
+ },
+ {
+ "name": "YL_YOLO",
+ "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0"
+ },
+ {
+ "name": "10000why",
+ "link": "https://space.bilibili.com/541080936?spm_id_from=333.337.0.0"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "作品锁示例作品"
+ ],
+ "version": "1.0.0",
+ "license": "AGPL 3.0"
+ },
+ {
+ "slug": "3d-basicrt",
+ "id": "3d-basicrt",
+ "name": "3d-basicrt",
+ "description": "喵,这是一个简单易上手的3D扩展,快来试试吧!",
+ "image": "3d-basicrt.png",
+ "by": [
+ {
+ "name": "果汁的梦",
+ "link": "https://space.bilibili.com/3546884505340624?spm_id_from=333.788.0.0"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "音频可视化扩展",
+ "id": "音频可视化",
+ "name": "音频可视化",
+ "description": "让音频有了形状",
+ "image": "音频可视化扩展.png",
+ "by": [
+ {
+ "name": "YL_YOLO",
+ "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "音频可视化示例作品"
+ ]
+ },
+ {
+ "slug": "GmyOS",
+ "id": "GmyOS",
+ "name": "GmyOS",
+ "description": "GmyOS 是一个复古 DOS 风格的 Scratch 扩展,能打开可拖动终端窗口,支持命令行、虚拟文件系统和简易汇编指令。",
+ "image": "GmyOS.png",
+ "by": [
+ {
+ "name": "Gmy",
+ "link": "https://space.bilibili.com/1004646811?spm_id_from=333.40164.0.0"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "简_艺术字",
+ "id": "简_艺术字",
+ "name": "简_艺术字",
+ "description": "简单的艺术字显示扩展",
+ "image": "简_艺术字.png",
+ "by": [
+ {
+ "name": "YL_YOLO",
+ "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "简_艺术字"
+ ]
+ },
+ {
+ "slug": "移动端按键映射",
+ "id": "移动端按键映射",
+ "name": "移动端按键映射",
+ "description": "Advanced touch blocks and joystick with key simulation (触屏块加摇杆并且可实现按键模拟)",
+ "image": "移动端按键映射.png",
+ "by": [
+ {
+ "name": "YL_YOLO",
+ "link": "https://space.bilibili.com/1444083784?spm_id_from=333.337.0.0"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "移动端按键映射"
+ ]
+ },
+ {
+ "slug": "SF文件系统",
+ "id": "SF文件系统",
+ "name": "SF文件系统",
+ "description": "让数据有了形状",
+ "image": "SF文件系统.png",
+ "by": [
+ {
+ "name": "Starfall Twilight",
+ "link": "https://starfallstudio.cn"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "简·HTML",
+ "id": "简·HTML",
+ "name": "简·HTML",
+ "description": "一款强大的HTML构建拓展(建议与“内嵌框架”搭配使用)",
+ "image": "简·HTML.png",
+ "by": [
+ {
+ "name": "Starfall Twilight",
+ "link": "https://starfallstudio.cn"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "简易3D",
+ "id": "简易3D",
+ "name": "简易3D",
+ "description": "轻松制作适用于GPU加速的3D项目",
+ "image": "简易3D.png",
+ "by": [
+ {
+ "name": "Starfall Twilight(汉化)",
+ "link": "https://scratch.mit.edu/users/Vadik1/"
+ },
+ {
+ "name": "Vadik1",
+ "link": "https://starfallstudio.cn"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "简易3D"
+ ]
+ },
+ {
+ "slug": "全局提示",
+ "id": "全局提示",
+ "name": "全局提示",
+ "description": "信息全掌握",
+ "image": "全局提示.png",
+ "by": [
+ {
+ "name": "Starfall Twilight",
+ "link": "https://starfallstudio.cn"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "微CSV",
+ "id": "微CSV",
+ "name": "微CSV",
+ "description": "轻表格 轻数据 轻管理",
+ "image": "微CSV.png",
+ "by": [
+ {
+ "name": "Starfall Twilight",
+ "link": "https://starfallstudio.cn"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "星级评分",
+ "id": "星级评分",
+ "name": "星级评分",
+ "description": "快捷获取用户评价",
+ "image": "星级评分.png",
+ "by": [
+ {
+ "name": "Starfall Twilight",
+ "link": "https://starfallstudio.cn"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "字符串处理",
+ "id": "字符串处理",
+ "name": "字符串处理",
+ "description": "一些快捷的字符串处理积木",
+ "image": "字符串处理.png",
+ "by": [
+ {
+ "name": "Starfall Twilight",
+ "link": "https://starfallstudio.cn"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "网页嗅探器",
+ "id": "网页嗅探器",
+ "name": "网页嗅探器",
+ "description": "让你轻松获取到网页上的内容,只要是能获取到的,都能下!",
+ "image": "网页嗅探器.png",
+ "by": [
+ {
+ "name": "F_code",
+ "link": "https://space.bilibili.com/3546722598914878"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "网页嗅探器"
+ ]
+ },
+ {
+ "slug": "hermiteCurve",
+ "id": "hermiteCurve",
+ "name": "hermite曲线",
+ "description": "保证定点定速度的自定义曲线。",
+ "image": "hermiteCurve.png",
+ "by": [
+ {
+ "name": "空明2403",
+ "link": "https://m.bilibili.com/space/3493092640426109?spm_id_from=333.33.0.0"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "hermiteCurveExample"
+ ]
+ },
+ {
+ "slug": "markdown",
+ "id": "WitCatMarkDown",
+ "name": "WitCat MarkDown",
+ "description": "Render Markdown content with custom syntax, tables, code highlighting, and interactive triggers.",
+ "nameTranslations": {
+ "zh-cn": "白猫的markdown"
+ },
+ "descriptionTranslations": {
+ "zh-cn": "渲染 Markdown 内容,支持自定义语法、表格、代码高亮和交互触发器。"
+ },
+ "image": "markdown.svg",
+ "by": [
+ {
+ "name": "白猫",
+ "link": "https://www.ccw.site/student/6173f57f48cf8f4796fc860e"
+ },
+ {
+ "name": "yuan",
+ "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
+ }
+ ],
+ "docs": true,
+ "samples": [
+ "markdown"
+ ]
+ },
+ {
+ "slug": "拼音转文字",
+ "id": "拼音转文字",
+ "name": "拼音转文字",
+ "description": "将拼音转换为汉字。",
+ "image": "拼音转文字.png",
+ "by": [
+ {
+ "name": "Uonsan",
+ "link": "https://space.bilibili.com/3546882573862975"
+ }
+ ],
+ "docs": false,
+ "samples": [
+ "拼音转文字"
+ ]
+ },
+ {
+ "slug": "github面板",
+ "id": "github面板",
+ "name": "github面板",
+ "description": "github面板。",
+ "image": "GitHub面板.jpg",
+ "by": [
+ {
+ "name": "yuan",
+ "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
+ }
+ ],
+ "docs": true,
+ "samples": [
+ "GitHub面板"
+ ]
+ },
+ {
+ "slug": "让变量列表换行",
+ "id": "让变量列表换行",
+ "name": "让变量列表换行",
+ "description": "让变量列表换行的工具",
+ "image": "让变量列表换行.jpg",
+ "by": [
+ {
+ "name": "yuan",
+ "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "寻路",
+ "id": "寻路",
+ "name": "寻路",
+ "description": "一个高性能的寻路扩展",
+ "nameTranslations": {
+ "zh-cn": "一个高性能的寻路扩展"
+ },
+ "descriptionTranslations": {
+ "zh-cn": "一个高性能的寻路扩展"
+ },
+ "image": "寻路.svg",
+ "by": [
+ {
+ "name": "Arkos(使兼容)",
+ "link": "https://space.bilibili.com/446532545?spm_id_from=333.337.0.0"
+ },
+ {
+ "name": "朱元翔",
+ "link": "https://space.bilibili.com/3546902484224452?spm_id_from=333.1387.0.0"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "musicplus",
+ "id": "musicplus",
+ "name": "音乐 +",
+ "description": "升级版音乐扩展",
+ "nameTranslations": {
+ "zh-cn": "音乐 +",
+ "en": "Music Plus"
+ },
+ "descriptionTranslations": {
+ "zh-cn": "升级版音乐扩展",
+ "en": "Music extension, but advanced!"
+ },
+ "image": "musicplus.png",
+ "by": [
+ {
+ "name": "ChessBrainIsNotHuman",
+ "link": "https://chessbrain.qzz.io/"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "调试器",
+ "id": "DebuggerExtensionTS",
+ "name": "调试器",
+ "description": "调试器",
+ "nameTranslations": {
+ "zh-cn": "调试器"
+ },
+ "descriptionTranslations": {
+ "zh-cn": "调试器"
+ },
+ "image": "调试器.png",
+ "by": [
+ {
+ "name": "TheShovle"
+ },
+ {
+ "name": "yuan",
+ "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
+ }
+ ],
+ "scratchCompatible": false,
+ "docs": false
+ },
+ {
+ "slug": "panel",
+ "id": "settingspanel",
+ "name": "panel",
+ "description": "panel",
+ "nameTranslations": {
+ "zh-cn": "panel"
+ },
+ "descriptionTranslations": {
+ "zh-cn": "panel"
+ },
+ "image": "panel.svg",
+ "by": [
+ {
+ "name": "yuan",
+ "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
+ }
+ ],
+ "scratchCompatible": false,
+ "docs": false
+ },
+ {
+ "slug": "mdui",
+ "id": "mdui",
+ "name": "mdui弹窗",
+ "description": "A dialog and snackbar extension based on mdui for building interactive UI in projects.",
+ "nameTranslations": {
+ "zh-cn": "mdui弹窗",
+ "en": "mdui Dialog"
+ },
+ "descriptionTranslations": {
+ "zh-cn": "基于 mdui 的弹窗与消息提示扩展,可用于在作品中构建交互式界面。",
+ "en": "A dialog and snackbar extension based on mdui for building interactive UI in projects."
+ },
+ "image": "mdui.jpeg",
+ "by": [
+ {
+ "name": "不想上学"
+ }
+ ],
+ "scratchCompatible": false,
+ "docs": false
+ },
+ {
+ "slug": "cbeg",
+ "id": "cbeg",
+ "name": "CB Extension Gallery",
+ "description": "A lightweight tool to build Scratch extensions and open the CB Extension Gallery.",
+ "nameTranslations": {
+ "zh-cn": "CB Extension Gallery",
+ "en": "CB Extension Gallery"
+ },
+ "descriptionTranslations": {
+ "zh-cn": "一个轻量的 Scratch 扩展制作工具,并可直接打开 CB Extension Gallery。",
+ "en": "A lightweight tool to build Scratch extensions and open the CB Extension Gallery."
+ },
+ "image": "cbeg.png",
+ "by": [
+ {
+ "name": "ChessBrainIsNotHuman",
+ "link": "https://chessbrain.qzz.io/"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "feishu",
+ "id": "feishu",
+ "name": "飞书",
+ "description": "✨更好的WebHook",
+ "nameTranslations": {
+ "zh-cn": "飞书",
+ "en": "FlyBook"
+ },
+ "descriptionTranslations": {
+ "zh-cn": "✨更好的WebHook",
+ "en": "✨Better WebHook"
+ },
+ "image": "FlyBook.png",
+ "by": [
+ {
+ "name": "Maxkore",
+ "link": "https://github.com/Maxkore-Geek/"
+ }
+ ],
+ "scratchCompatible": false,
+ "docs": false,
+ "samples": [
+ "飞书示例"
+ ],
+ "version": "1.0.0",
+ "license": "MIT"
+ },
+ {
+ "slug": "backgroundremoverpanel",
+ "id": "backgroundremoverpanel",
+ "name": "去背景",
+ "description": "去背景",
+ "nameTranslations": {
+ "zh-cn": "去背景"
+ },
+ "descriptionTranslations": {
+ "zh-cn": "去背景"
+ },
+ "image": "backgroundremoverpanel.png",
+ "by": [
+ {
+ "name": "yuan",
+ "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "更好的画板",
+ "id": "更好的画板",
+ "name": "更好的画板",
+ "description": "更好的画板",
+ "nameTranslations": {
+ "zh-cn": "更好的画板"
+ },
+ "descriptionTranslations": {
+ "zh-cn": "更好的画板"
+ },
+ "image": "更好的画板.png",
+ "by": [
+ {
+ "name": "yuan",
+ "link": "https://www.ccw.site/student/687f6ba9fc898317568cdc8d"
+ }
+ ],
+ "docs": false
+ },
+ {
+ "slug": "test1",
+ "id": "test1",
+ "name": "test1",
+ "description": "test1test1test1",
+ "image": "test1.png",
+ "by": [
+ {
+ "name": "test777"
+ }
+ ],
+ "docs": false,
+ "version": "test1"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/image/test1.png b/image/test1.png
new file mode 100644
index 0000000..e85b678
Binary files /dev/null and b/image/test1.png differ