本文档详细概述了Screenshot-to-Code应用程序的系统架构,解释了组件如何交互以将截图转换为功能代码。它涵盖了核心系统设计、通信模式和主要子系统。有关前端组件的更具体细节,请参阅前端架构,有关后端API的详细信息,请参阅后端架构。
Screenshot-to-Code遵循客户端-服务器架构,组件之间具有实时通信
来源: README.md40-42 frontend/src/lib/stacks.ts3-11 backend/main.py7-26
应用程序通过几个不同的状态运行,这些状态控制着 UI 的流程
| 状态管理 | 描述 | 界面组件 |
|---|---|---|
初始 | 应用程序加载时的初始状态 | 开始面板 |
编码中 | 代码生成中 | 带有加载指示器的预览面板 |
代码就绪 | 代码生成完成 | 带有预览和代码的预览面板 |
来源: frontend/src/types.ts22-26 frontend/src/App.tsx53-57 frontend/src/App.tsx171-227
后端使用 FastAPI 构建,提供 API 端点和用于实时代码生成的 WebSocket 连接。
来源: backend/main.py7-26 backend/prompts/types.py4-22
main.py 文件配置了 FastAPI 应用程序,并包含了必要的路由
前端使用 React 构建,并使用 Zustand 进行状态管理。App 组件是主入口点,负责管理应用程序状态并根据当前状态渲染不同的 UI 组件。
来源: frontend/src/App.tsx27-394 frontend/src/types.ts22-26
前端使用两个 Zustand store 进行状态管理
useAppStore: 管理应用程序范围的状态
useProjectStore: 管理项目范围的状态
来源: frontend/src/App.tsx28-50 frontend/src/App.tsx52-57
WebSocket 通信是应用程序的核心,它支持实时代码生成和结果流式传输。
来源: frontend/src/generateCode.ts20-74 frontend/src/App.tsx169-228
后端通过 WebSocket 发送不同类型的响应
| 类型 | 目的 | 处理函数 |
|---|---|---|
chunk | 生成的代码的增量片段 | appendCommitCode() |
status | 状态更新消息 | appendExecutionConsole() |
setCode | 设置整个代码 | setCommitCode() |
error | 错误消息 | 显示 toast 通知 |
来源: frontend/src/generateCode.ts14-18 frontend/src/generateCode.ts39-50
下图说明了端到端的代码生成过程
来源: frontend/src/App.tsx232-247 frontend/src/App.tsx169-228 frontend/src/generateCode.ts20-74
doCreate: 从截图初始化代码生成
doGenerateCode: 准备参数并启动 WebSocket 连接
generateCode: 建立 WebSocket 连接并处理响应
来源: frontend/src/App.tsx232-247 frontend/src/App.tsx169-227 frontend/src/generateCode.ts20-74
该应用程序使用Settings接口来管理用户配置
| 设置 | 描述 | 默认值 |
|---|---|---|
openAiApiKey | OpenAI API 密钥 | null |
anthropicApiKey | Anthropic API 密钥 | null |
openAiBaseURL | 自定义 OpenAI API 端点 | null |
isImageGenerationEnabled | 启用图像生成 | true |
editorTheme | 代码编辑器的主题 | EditorTheme.COBALT |
generatedCodeConfig | 技术栈 | Stack.HTML_TAILWIND |
codeGenerationModel | 要使用的 AI 模型 | CodeGenerationModel.CLAUDE_3_5_SONNET |
设置使用usePersistedState hook存储在浏览器的本地存储中
来源: frontend/src/types.ts9-20 frontend/src/App.tsx60-74
该应用程序支持在Stack枚举中定义的多项技术栈
| 栈 | 组件 | 描述 |
|---|---|---|
| HTML_TAILWIND | HTML, Tailwind | 带有 Tailwind CSS 的 HTML |
| HTML_CSS | HTML, CSS | 带有常规 CSS 的 HTML |
| REACT_TAILWIND | React, Tailwind | 带有 Tailwind CSS 的 React |
| VUE_TAILWIND | Vue, Tailwind | 带有 Tailwind CSS 的 Vue |
| BOOTSTRAP | Bootstrap | Bootstrap 组件 |
| IONIC_TAILWIND | Ionic, Tailwind | 带有 Tailwind CSS 的 Ionic |
| SVG | SVG | SVG 图形 |
每个堆栈对应后端中的一个特定系统提示模板
来源: frontend/src/lib/stacks.ts3-23 backend/prompts/types.py4-22
该应用程序实现了 WebSocket 通信的错误处理
| 错误代码 | 常量 | 含义 | 行为 |
|---|---|---|---|
| 4333 | USER_CLOSE_WEB_SOCKET_CODE | 用户取消 | 显示取消消息,调用 onCancel |
| 4332 | APP_ERROR_WEB_SOCKET_CODE | 后端错误 | 调用 onCancel |
| 非 1000 | 不适用 | 连接错误 | 显示错误提示,调用 onCancel |
| 1000 | 不适用 | 正常关闭 | 调用 onComplete |
来源: frontend/src/constants.ts2-3 frontend/src/generateCode.ts53-67
Screenshot-to-Code 系统采用基于 WebSocket 的架构,可实现 AI 生成代码的实时流式传输。React 前端负责管理应用程序状态和用户交互,而 FastAPI 后端则与 AI 模型接口,将屏幕截图转换为跨多种技术栈的功能代码。这种架构为用户提供了响应式的体验,并在代码生成过程中提供即时反馈。
来源: README.md40-42 frontend/src/App.tsx27-394 backend/main.py7-26