534 lines
23 KiB
Markdown
534 lines
23 KiB
Markdown
# 提示词
|
||
请你说中文,并使用中文编写文档。
|
||
|
||
我需要你发挥卓越的前端开发能力,对我指定的网站进行全方位的“像素级复刻”。这个复刻不仅包括静态页面的排版、配色和字体,还需要涵盖所有的交互细节、动画效果和响应式适配。我们将使用 **Vue 3** 框架和 **Vite** 构建工具。
|
||
|
||
我想制作一个AI 提示词 => 2D原画 => 参考图 => 3D模型生成的WorkFlow网站,功能与风格样式进行像素级复刻:
|
||
- https://app.assethub.io/
|
||
- https://app.assethub.io/inventory
|
||
- https://app.assethub.io/workflow
|
||
- https://app.assethub.io/texturing
|
||
- https://app.assethub.io/image
|
||
- https://app.assethub.io/settings/team/4430d872-b40f-4374-bfd0-936205e155aa
|
||
- 视频
|
||
- https://www.youtube.com/watch?v=h8fKTZDQ90s
|
||
- https://www.youtube.com/watch?v=i95-KHATaEY
|
||
## 迭代方式
|
||
1. 你可以使用浏览器打开这个网站,我会帮你登录。
|
||
2. 依次打开左边侧边按钮,读取各个页面的HTML结构、CSS信息。将截图存储在Screenshots,使用中文名。视频在github上寻找合适工具给我下载下来作为参考。
|
||
3. 下载网站都用的图片的,并在复刻网站时用上。
|
||
4. 搭建完前后端基础代码之后,先进行前端框架与效果迭代,之后反复对照截图、原始站点进行迭代,保证网站与原站点效果完全一致。
|
||
5. 使用ObsidianCli 维护docs下的文档。
|
||
|
||
## 主要功能
|
||
1. 该网站的主要功能是通过一套完整流程来生成3D模型,大致流程如下:
|
||
1. 用户输入的参考图与提示来生成模型原画。
|
||
2. 通过原画生成三视图。
|
||
3. 使用三视图来生成3D模型。
|
||
4. 3DMesh重拓扑。
|
||
5. UV Unwrap
|
||
6. auto texture
|
||
2. 具备3D渲染功能,请根据参考原站点使用方案。
|
||
3. 具备节点工作流,请使用合适的节点框架,可以考虑使用 https://github.com/comfy-org/ComfyUI 中的节点渲染与流程控制逻辑。
|
||
1. 节点工作在线共同预览与编辑功能,实现协同工作。
|
||
4. 简单的账户登录机制, 并且提供OpenID登录方式。
|
||
## 技术选型
|
||
我打算使用:
|
||
前端技术:TypeScript、Vue 3、Vite;前端组件请使用Element Plus,使用pnpm install element-plus 进行安装。
|
||
后端技术:nodejs、Fastify、Mongoose、fastify-jwt
|
||
数据库:MongoDB、MySQL。
|
||
工具函数:Axios、VueUse、pnpm
|
||
文档管理:Obsidian Cli
|
||
|
||
## 文档目录结构
|
||
- docs
|
||
- Netease_AITA_AssetMaker.md:项目技术、设计细节入口文档,方便Agent来寻找
|
||
- Screenshots:存放截图。
|
||
- Videos:视频参考。
|
||
- WebsiteSource:存放HTML、CSS相关信息。
|
||
- Web:前端相关文档。
|
||
- Server:后端相关文档。
|
||
|
||
## 复刻流程提示词
|
||
### 0. 准备阶段:安装必要 Skills (工具)
|
||
|
||
为了精准地感知和复刻目标网站,请优先完成以下工具的安装和配置。如果尚未安装,请在本地环境中执行相关命令:
|
||
|
||
1. **视觉感知工具 (视觉分析核心)**
|
||
* **Skill (依赖)**: `playwright` (用于 headless 浏览器截图、DOM 分析)
|
||
* **安装命令**: `npm install playwright && npx playwright install`
|
||
|
||
2. **资源处理工具 (资产抓取核心)**
|
||
* **Skill (依赖)**: `axios`, `mime-types` (用于下载图片、字体)
|
||
* **安装命令**: `npm install axios mime-types`
|
||
|
||
3. **开发工具 (Vue 3 + Vite)**
|
||
* **Skill (依赖)**: `@vitejs/plugin-vue` (如果在 Vite 项目中未配置)
|
||
|
||
---
|
||
|
||
### 1. 执行阶段:网站复刻工作流
|
||
|
||
请按照以下详细步骤执行任务。每完成一步,请向我反馈进度。
|
||
|
||
**目标网站 URL: [在此处替换为您要复刻的网站 URL,例如:https://example.com]**
|
||
|
||
#### 第一步:全面观察与分析 (Observation)
|
||
1. **高清截图**: 使用 Playwright 对目标网站进行全长(Full Page)高清截图。同时,抓取以下状态的截图:
|
||
* 特定组件(如 Button, Nav Item)的 `Hover` 状态。
|
||
* 移动端(如 iPhone 12 Pro)的截图。
|
||
2. **配色提取**: 分析截图,生成一份完整的 JSON 格式色板(Palette),包括主色、辅助色、文本色、背景色、边框色以及渐变色参数。
|
||
3. **字体分析**: 确定目标网站使用的主要 WebFonts、字体大小(Font Size)、行高(Line Height)和字重(Font Weight)。
|
||
4. **结构分析**: 使用 Playwright 导出核心 DOM 树的计算后样式(Computed Styles),特别是关键组件的 `padding`, `margin`, `display` (Flex/Grid) 属性和 `border-radius`。
|
||
|
||
#### 第二步:静态资源抓取 (Asset Collection)
|
||
1. **文件下载**: 自动下载目标网站的所有:
|
||
* SVG 图标
|
||
* 图片资源(PNG/JPEG/WEBP)
|
||
* 字体文件(WOFF2/WOFF)
|
||
2. **目录整理**: 将下载的资产按照以下结构有序存入您的项目目录中(例如:`src/assets/images`, `src/assets/icons`, `src/assets/fonts`)。
|
||
|
||
#### 第三步:代码生成 (Vue 3 Component Generation)
|
||
1. **项目脚手架**: 如果尚未在当前目录创建 Vite + Vue 3 项目,请创建一个:`npm init vite@latest . -- --template vue`。
|
||
2. **组件拆解**: 将目标网页拆解为可复用的 Vue 组件(例如:`Header.vue`, `HeroSection.vue`, `Card.vue`, `Footer.vue`)。
|
||
3. **样式复刻 (全都要)**:
|
||
* 使用全局样式文件(如 `src/style.css`)定义色板变量和字体定义。
|
||
* 在 Vue 组件中,使用 `<style scoped>` 编写 **完全一致** 的 CSS 样式。必须精确还原计算后的数值,不要估算。
|
||
* 使用原生 CSS Flexbox 和 Grid 进行布局还原。
|
||
|
||
#### 第四步:动画与交互复刻 (Interaction & Animation)
|
||
1. **动态特效**: 分析目标网站的关键动画(例如:页面滚动时的元素渐现、Header 缩放、Hover 时的微动效)。
|
||
* 使用 CSS Transitions/Animations 或 Vue 3 的 `<Transition>` 组件精准还原。
|
||
* 尽可能复刻其 `cubic-bezier` 缓动曲线和持续时间(Duration)。
|
||
2. **交互状态**: 确保所有按钮、链接在 `Hover` 和 `Active` 状态下的像素细节与原站一致。
|
||
|
||
#### 第五步:自我校对 (Self-Correction)
|
||
1. **组件预览**: 完成关键组件后,启动 Vite 开发服务器(`npm run dev`)。
|
||
2. **视觉比对**: 将您生成的页面截图与原站截图进行叠加比对,特别注意边距和字体的偏差。
|
||
3. **代码清理**: 删除不必要的脚手架代码(如 Vite 默认的 HelloWorld 组件)。
|
||
|
||
---
|
||
|
||
### 2. 最终输出物
|
||
|
||
1. 一个完整的、结构清晰的 Vue 3 + Vite 项目代码库。
|
||
2. 在当前目录中可以成功运行 (`npm run dev`)。
|
||
3. 生成的页面在视觉和交互上与目标网站达到 95% 以上的像素级匹配度。
|
||
|
||
---
|
||
|
||
现在,请开始按照工作流执行。如果有任何步骤遇到困难,或者需要我提供更具体的指令,请立即告知。
|
||
|
||
|
||
|
||
# 操作说明
|
||
1. 在首页的Drop your concept art here,可以使用拖拽或点击的方式,上传模型的参考图。此时该区域会显示当前上传的图片。
|
||
2. 点击下面的Clear清除图片;点击Generate 3D开始3D模型生成流程。按钮会显示成Generating,之后切换到Workflow页面。./docs/screenshots/workflow/Workflow_使用单张图片生成参考图与三视图_1.png
|
||
3. Workflow界面主要由白板与节点系统构成。
|
||
1. SourceImage节点
|
||
1. Inputs为输入图片
|
||
2. auto pipeline为是否进行自动流程,即 输入图片=> 参考图=> 三视图 => 3D模型 流程。
|
||
3. AllowedModel为流程使用的模型设置。
|
||
2. Pose节点
|
||
1. 用于控制输出参考图的Pose。
|
||
2. 节点Transform to Pose即可进行图片生成。
|
||
|
||
|
||
任务:
|
||
1. 你帮我实现以上操作逻辑。
|
||
2. 实现Workflow页面的中的白板与节点功能,参考原始页面。
|
||
3. 在后端实现AI服务接口。
|
||
1. 可以接入Workflow中的AI服务(查询各个服务商的文档)
|
||
2. 可以通过Netease AIGW接入AI服务。
|
||
1. 参考以下网站,网站需要认证,打开浏览器,我来帮你登录。
|
||
2. https://aigw.doc.nie.netease.com/21_%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97/10_%E5%9F%BA%E6%9C%AC%E8%AF%B4%E6%98%8E/1_%E5%9F%BA%E6%9C%AC%E8%AF%B4%E6%98%8E.html
|
||
3. https://aigw.doc.nie.netease.com/21_%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97/11_%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81/2_%E8%BA%AB%E4%BB%BD%E8%AE%A4%E8%AF%81.html
|
||
4. https://aigw.doc.nie.netease.com/21_%E5%BC%80%E5%8F%91%E6%8C%87%E5%8D%97/14_%E8%AE%A4%E8%AF%81%E4%B8%8E%E7%AE%A1%E7%90%86/%E8%AE%A4%E8%AF%81%E4%B8%8E%E7%AE%A1%E7%90%86.html
|
||
5. https://aigw.doc.nie.netease.com/25_AIGW%E5%8A%9F%E8%83%BD%E6%8C%87%E5%8D%97/10_API%E6%8E%A5%E5%8F%A3.html
|
||
6. https://aigw.doc.nie.netease.com/50_FAQ/2_API%E6%8A%A5%E9%94%99.html
|
||
3. 可以通过 https://openai.nie.netease.com 的OpenAI、Claude样式的接口来接入服务(需要用户提供AUTH_TOKEN)
|
||
4. WorkFlow中存放一些Workflows,里面有当前工作流信息,你可以参考 https://app.assethub.io/workflow/10757
|
||
1. 生成完模型后,点击模型节点的View 3D Mesh就切换页面,在页面中载入3D模型,且模型带有贴图,使用PBR光照模型进行渲染。
|
||
|
||
---
|
||
|
||
|
||
5. 使用ObsidianCli 维护docs下的文档。
|
||
|
||
## 主要功能
|
||
1. 该网站的主要功能是通过一套完整流程来生成3D模型,大致流程如下:
|
||
1. 用户输入的参考图与提示来生成模型原画。
|
||
2. 通过原画生成三视图。
|
||
3. 使用三视图来生成3D模型。
|
||
4. 3DMesh重拓扑。
|
||
5. UV Unwrap
|
||
6. auto texture
|
||
2. 具备3D渲染功能,请根据参考原站点使用方案。
|
||
3. 具备节点工作流,请使用合适的节点框架,可以考虑使用[ https://github.com/comfy-org/ComfyUI ](https://github.com/Comfy-Org/ComfyUI_frontend)中的节点渲染与流程控制逻辑。
|
||
1. 节点工作在线共同预览与编辑功能,实现协同工作。
|
||
4. 简单的账户登录机制, 并且提供OpenID登录方式。
|
||
## 技术选型
|
||
我打算使用:
|
||
前端技术:TypeScript、Vue 3、Vite;前端组件请使用Element Plus,使用pnpm install element-plus 进行安装。
|
||
后端技术:nodejs、Fastify、Mongoose、fastify-jwt
|
||
数据库:MongoDB、MySQL。
|
||
工具函数:Axios、VueUse、pnpm
|
||
文档管理:Obsidian Cli
|
||
|
||
## 文档目录结构
|
||
- docs
|
||
- Netease_AITA_AssetMaker.md:项目技术、设计细节入口文档,方便Agent来寻找
|
||
- Screenshots:存放截图。
|
||
- Videos:视频参考。
|
||
- WebsiteSource:存放HTML、CSS相关信息。
|
||
- Web:前端相关文档。
|
||
- Server:后端相关文档。
|
||
|
||
---
|
||
|
||
>以上作废
|
||
|
||
# 提示词
|
||
请你说中文,并使用中文编写文档。
|
||
|
||
## 需求
|
||
1. 开发要求
|
||
1. 在保证相关接口不变的情况下,重构./backend 中的服务端。
|
||
2. 根据需求迭代./frontend 中的前端。
|
||
1. .\frontend\src\features\workflow-editor 是WorkFlow节点面板,不需要进行任何修复,这个是其他人开发的,但需要分析好接口,主要有WorkFlow序列化/反序列化、所有节点序列化/反序列化、同步信息等。
|
||
2. 鉴权
|
||
1. 简单账号密码登录,预留OIDC登录相关接口。
|
||
2. 登录页面,需要截图参考。
|
||
3. 工作区(WorkSpace) WorkFlow 序列化 & 同步。
|
||
1. WorkSpace
|
||
1. 每个用户可能拥有多个WorkSpace,每个Workspace拥有多个WorkFlow。
|
||
2. WorkFlow
|
||
1. WorkFlow 流水线线号码、名称、工作流状态(原话设定、三视图、模型生成……)、创建人、参与人员
|
||
2. 节点相关信息
|
||
1. 节点公共信息:Position、折叠等。
|
||
2. 节点特有信息。
|
||
3. 同事导出了一份分析报告./docs/web/workflow-node-panel-guide.md,你可以参考一下。
|
||
4. 资产库
|
||
1. 相关资产的对象存储。各种图片、模型。
|
||
2. 可以针对通过标签 过滤显示不同类型的资产。
|
||
3. 可以根据文件名、WorkSpace、WorkFlow名进行检索。
|
||
4. 在资产库点击项可以进行资产预览,模型、图片。
|
||
5. 任务排队系统
|
||
1. 根据节点使用AI API的情况(AIGW、管理员设置的第三方AI API、用户设置自己的AI API)的,将任务分配对对应的任务池。
|
||
2. 构建一个Worker Pool,每个WorkFlow,使用一个主worker进行管理。
|
||
1. WorkFlow执行相关
|
||
1. 哪些节点是可以并行执行的?哪些节点是串行执行的?
|
||
2. WorkFlow的执行状态(原话设定、三视图、模型生成、模型拆分、模型组装等),这些状态可以在管理员后台进行添加与定制。
|
||
3. 分配SubWorker来执行节点定义的操作。执行完之后将相关信息返回给主Worker,并将信息写入数据库,资产写对象存储服务,并将资产信息写入数据库中。
|
||
2. 每个节点的执行状态。(待命、执行中、执行成功、执行失败)
|
||
3. 管理员后台可以看到各个类型任务的排队情况。
|
||
6. AI API & 计费系统
|
||
1. 接入各种外部供应商API,提供各种模型、URL,管理员与用户只需要提供API Key或者API Token就可以完成配置。
|
||
2. Netease AIGW 参考 后续章节 AIGW文档。
|
||
3. 在用户设置页面添加AI API、Netease AIGW设置页面、以及 剩余积分 / 总共积分。
|
||
4. 实现可配置的计费系统。
|
||
1. 用户使用管理员配置的AI API就需要计算费用。
|
||
2. 在管理员的管理后台可以设置AI API的积分方式。
|
||
3. 第三方 AI服务商的API根据他们的文档信息设置计算方法。
|
||
4. AIGW相关费用计算参考 Netease AIGW 文档。
|
||
7. 部署方式与信息
|
||
1. VPS SSH的方式,信息之后再填写。
|
||
2. 采用Docker Compose以容器的方式部署。
|
||
3. 对象存储采用:采用公司的S3对象存储服务,具体信息之后填写。
|
||
4. 数据库先采用VPS Docker部署的, 之后会迁移到公司提供的云数据库服务。
|
||
## 技术选型
|
||
前端技术:沿用现有技术框架。
|
||
后端技术:nodejs、Fastify、Mongoose、fastify-jwt
|
||
数据库:MongoDB(帮我确定是否有必要干掉SQL服务器)
|
||
工具函数:Axios、pnpm
|
||
工程文档管理:Obsidian Cli
|
||
|
||
## 文档目录结构
|
||
- docs
|
||
- Netease_AITA_AssetMaker.md:项目技术、设计细节入口文档,方便Agent来寻找
|
||
- Screenshots:存放截图。
|
||
- Web:前端相关文档。
|
||
- Server:后端相关文档。
|
||
|
||
# 其他
|
||
## Netease OIDC信息
|
||
| | |
|
||
| ------------- | ---------------------------------------------------------------- |
|
||
| client id | 4884b03e951711f0ad370242ac120002 |
|
||
| client secret | f2862b8c5ab24085ab0883d119b631604884b354951711f0ad370242ac120002 |
|
||
## OIDC 参考代码
|
||
```python
|
||
#coding:UTF-8
|
||
"""
|
||
Requirements:
|
||
1. Flask >= 0.10.1
|
||
2. requests
|
||
3. jwkest >= 1.1.7
|
||
|
||
Usage:
|
||
python oidc_code_demo.py -H {listen_address} -p {listen_port}
|
||
|
||
Help:
|
||
python oidc_code_demo.py -h
|
||
"""
|
||
import os
|
||
import uuid
|
||
from hashlib import md5
|
||
import datetime
|
||
from urllib import urlencode
|
||
import json
|
||
import requests
|
||
from flask import Flask, request, jsonify, session, redirect
|
||
|
||
from jwkest.jwk import SYMKey
|
||
from jwkest.jws import JWS
|
||
from jwkest.jwk import load_jwks_from_url
|
||
from jwkest.jws import NoSuitableSigningKeys
|
||
|
||
__revision__ = "0.01"
|
||
__author__ = "chenxs@corp.netease.com"
|
||
|
||
OIDC_CLIENT_ID = ""
|
||
OIDC_CLIENT_SECRET = ""
|
||
OIDC_PROVIDER = "https://login.netease.com/connect"
|
||
OIDC_AUTHORIZATION_SERVER = "https://login.netease.com/connect/authorize"
|
||
OIDC_TOKEN_ENDPOINT = "https://login.netease.com/connect/token"
|
||
OIDC_USERINFO_ENDPOINT = "https://login.netease.com/connect/userinfo"
|
||
OIDC_SCOPE = "openid nickname email fullname dep title empno"
|
||
OIDC_REDIRECT_URI = "https://127.0.0.1:5000/finish"
|
||
OIDC_JWKS_URI = "https://login.netease.com/connect/jwks"
|
||
OIDC_ALG = "HS256"
|
||
|
||
PYTHON_OIDC_DEMO = Flask(__name__)
|
||
|
||
@PYTHON_OIDC_DEMO.route("/", methods=['GET'])
|
||
def index():
|
||
"""index"""
|
||
if 'username' in session:
|
||
body = (
|
||
u"</br><h2>OpenID Connect 鐧诲綍鎴愬姛銆<E5A79B></h2></br>"
|
||
u"鎮ㄧ殑鐢ㄦ埛鍚嶆槸锛<EFBFBD>%s</br>"
|
||
u"鎮ㄧ殑鍏ㄥ悕鏄細%s</br>"
|
||
u"鎮ㄧ殑閭鏄細%s</br>"
|
||
u"鎮ㄧ殑鑱屼綅鏄細%s</br>"
|
||
u"鎮ㄧ殑閮ㄩ棬鏄細%s</br>"
|
||
u"鎮ㄧ殑宸ュ彿鏄細%s</br>") % (
|
||
session['username'], session.get('fullname', ''),
|
||
session.get('email', ''), session.get('title', ''),
|
||
session.get('dep', ''), session.get('empno', ''))
|
||
body += u"<a href='/login'>鎴虫垜閲嶆柊鐧诲綍</a>"
|
||
return body
|
||
else:
|
||
return u"<a href='/login'>鎴虫垜鐧诲綍</a>"
|
||
|
||
@PYTHON_OIDC_DEMO.route("/login", methods=['GET'])
|
||
def login():
|
||
"""AuthN Request"""
|
||
session.clear()
|
||
now = datetime.datetime.now().strftime("%s")
|
||
session['uid'] = uuid.uuid4().hex
|
||
session['state'] = session['uid']
|
||
session['nonce'] = md5(session['uid'] + now).hexdigest()
|
||
|
||
authn_request_params = {
|
||
'response_type': 'code',
|
||
'client_id': OIDC_CLIENT_ID,
|
||
'state': session['state'],
|
||
'nonce': session['nonce'],
|
||
'scope': OIDC_SCOPE,
|
||
'redirect_uri': OIDC_REDIRECT_URI,
|
||
#'prompt': 'login',
|
||
'display': 'touch',
|
||
}
|
||
|
||
redirect_url = "?".join([
|
||
OIDC_AUTHORIZATION_SERVER, urlencode(authn_request_params)])
|
||
|
||
return redirect(redirect_url)
|
||
|
||
|
||
def token_request(code):
|
||
"""2. Token Request"""
|
||
params = {
|
||
'grant_type': 'authorization_code',
|
||
'code': code,
|
||
'redirect_uri': OIDC_REDIRECT_URI,
|
||
'client_id': OIDC_CLIENT_ID,
|
||
'client_secret': OIDC_CLIENT_SECRET,
|
||
}
|
||
_resp = requests.post(OIDC_TOKEN_ENDPOINT, data=params)
|
||
return json.loads(_resp.text)
|
||
|
||
def id_token_verify(id_token, nonce=None):
|
||
"""3. id token verify"""
|
||
|
||
now = int(datetime.datetime.now().strftime("%s"))
|
||
if OIDC_ALG == "HS256":
|
||
signed_keys = [SYMKey(key=OIDC_CLIENT_SECRET)]
|
||
else:
|
||
signed_keys = load_jwks_from_url(OIDC_JWKS_URI)
|
||
|
||
try:
|
||
plain_id_token = JWS().verify_compact(id_token, signed_keys)
|
||
except NoSuitableSigningKeys:
|
||
# logger the id_token please
|
||
return {'error': 'can not verify the id token'}
|
||
|
||
print "idtoken: %s" % plain_id_token
|
||
if nonce:
|
||
if (not plain_id_token.has_key('nonce')) or (
|
||
plain_id_token['nonce'] != nonce):
|
||
return {'error': 'id token nonce not correct'}
|
||
if plain_id_token['iss'] != OIDC_PROVIDER:
|
||
return {'error': 'id token iss not correct'}
|
||
if plain_id_token['aud'] != OIDC_CLIENT_ID:
|
||
return {'error': 'id token aud not correct'}
|
||
if now >= int(plain_id_token['exp']):
|
||
return {'error': 'id token expired'}
|
||
|
||
return {'id_token': plain_id_token}
|
||
|
||
|
||
@PYTHON_OIDC_DEMO.route("/finish", methods=['GET'])
|
||
def finish():
|
||
"""
|
||
1. AuthN Response
|
||
2. Token Request
|
||
3. id token verify
|
||
4. userinfo request
|
||
5. login user
|
||
"""
|
||
|
||
# 1. AuthN Response
|
||
try:
|
||
code = request.args.get('code')
|
||
if session['state']:
|
||
state = request.args.get('state')
|
||
if state != session['state']:
|
||
return u"闈炴硶璇锋眰"
|
||
except ValueError:
|
||
return u"闈炴硶璇锋眰"
|
||
# 2. Token Request
|
||
token = token_request(code)
|
||
print "token: %s" % token
|
||
if token.has_key('error'):
|
||
return u"鍑洪敊浜嗭細%s" % str(token)
|
||
# 3. id token verify
|
||
id_token_verified = id_token_verify(token['id_token'])
|
||
if id_token_verified.has_key('error'):
|
||
return id_token_verified['error']
|
||
else:
|
||
id_token = id_token_verified['id_token']
|
||
|
||
print "id_token: %s" % id_token
|
||
|
||
# 4. userinfo request
|
||
_req_session = requests.Session()
|
||
_req_session.headers.update({
|
||
"Authorization": "Bearer %s" % token['access_token']})
|
||
userinfo_req = _req_session.get(OIDC_USERINFO_ENDPOINT)
|
||
userinfo = json.loads(userinfo_req.text)
|
||
# login the user
|
||
session['username'] = userinfo['nickname']
|
||
session['email'] = userinfo['email']
|
||
session['title'] = userinfo.get('title', '')
|
||
session['empno'] = userinfo.get('empno', '')
|
||
session['dep'] = userinfo.get('dep', '')
|
||
session['fullname'] = userinfo.get('fullname', '')
|
||
return redirect("/")
|
||
|
||
if __name__ == "__main__":
|
||
import sys
|
||
import argparse
|
||
parser = argparse.ArgumentParser(
|
||
usage='%(prog)s [options]', version='%(prog)s ' + str(__revision__))
|
||
parser.add_argument(
|
||
'-H', '--host', dest='host', type=str,
|
||
help="Specify listening adress, default is 127.0.0.1")
|
||
parser.add_argument(
|
||
'-p', '--port', dest='port', type=int,
|
||
help="Specify listening port, default is 5000")
|
||
parser.add_argument(
|
||
'-c', '--client_id', dest='client_id', type=str,
|
||
help="oidc client_id is required.")
|
||
parser.add_argument(
|
||
'-s', '--client_secret', dest='client_secret', type=str,
|
||
help="oidc client_secret is required.")
|
||
|
||
args = parser.parse_args()
|
||
|
||
host = args.host or '127.0.0.1'
|
||
port = args.port or 5000
|
||
OIDC_REDIRECT_URI = "http://%s:%s/finish" % (host, port)
|
||
OIDC_CLIENT_ID = args.client_id
|
||
OIDC_CLIENT_SECRET = args.client_secret
|
||
if not OIDC_CLIENT_ID or not OIDC_CLIENT_SECRET:
|
||
parser.print_help()
|
||
parser.exit()
|
||
|
||
PYTHON_OIDC_DEMO.secret_key = "this is a random secret"
|
||
PYTHON_OIDC_DEMO.debug = True
|
||
PYTHON_OIDC_DEMO.run(host=host, port=port)
|
||
```
|
||
# AI模型
|
||
流程常用的AI模型
|
||
VLM-Gemini+WD14反推,2D-liblib+nanobananapro,3D-Tripo P1,UV-Hunyuan,CDN-Filepicker,seedream4.5/5.0 和 Tripo / Meshy / Hunyuan/ Rodin / HItem3D
|
||
## 其他AI API 提供商
|
||
你通过google搜索以及其他搜索SKill帮我收集信息。
|
||
- 字节 火山引擎、seedream、seeddance
|
||
- 腾讯 混元
|
||
- Google Gemini
|
||
- Chatgpt
|
||
- Tripo
|
||
- 阿里千问
|
||
|
||
## AIGW文档
|
||
- https://aigw.doc.nie.netease.com/
|
||
请打开浏览器进行阅读1.5~1.9章节,该网站需要登录,我会帮你登录,登录完会和你说我已经登录了。
|
||
|
||
支持的模型参考:
|
||
- https://docs.popo.netease.com/team/pc/hnnkwy_g/pageDetail/1e40f09ebff54d7b8377459b5e18e7b0?popo_locale=zh&appVersion=4.32.0&deviceType=0&popolocale=zh-CN&popo_hidenativebar=1&popo_noindicator=1&xyz=1747036937996&tab=0&disposable_login_token=1&xyz=1776331056585
|
||
|
||
将相关信息放到./docs/AIProvider 下,并且编写文档。
|
||
|
||
|
||
## 部署
|
||
将服务部署到VPS上,使用Docker Compose进行部署。部署前先检查docker 容器情况,保证不会影响到其他服务。
|
||
ssh -p 32200 -i C:\Users\loujiajie\.ssh\netease_loujiajie_id_rsa loujiajie@10.145.96.67
|
||
|
||
S3 对象服务信息
|
||
- NOS 桶信息
|
||
- 名称:matrixaita
|
||
- 项目:artct
|
||
- 成本项目:artct
|
||
- 区域:GA
|
||
- Endpoint:gzdev
|
||
- 桶用户:p-artct-matrixaita
|
||
- 域名(内网):`nos-gzdev.163nos.com`
|
||
|
||
相关资产放到 AssetMaker/ 目录后面
|
||
|
||
|
||
---
|
||
# 临时需求
|
||
1. 添加账号:
|
||
1. 账号:G37
|
||
2. 密码:G37
|
||
2. 添加账号单点登录功能,其他电脑登录后会让当前电脑登录直接失效并且退回登录页面。给G37 单点登录。
|
||
|
||
---
|
||
|
||
# Blender
|
||
|
||
https://docs.popo.netease.com/team/pc/ysai/pageDetail/4a88b0e6d806462589e01a13f3f90cff?appVersion=4.41.0&deviceType=0&popolocale=zh-CN&popo_hidenativebar=1&popo_noindicator=1&disposable_login_token=1
|
||
|
||
Blender 4.4.2
|
||
|
||
|
||
---
|
||
|
||
|
||
TODO:
|
||
- [ ] Blender
|
||
|