From 1ce665a3e53729ac17dc51b3a812df7499fc26fd Mon Sep 17 00:00:00 2001 From: lq1405 <2769838458@qq.com> Date: Mon, 10 Feb 2025 12:20:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/scripts/db/software.realm.lock | Bin 1416 -> 1416 bytes src/define/define_string.js | 172 -- src/define/iamgeStyleDefine.js | 2265 ---------------------- src/main/IPCEvent/settingIpc.js | 72 - src/main/IPCEvent/writingIpc.js | 28 - src/main/Original/TagCustomize.js | 33 - src/main/backPrompt/imageGenerate.js | 493 ----- src/main/backPrompt/videoGenerate.js | 556 ------ src/main/backPrompt/writing.js | 301 --- src/main/discord/discordApi.js | 490 ----- src/preload/discordIndex.js | 28 - 11 files changed, 4438 deletions(-) delete mode 100644 src/define/define_string.js delete mode 100644 src/define/iamgeStyleDefine.js delete mode 100644 src/main/IPCEvent/settingIpc.js delete mode 100644 src/main/IPCEvent/writingIpc.js delete mode 100644 src/main/Original/TagCustomize.js delete mode 100644 src/main/backPrompt/imageGenerate.js delete mode 100644 src/main/backPrompt/videoGenerate.js delete mode 100644 src/main/backPrompt/writing.js delete mode 100644 src/main/discord/discordApi.js delete mode 100644 src/preload/discordIndex.js diff --git a/resources/scripts/db/software.realm.lock b/resources/scripts/db/software.realm.lock index 2bbe3bf82203d4d4396157da56a9ca24a8ff616f..a21c9090e0df99a566877c177a91ddd7e4530c08 100644 GIT binary patch literal 1416 zcmZQ%h($ literal 1416 zcmZQ%>cMh65V+YA;06A1S~ X)ScMDijW*-jfTKz2#kin5DWnTfN%r5 diff --git a/src/define/define_string.js b/src/define/define_string.js deleted file mode 100644 index 22d7d61..0000000 --- a/src/define/define_string.js +++ /dev/null @@ -1,172 +0,0 @@ -export const DEFINE_STRING = { - SAVE_DEFINE_CONFIG_JSON_BY_PROPERTY: "SAVE_DEFINE_CONFIG_JSON_BY_PROPERTY", - GET_DEFINE_CONFIG_JSON_BY_PROPERTY: "GET_DEFINE_CONFIG_JSON_BY_PROPERTY", - GET_IMAGE_GENERATE_CATEGORY: "GET_IMAGE_GENERATE_CATEGORY", - SHOW_MAIN_NOTIFICATION: "SHOW_MAIN_NOTIFICATION", - CHECK_MACHINE_ID: "CHECK_MACHINE_ID", - GET_CUSTOMIZE_GPT_PROMPT: "GET_CUSTOMIZE_GPT_PROMPT", - GENERATE_GPT_EXAMPLE_OUT: "GENERATE_GPT_EXAMPLE_OUT", - GET_PERMISSION: "GET_PERMISSION", - SAVE_IMAGE_TO_OTHER_FOLDER: "SAVE_IMAGE_TO_OTHER_FOLDER", - GET_IMAGE_AUTO_SAVE_SETTING: "GET_IMAGE_AUTO_SAVE_SETTING", - SAVE_IMAGE_AUTO_SAVE_SETTING: "SAVE_IMAGE_AUTO_SAVE_SETTING", - GET_AUTO_SAVE_IMAGE_CLASSIFY_OPTIONS: "GET_AUTO_SAVE_IMAGE_CLASSIFY_OPTIONS", - MODIFY_GENERATE_TASK_STATUS: "MODIFY_GENERATE_TASK_STATUS", - DELETE_BACK_TASK: "DELETE_BACK_TASK", - SAVE_VIDEO_SRT_AND_AUDIO_MESSAGE: "SAVE_VIDEO_SRT_AND_AUDIO_MESSAGE", - SAVE_KEY_FRAME_SETTING: "SAVE_KEY_FRAME_SETTING", - MODIFY_SAMPLE_SETTING: "MODIFY_SAMPLE_SETTING", - GET_SETTING_Dafault_DATA: "GET_SETTING_Dafault_DATA", - GET_DRAFT_FILE_LIST: "GET_DRAFT_FILE_LIST", - GET_FRAME: "GET_FRAME", - PYTHON_ERROR: "PYTHON_ERROR", - PYTHON_CLOSE: "PYTHON_CLOSE", - PYTHON_OUTPUT: "PYTHON_OUTPUT", - RESTART_GENERATE: "RESTART_GENERATE", - ALIGN_DRAFT_IMG: "ALIGN_DRAFT_IMG", - ALIGN_DRAFT_IMG_TO_TEXT: "ALIGN_DRAFT_IMG_TO_TEXT", - REGENERATE_IMAGE_RETUN: "REGENERATE_IMAGE_RETUN", - GET_SUBFOLDER_LIST: "GET_SUBFOLDER_LIST", - REFRASH_IMAGWE_DATA: "REFRASH_IMAGWE_DATA", - GET_IMAGE_PROMPTLIST: "GET_IMAGE_PROMPTLIST", - SELECT_FILE: "SELECT_FILE", - IMPROVE_IMAGE_RESOULTION: "IMPROVE_IMAGE_RESOULTION", - GET_BACKGROUND_MUSIC_CONFIG_LIST: "GET_BACKGROUND_MUSIC_CONFIG_LIST", - ADD_BACKGROUND_MUSIC_FOLDER: "ADD_BACKGROUND_MUSIC_FOLDER", - DELETE_CLIP_SETTING: "DELETE_CLIP_SETTING", - DELETE_FRIENDLY_REMINDER: "DELETE_FRIENDLY_REMINDER", - MODIFY_INPUT_CROP_JSON: "MODIFY_INPUT_CROP_JSON", - PUSH_BACK_PROMPT: "PUSH_BACK_PROMPT", - GET_FRIENDLY_REMINDER_DRAFT: "GET_FRIENDLY_REMINDER_DRAFT", - GET_FRIENDLY_REMINDER_LIST: "GET_FRIENDLY_REMINDER_LIST", - AUTO_GENERATION_VIDEO: "AUTO_GENERATION_VIDEO", - GET_PROJECT_WORD: "GET_PROJECT_WORD", - AIMODIFY_ONE_WORD: "AIMODIFY_ONE_WORD", - IMPORT_SRT_AND_GET_TIME: "IMPORT_SRT_AND_GET_TIME", - SAVE_NEW_WORD: "SAVE_NEW_WORD", - SAVE_COPYWRITING_INFOMATION: "SAVE_COPYWRITING_INFOMATION", - SAVE_SD_CONFIG: "SAVE_SD_CONFIG", - SAVE_GENERAL_SETTING: "SAVE_GENERAL_SETTING", - GET_VIDEO_CONFIG_MESSAGE: "GET_VIDEO_CONFIG_MESSAGE", - GET_SYSTEM_INSTALL_FONTNAME: "GET_SYSTEM_INSTALL_FONTNAME", - SAVE_ASS_CONFIG: "SAVE_ASS_CONFIG", - DELETE_VIDEO_CONFIG: "DELETE_VIDEO_CONFIG", - SHOW_NEW_WINDOW: "SHOW_NEW_WINDOW", - GET_DRAFT_FILE_LIST: "GET_DRAFT_FILE_LIST", - SELECT_FOLDER: "SELECT_FOLDER", - GET_DRAFT_TEXT_STYLE: "GET_DRAFT_TEXT_STYLE", - GET_TEXT_STYLE_LIST: "GET_TEXT_STYLE_LIST", - DELETE_DRAFT_TEXT_STYLE: "DELETE_DRAFT_TEXT_STYLE", - ADD_DRAFT: "ADD_DRAFT", - RETURN_IMAGE_PROMPT: "RETURN_IMAGE_PROMPT", - RE_GENERATE_IAMGE_ONE: "RE_GENERATE_IAMGE_ONE", - INIT_SD_CONFIG: "INIT_SD_CONFIG", - ADD_IMAGE_TASK_LIST: "ADD_IMAGE_TASK_LIST", - GET_GENERATE_TASK_LIST: "GET_GENERATE_TASK_LIST", - DELETE_IMAGE_TASK_LIST: "DELETE_IMAGE_TASK_LIST", - GENERATE_IMAGWE_IN_SELECT_TASK: "GENERATE_IMAGWE_IN_SELECT_TASK", - GET_MACHINE_ID: "GET_MACHINE_ID", - QUIT_APP: "QUIT_APP", - GET_BAD_PROMPT: "GET_BAD_PROMPT", - SAVE_BAD_PROMPT: "SAVE_BAD_PROMPT", - DELETE_BAD_PROMPT: "DELETE_BAD_PROMPT", - ADD_WEBUI_JSON: "ADD_WEBUI_JSON", - OPEN_GPT_BUY_URL: "OPEN_GPT_BUY_URL", - GET_IAMGE_PROMPT_LIST: "GET_IAMGE_PROMPT_LIST", - GET_ADETAILER_LIST: "GET_ADETAILER_LIST", - SAVE_DETAILER_CONFIG: "SAVE_DETAILER_CONFIG", - OPEN_URL: "OPEN_URL", - GET_VERSION: "GET_VERSION", - GET_FRAME_RETUN: "GET_FRAME_RETUN", - DOWNLOAD_MODEL: "DOWNLOAD_MODEL", - START_STORY_BOARDING: "START_STORY_BOARDING", - SHOW_MESSAGE_DIALOG: "SHOW_MESSAGE_DIALOG", - SHOW_GLOABAL_MESSAGE_DIALOG: "SHOW_GLOABAL_MESSAGE_DIALOG", - IMAGE_TASK_STATUS_REFRESH: "IMAGE_TASK_STATUS_REFRESH", - SAVE_TRIAL_END_TIME: "SAVE_TRIAL_END_TIME", - DOWNLOAD_IMAGE_FILE: "DOWNLOAD_IMAGE_FILE", - OPEN_FOLDER: "OPEN_FOLDER", - VIDEO_GENERATE_STATUS_REFRESH: "VIDEO_GENERATE_STATUS_REFRESH", - AUTO_CONDITION_CHECK: "AUTO_CONDITION_CHECK", - MODIFY_IMAGE_TASK_LIST: "MODIFY_IMAGE_TASK_LIST", - ACTION_AUTO_VIDEO_TASK: "ACTION_AUTO_VIDEO_TASK", - GET_VIDEO_GENERATE_CONFIG: "GET_VIDEO_GENERATE_CONFIG", - TRANSLATE_PROMPT: "TRANSLATE_PROMPT", - TRANSLATE_RETURN_NOW: "TRANSLATE_RETURN_NOW", - TRANSLATE_RETURN_REFRESH: "TRANSLATE_RETURN_REFRESH", - GET_SHOW_MESSAGE: "GET_SHOW_MESSAGE", - AUTO_ANALYZE_CHARACTER: "AUTO_ANALYZE_CHARACTER", - GET_CONFIG_JSON: "GET_CONFIG_JSON", - ORIGINAL_ADD_WEBUI_JSON: "ORIGINAL_ADD_WEBUI_JSON", - GET_PROMPT_JSON: "GET_PROMPT_JSON", - GPT_PROMPT: "GPT_PROMPT", - GPT_GENERATE_PROMPT_RETURN: "GPT_GENERATE_PROMPT_RETURN", - AUTO_SAVE_DATA_JSON: "AUTO_SAVE_DATA_JSON", - ORIGINAL_SD_SINGLE_IMAGE_GENERATE: "ORIGINAL_SD_SINGLE_IMAGE_GENERATE", - SD_ORIGINAL_GENERATE_IMAGE_RETURN: "SD_ORIGINAL_GENERATE_IMAGE_RETURN", - GET_STYLE_IMAGE_SUB_LIST: "GET_STYLE_IMAGE_SUB_LIST", - GET_IMAGE_STYLE_INFOMATION: "GET_IMAGE_STYLE_INFOMATION", - GET_IMAGE_STYLE_MENU: "GET_IMAGE_STYLE_MENU", - GET_GPT_BUSINESS_OPTION: "GET_GPT_BUSINESS_OPTION", - GET_GPT_MODEL_OPTION: "GET_GPT_MODEL_OPTION", - GET_GPT_AUTO_INFERENCE_OPTIONS: "GET_GPT_AUTO_INFERENCE_OPTIONS", - SAVE_DYNAMIC_GPT_OPTION: "SAVE_DYNAMIC_GPT_OPTION", - DELETE_DYNAMIC_GPT_OPTION: "DELETE_DYNAMIC_GPT_OPTION", - TEST_GPT_CONNECTION: "TEST_GPT_CONNECTION", - SAVE_WORD_TXT: "SAVE_WORD_TXT", - GET_KEY_FRAME_CONFIG_DATA: "GET_KEY_FRAME_CONFIG_DATA", - GET_KEYFRAME_OPTIONS: "GET_KEYFRAME_OPTIONS", - - QUEUE_BATCH: { - SD_ORIGINAL_GENERATE_IMAGE: "SD_ORIGINAL_GENERATE_IMAGE", - SD_ORIGINAL_GPT_PROMPT: "SD_ORIGINAL_GPT_PROMPT", - SD_BACKSTEP_GENERATE_IMAGE: "SD_BACKSTEP_GENERATE_IMAGE", - MJ_ORIGINAL_GENERATE_IMAGE: "MJ_ORIGINAL_GENERATE_IMAGE", - LOCAL_IMAGE_IMPROVE: "LOCAL_IMAGE_IMPROVE", - AUTO_VIDEO_GENERATE: "AUTO_VIDEO_GENERATE", - AUTO_VIDEO_GENERATE_SINGLE: "AUTO_VIDEO_GENERATE_SINGLE", - TRANSLATE_PROMPT: "TRANSLATE_PROMPT", - TRANSLATE_RETURN_NOW_TASK: "TRANSLATE_RETURN_NOW_TASK", - IMAGE_SAVE_TO_OTHER_FOLDER: "IMAGE_SAVE_TO_OTHER_FOLDER", - SAVE_FILE_QUEUE: "SAVE_FILE_QUEUE", - }, - PERMISSIONS: { - NORMAL_PERMISSION: "NORMAL_PERMISSION", - AUTO_SAVE_IMAGE_PERMISSION: "AUTO_SAVE_IMAGE_PERMISSION", - }, - MJ: { - SAVE_WORD_SRT: "SAVE_WORD_SRT", - GET_MJ_CONFIG_SRT_INFORMATION: "GET_MJ_CONFIG_SRT_INFORMATION", - GET_TAG_DATA_BY_TYPE_AND_PROPERTY: "GET_TAG_DATA_BY_TYPE_AND_PROPERTY", - SAVE_TAG_PROPERTY_DATA: "SAVE_TAG_PROPERTY_DATA", - DELETE_TAG_PROPERTY_DATA: "DELETE_TAG_PROPERTY_DATA", - GET_TAG_SELECT_MODEL: "GET_TAG_SELECT_MODEL", - TRANSLATE_RETURN_NOW_TASK: "TRANSLATE_RETURN_NOW_TASK", - ORIGINAL_MJ_IMAGE_GENERATE: "ORIGINAL_MJ_IMAGE_GENERATE", - GET_CHANNEL_ROBOTS: "GET_CHANNEL_ROBOTS", - GET_MJ_GENERATE_CATEGORY: "GET_MJ_GENERATE_CATEGORY", - IMAGE_SPLIT: "IMAGE_SPLIT", - ADD_MJ_BAD_PROMPT: "ADD_MJ_BAD_PROMPT", - MJ_BAD_PROMPT_CHECK: "MJ_BAD_PROMPT_CHECK", - GET_GENERATED_MJ_IMAGE_AND_SPLIT: "GET_GENERATED_MJ_IMAGE_AND_SPLIT", - DOWNLOAD_IMAGE_URL_AND_SPLIT: "DOWNLOAD_IMAGE_URL_AND_SPLIT" - }, - DISCORD: { - OPERATE_REFRASH_DISCORD_URL: "OPERATE_REFRASH_DISCORD_URL", - GET_DISCORD_WINDOW_URL: "GET_DISCORD_WINDOW_URL", - CREATE_MESSAGE: "CREATE_MESSAGE", - UPDATE_MESSAGE: "UPDATE_MESSAGE", - DELETE_MESSAGE: "DELETE_MESSAGE", - MAIN_DISCORD_MESSAGE_CHANGE: "MAIN_DISCORD_MESSAGE_CHANGE", - }, - DISCORD_REQUEST_LISTENER_TYPE: { - INPUT_MODEL_IMAGINE_REQUEST: "INPUT_MODEL_IMAGINE_REQUEST", - }, - DISCORD_SIMPLE_DATA_TYPE: { - URL: "URL", - TOKEN: "TOKEN", - }, - MAIN: { - OPEN_DISCORD_WINDOW: "OPEN_DISCORD_WINDOW" - } -} \ No newline at end of file diff --git a/src/define/iamgeStyleDefine.js b/src/define/iamgeStyleDefine.js deleted file mode 100644 index 7cf0548..0000000 --- a/src/define/iamgeStyleDefine.js +++ /dev/null @@ -1,2265 +0,0 @@ -import { SdSettingDefine } from "./setting/sdSettingDefine"; - -const ImageStyleDefine = { - image_style: [{ - "sheet": 1, - "name": "常用画风", - "subStyle": [{ - "chinese_style": "壁纸", - "english_style": "Wallpaper", - "id": "238f8db1-3b9f-48b8-86de-b47c70dbdc25", - "image": "image8.jpeg" - }, { - "chinese_style": "黑白漫画", - "english_style": "Black and white comics", - "id": "bb314303-4f94-4a9a-b9cc-2f0eca64e288", - "image": "image2.jpeg" - }, { - "chinese_style": "水墨风格", - "english_style": "Ink and wash style", - "id": "078dc21d-669c-4a60-8036-2705dfb1d6b6", - "image": "image3.jpeg" - }, { - "chinese_style": "超写实风格", - "english_style": "Super realistic style", - "id": "81dd155f-f69d-4ed0-9fdd-6f639e5e6d06", - "image": "image4.jpeg" - }, { - "chinese_style": "电影截图", - "english_style": "Screenshots of movies", - "id": "3923dfb8-3394-4e6f-a9f4-55caf24b3991", - "image": "image5.jpeg" - }, { - "chinese_style": "宫崎骏漫画风格", - "english_style": "Miyazaki Hayao manga style", - "id": "b1869409-8079-4934-b6b1-b26cf4606e65", - "image": "image6.jpeg" - }, { - "chinese_style": "可爱风格", - "english_style": "cute style", - "id": "79feb583-f4e3-4d35-b7f2-31021693bb90", - "image": "image7.jpeg" - }, { - "chinese_style": "简笔画风格", - "english_style": "Simple stroke style", - "id": "0378c4d7-676f-4693-925a-112d2f8fd76b", - "image": "image1.jpeg" - }, { - "chinese_style": "3D卡通动画", - "english_style": "3D cartoon animation", - "id": "a5732ec7-3b49-40d8-8bbc-ac213ec77df7", - "image": "image11.jpeg" - }, { - "chinese_style": "90年代日本动漫", - "english_style": "90s Japanese anime", - "id": "a9f5eb3b-d4ae-4ba4-aa43-0198f36b6147", - "image": "image9.jpeg" - }, { - "chinese_style": "水彩画风格", - "english_style": "Watercolor painting style", - "id": "9d1e4c03-0406-44cc-88f9-21c117a3c88b", - "image": "image10.jpeg" - }, { - "chinese_style": "钢笔画风格", - "english_style": "Pen drawing style", - "id": "392067d1-cd6e-4baa-b2d3-f319b892f78c", - "image": "image12.jpeg" - }, { - "chinese_style": "恐怖漫画风格", - "english_style": "Horror comic style", - "id": "0e8a0c64-04e8-4370-ad2a-06148afa0662", - "image": "image13.jpeg" - }], - "id": "07246bd9-b811-4e00-b69b-f86c48f2660b" - }, { - "sheet": 2, - "name": "时代风格词", - "subStyle": [{ - "chinese_style": "中世纪时代", - "english_style": "middle ages", - "id": "c0f55669-a90e-4024-9c5c-fe4614eabe29", - "image": "image16.jpeg" - }, { - "chinese_style": "冷战时代", - "english_style": "cold war era", - "id": "e2c3b92b-ab4d-44fd-a477-7e308a4e9dfb", - "image": "image19.jpeg" - }, { - "chinese_style": "古典时代", - "english_style": "classical antiquity", - "id": "f5e943bd-0e34-4f5e-baac-1c2e0304c0cf", - "image": "image20.jpeg" - }, { - "chinese_style": "柴油朋克时代", - "english_style": "diesel punk", - "id": "a2ffb049-2c5b-4f3f-9cef-d27e7d8d8ab0", - "image": "image21.jpeg" - }, { - "chinese_style": "哥特式时代", - "english_style": "gothic period", - "id": "db5e8036-7f8c-4047-8c3d-f64f010fc4dd", - "image": "image14.jpeg" - }, { - "chinese_style": "中国战国时代", - "english_style": "warring states period", - "id": "ba0ae70c-37de-40e3-9dc8-08a7e03de123", - "image": "image17.jpeg" - }, { - "chinese_style": "日本明治时代", - "english_style": "meiji period", - "id": "a465ddc1-9782-430b-b09c-7a79effc1c29", - "image": "image15.jpeg" - }, { - "chinese_style": "现代", - "english_style": "modern", - "id": "a12c8315-28c0-42bd-a3ec-a856d48f5161", - "image": "image18.jpeg" - }, { - "chinese_style": "文艺复兴时代", - "english_style": "renaissance", - "id": "e1329854-1df1-4664-9ca2-27c8f905f2d3", - "image": "image25.jpeg" - }, { - "chinese_style": "中国宋代", - "english_style": "song dynasty", - "id": "df196ffe-012a-4fe5-8db3-d89046d5eb39", - "image": "image26.jpeg" - }, { - "chinese_style": "古埃及时代", - "english_style": "ancient egypt", - "id": "27c5c5df-4b9f-487c-8884-4c50035f4bc6", - "image": "image23.jpeg" - }, { - "chinese_style": "蒸汽朋克时代", - "english_style": "steampunk", - "id": "62018708-10c6-4a1f-8c35-9c162278686f", - "image": "image28.jpeg" - }, { - "chinese_style": "中国明代", - "english_style": "ming dynasty", - "id": "20c9f4cf-99ec-4550-a965-768190d91498", - "image": "image29.jpeg" - }, { - "chinese_style": "青铜时代", - "english_style": "bronze age", - "id": "6ef8bd4f-c843-435c-9d31-ca2f36add104", - "image": "image22.jpeg" - }, { - "chinese_style": "中国唐代", - "english_style": "tang dynasty", - "id": "950518dc-e87b-4be8-8487-8b732b52e175", - "image": "image27.jpeg" - }, { - "chinese_style": "赛博朋克时代", - "english_style": "cyberpunk", - "id": "8e012231-4e38-4d6d-b18c-4e03f1ef45f1", - "image": "image24.jpeg" - }, { - "chinese_style": "工业革命时代", - "english_style": "industrial revolution", - "id": "8a46b74f-91b5-40d5-bec7-afba88b5abb1", - "image": "image30.jpeg" - }, { - "chinese_style": "日本江户时代", - "english_style": "edo period", - "id": "5ab22ed5-b284-4f79-be4f-7c6aef329151", - "image": "image31.jpeg" - }], - "id": "ade4cf78-7bef-43c8-9d13-c2ea5c3f9f38" - }, { - "sheet": 3, - "name": "画家画风风格词", - "subStyle": [{ - "chinese_style": "潘天寿(古风画风-成熟)", - "english_style": "Pan Tianshou", - "id": "6d54b67f-08e3-40ac-816f-d4081ad7d9e2", - "image": "image35.jpeg" - }, { - "chinese_style": "朱屺瞻(古风画风-艳丽)", - "english_style": "Zhu Qizhan", - "id": "121b3d63-b0b2-4dd4-aaa4-e2c3e8d89d76", - "image": "image36.jpeg" - }, { - "chinese_style": "齐白石(古风画风-简约)", - "english_style": "Qi Baishi", - "id": "bc76a884-afac-450e-88cc-54f65c504a7c", - "image": "image37.jpeg" - }, { - "chinese_style": "张大千(古风画风-可爱)", - "english_style": "Zhang Daqian", - "id": "a85caede-767a-4b8b-b14a-981656415637", - "image": "image33.jpeg" - }, { - "chinese_style": "亨利·马蒂斯(都市画风-时尚)", - "english_style": "Henri Matisse", - "id": "9b7e83e6-dc18-41b8-8887-176794a615c3", - "image": "image38.jpeg" - }, { - "chinese_style": "乔治亚·欧姬芙(都市画风-欧美)", - "english_style": "Georgia O'Keeffe", - "id": "ca757d22-c5fc-4974-9768-16323957fe85", - "image": "image32.jpeg" - }, { - "chinese_style": "格伦·基恩(迪斯尼-美女与野兽风)", - "english_style": "Glen Keane", - "id": "1a5655c9-6800-42ab-aa88-7ab2c77c8c0c", - "image": "image39.jpeg" - }, { - "chinese_style": "根迪·塔尔塔科夫斯基(欧美动画风)", - "english_style": "Genndy Tartakovsky", - "id": "60357799-3cba-4809-b50c-db804783599d", - "image": "image34.jpeg" - }, { - "chinese_style": "克雷格·汤普森(都市画风-细腻)", - "english_style": "Craig Thompson", - "id": "a6806093-372a-44f0-8967-d764b1e90709", - "image": "image40.jpeg" - }, { - "chinese_style": "亨利·马蒂斯(都市画风-流行)", - "english_style": "Henri Matisse", - "id": "fac9dd65-8a92-43ab-b026-63231ebf6de2", - "image": "image44.jpeg" - }, { - "chinese_style": "伊藤润二(日式恐怖画风)", - "english_style": "Junji Ito", - "id": "0115613d-ee65-4d32-b9a5-eeb57cdc708d", - "image": "image45.jpeg" - }, { - "chinese_style": "朴泰俊(小鲜肉都市风)", - "english_style": "Park Tae", - "id": "80d2fb78-2a69-4314-989d-57734dce6789", - "image": "image41.jpeg" - }, { - "chinese_style": "朴智旻(都市恋爱风)", - "english_style": "Park Ji", - "id": "6b4c5150-82e0-4259-9617-59434291e4b5", - "image": "image42.jpeg" - }, { - "chinese_style": "金瑞亨(韩风都市恋爱)", - "english_style": "Kim Hyeong", - "id": "f1fee049-109c-4b85-83bf-ed3ed5554f7f", - "image": "image43.jpeg" - }, { - "chinese_style": "查克·琼斯(欧美动画风-猫和老鼠)", - "english_style": "Chuck Jones", - "id": "21c0e23f-d98b-41f0-b351-cb1b47f462ee", - "image": "image46.jpeg" - }, { - "chinese_style": "高畑勋(日式动漫风)", - "english_style": "Isao Takahata", - "id": "55868e27-cc28-4830-b6c9-46096416b03d", - "image": "image47.jpeg" - }, { - "chinese_style": "淺野恭司(细腻日漫)", - "english_style": "Kyoji Asano", - "id": "126ec922-c45d-4a83-b9d7-48f04513cad0", - "image": "image48.jpeg" - }, { - "chinese_style": "卡洛斯·达托利(都市少男风)", - "english_style": "Carlos Dattoli", - "id": "a7aee025-fc08-4e66-82ba-42f38b7d3405", - "image": "image49.jpeg" - }, { - "chinese_style": "库夫希诺夫·伊利亚(都市少女风)", - "english_style": "Kuvshinov Ilya", - "id": "a9679671-a1b9-472b-be78-4fd91adc9e02", - "image": "image50.jpeg" - }, { - "chinese_style": "加里·拉尔森、杰拉德·乌克盖斯特(美式漫画)", - "english_style": "Gary Larson, Gerard Houckgeest", - "id": "c1eb9ca2-4d89-4636-b1ff-7f83d7eba781", - "image": "image54.jpeg" - }, { - "chinese_style": "阮佳(国风插画)", - "english_style": "Ruan Jia", - "id": "32afc969-622a-4792-a270-02cf6952d805", - "image": "image51.jpeg" - }, { - "chinese_style": "保罗·罗沃西、塞西莉·布朗(欧美风偏质感)", - "english_style": "Paolo roversi, Cecily brown", - "id": "f9860c1f-8552-4514-8be7-617527d51f0b", - "image": "image52.jpeg" - }, { - "chinese_style": "山田尚子(日式少女风)", - "english_style": "Naoko Yamada", - "id": "ad6ed3d9-a153-487e-9cd5-8447f99ce43b", - "image": "image53.jpeg" - }, { - "chinese_style": "木村贵宏(日式动漫风)", - "english_style": "Takahiro Kimura", - "id": "199934ed-5d7e-4af7-979b-0b2dd4862199", - "image": "image55.jpeg" - }, { - "chinese_style": "安德烈亚斯·-罗查(欧美风偏细节色彩)", - "english_style": "Andreas Rocha", - "id": "f6358e01-7276-4f26-96c8-56a619ae3126", - "image": "image70.jpeg" - }, { - "chinese_style": "凉香(日式古风)", - "english_style": "Ryohka", - "id": "824b9390-9787-44de-ab43-da5d647101ad", - "image": "image71.jpeg" - }, { - "chinese_style": "丽贝卡·盖伊(西方魔幻)", - "english_style": "Rebecca Guay", - "id": "5d2234ce-d0d8-4330-93d5-21a81d6486d5", - "image": "image64.jpeg" - }, { - "chinese_style": "克雷格·穆林斯(西方末日科幻)", - "english_style": "Craig Mullins", - "id": "a66f32dd-2b73-4d6c-8d83-cc1a37dae7ea", - "image": "image65.jpeg" - }, { - "chinese_style": "小林修(日式画风)", - "english_style": "Osamu Kobayashi", - "id": "a9e9c6ab-02d1-406b-b730-9d4ece86d29c", - "image": "image66.jpeg" - }, { - "chinese_style": "池上辽一(日式画风)", - "english_style": "Ryoichi Ikegami", - "id": "aea0beec-32ea-42c7-9891-09616a01a424", - "image": "image69.jpeg" - }, { - "chinese_style": "岸本齐史(火影忍着风)", - "english_style": "Masashi Kishimoto", - "id": "2ef699da-781d-4f05-9239-6d027d34c42c", - "image": "image67.jpeg" - }, { - "chinese_style": "沃尔特·迪斯尼(迪斯尼风)", - "english_style": "Walt Disney", - "id": "6befee18-2232-4a3e-b1a5-d206d5e29138", - "image": "image68.jpeg" - }, { - "chinese_style": "久保带人(死神画风)", - "english_style": "Tite Kubo", - "id": "c26be074-bc44-41bc-b36c-97845c8fb544", - "image": "image62.jpeg" - }, { - "chinese_style": "谏山创(进击的巨人画风)", - "english_style": "Hajime Isayama", - "id": "5ceeedb9-4977-49f4-9122-220165784683", - "image": "image63.jpeg" - }, { - "chinese_style": "新海诚", - "english_style": "Makoto Shinkai", - "id": "9cc4611f-4ebe-449f-ae9c-3502a37a857e", - "image": "image60.jpeg" - }, { - "chinese_style": "武内直子(美少女战士画风)", - "english_style": "Naoko Takeuchi", - "id": "9176dac9-deaa-4e19-8d0f-e586437d251f", - "image": "image56.jpeg" - }, { - "chinese_style": "濑户目鹤(日漫风)", - "english_style": "Koyori", - "id": "321322f7-0f12-47d5-9d53-1945b8ef4516", - "image": "image57.jpeg" - }, { - "chinese_style": "细田守(日本动漫风)", - "english_style": "Mamoru Hosoda", - "id": "9e2db099-5996-4e8a-8e86-37f8fc81fa1a", - "image": "image58.jpeg" - }, { - "chinese_style": "约翰·拉塞特(欧美动画风)", - "english_style": "John Lasseter", - "id": "d7f5278d-d242-4834-ab82-2adfc11231e8", - "image": "image61.jpeg" - }, { - "chinese_style": "蒂姆·伯顿(魔发奇缘风-暗黑魔幻)", - "english_style": "Tim Burton", - "id": "c104bba3-6611-4178-93d8-2f988fb83fc7", - "image": "image59.jpeg" - }, { - "chinese_style": "鸟山明(龙珠画风)", - "english_style": "Akira Toriyama", - "id": "e51d4ad6-816d-4534-89e0-3fdaf7a3916c", - "image": "image72.jpeg" - }, { - "chinese_style": "高桥留美子(犬夜叉画风)", - "english_style": "Rumiko Takahashi", - "id": "589a6e3d-4707-4eba-8650-e479fe56aa49", - "image": "image73.jpeg" - }, { - "chinese_style": "庵野秀明(EVA画风)", - "english_style": "Hideaki Anno", - "id": "1ba9073e-b530-4520-893e-4f7eb2c8cba6", - "image": "image76.jpeg" - }, { - "chinese_style": "宫崎骏(日式动漫风)", - "english_style": "Hayao Miyazaki", - "id": "92b59244-5b26-47e2-a542-050b28beb631", - "image": "image75.jpeg" - }, { - "chinese_style": "米林宏昌(日式古风)", - "english_style": "hiromasa yonebayashi", - "id": "5f3bfcdd-d6f9-40c8-8ebb-b423ee768d59", - "image": "image74.jpeg" - }, { - "chinese_style": "男鹿和雄(日漫古风)", - "english_style": "kazuo oga", - "id": "b389d682-0ac2-434c-849a-9ceca0468397", - "image": "image77.jpeg" - }], - "id": "661f3673-b448-49c5-95eb-92416c669f21" - }, { - "sheet": 4, - "name": "中华古风", - "subStyle": [{ - "chinese_style": "张光宇风格", - "english_style": "Zhang Guangyu style", - "id": "f67e1f1f-3824-4190-aa7b-22a4ceefc803", - "image": "image85.jpeg" - }, { - "chinese_style": "丰子恺风格", - "english_style": "Feng Zikai style", - "id": "0c6e2462-82a2-492d-8f00-e0571099230a", - "image": "image83.jpeg" - }, { - "chinese_style": "蔡志忠风格", - "english_style": "Cai Zhong style", - "id": "ddc1adda-5bc5-4779-9f70-942f5c8bc739", - "image": "image82.jpeg" - }, { - "chinese_style": "马荣成风格", - "english_style": "Ma Rongcheng style", - "id": "c6ecceb3-4000-4846-ad54-160f7f92ac68", - "image": "image78.jpeg" - }, { - "chinese_style": "陈某风格", - "english_style": "Chen Someone style", - "id": "85cd0650-a62a-4123-a7ac-ae7ecfe549c7", - "image": "image84.jpeg" - }, { - "chinese_style": "夏达风格", - "english_style": "Xia Da style", - "id": "3317e89f-c828-4a60-bab7-9935dd2f841c", - "image": "image79.jpeg" - }, { - "chinese_style": "猫君风格", - "english_style": "Cat Jun style", - "id": "5db7dfa4-306b-4c0f-a8ca-314037c32839", - "image": "image80.jpeg" - }, { - "chinese_style": "Left Hand Han style", - "english_style": "左手韩风格", - "id": "eed2d205-3818-4b3d-9d2a-98a5140cd97e", - "image": "image81.jpeg" - }, { - "chinese_style": "阿梗风格", - "english_style": "A Geng style", - "id": "ad75eb08-6e12-4707-affb-7292471b82c7", - "image": "image89.jpeg" - }, { - "chinese_style": "本杰明风格", - "english_style": "Benjamin style", - "id": "00638bad-7919-4bbe-844d-89bf78787df8", - "image": "image88.jpeg" - }, { - "chinese_style": "寂地风格", - "english_style": "Ji Di style", - "id": "f041d7d9-485f-4ef8-a3ee-a63a480d9980", - "image": "image86.jpeg" - }, { - "chinese_style": "鹿菏风格", - "english_style": "Lu He style", - "id": "33aa10c2-1d70-46b4-b847-bed5eb9f5f41", - "image": "image87.jpeg" - }], - "id": "fc8d672d-8482-445b-8652-a7d8910c621c" - }, { - "sheet": 5, - "name": "中国都市漫画作者风格", - "subStyle": [{ - "chinese_style": "姚非拉风格", - "english_style": "Yao Feila style", - "id": "ad83c246-6c22-42ac-9049-e6e1e3f82022", - "image": "image93.jpeg" - }, { - "chinese_style": "慕容引刀风格", - "english_style": "Murong Yindao style", - "id": "845ec4a6-a1bf-42b3-b2f5-503bae91e24b", - "image": "image90.jpeg" - }, { - "chinese_style": "使徒子风格", - "english_style": "Apostle style", - "id": "59c26e38-33f1-44ad-a471-d747babd0cee", - "image": "image94.jpeg" - }, { - "chinese_style": "幽·灵风格", - "english_style": "Youling style", - "id": "0f6e1954-2b2b-418c-b36b-bb833a49d131", - "image": "image91.jpeg" - }, { - "chinese_style": "猫树风格", - "english_style": "Cat Tree style", - "id": "afed5230-a76a-4709-be26-30040f2a9418", - "image": "image95.jpeg" - }, { - "chinese_style": "青鸟动漫风格", - "english_style": "Blue Bird Animation style", - "id": "06900981-ac49-4b03-b327-512f4b36bcbf", - "image": "image92.jpeg" - }, { - "chinese_style": "阿尤风格", - "english_style": "A You style", - "id": "82887dc9-eb51-4168-91e5-73467c1d9bf5", - "image": "image96.jpeg" - }, { - "chinese_style": "张小溪风格", - "english_style": "Zhang Xiaoxi style", - "id": "1d2901e9-c79c-42b7-843e-0a32be80f420", - "image": "image97.jpeg" - }, { - "chinese_style": "阿衰风格", - "english_style": "A Shuai style", - "id": "83e99b4d-0702-4cf8-a93e-af2a07f10858", - "image": "image99.jpeg" - }, { - "chinese_style": "丁墨风格", - "english_style": "Ding Mo style", - "id": "193a8cb3-d9a7-4f42-9c2f-7c538d45e795", - "image": "image100.jpeg" - }, { - "chinese_style": "老夫子风格", - "english_style": "Old Master style", - "id": "0eab7213-51fe-42cb-9330-c95b0d991d5b", - "image": "image98.jpeg" - }], - "id": "ac972ea7-e2db-48be-9b66-1d914b059b77" - }, { - "sheet": 6, - "name": "都市漫画", - "subStyle": [{ - "chinese_style": "现代都市生活", - "english_style": "Modern city life", - "id": "10d307a4-50ad-4919-afaf-754a9570a7ad", - "image": "image105.jpeg" - }, { - "chinese_style": "职场奋斗", - "english_style": "Workplace struggles", - "id": "79b593b1-fe8c-4a94-a6d0-f2d160c3d005", - "image": "image101.jpeg" - }, { - "chinese_style": "青春校园", - "english_style": "Youthful school life", - "id": "c1d691e9-1211-492f-bebb-71e3106ff35b", - "image": "image102.jpeg" - }, { - "chinese_style": "浪漫爱情", - "english_style": "Romantic love story", - "id": "1b711f31-2e3b-423f-b27f-dba57b760e33", - "image": "image103.jpeg" - }, { - "chinese_style": "悬疑侦探", - "english_style": "Mystery and detective", - "id": "4352c2b1-5cf0-4654-995d-2658f668f6fb", - "image": "image106.jpeg" - }, { - "chinese_style": "超能力者", - "english_style": "Individuals with superpowers", - "id": "acb3a28e-2957-442e-ad47-6550d5af1a94", - "image": "image104.jpeg" - }, { - "chinese_style": "青春成长", - "english_style": "Coming of age", - "id": "31779554-fbea-447f-a9f7-57cdf5aefffd", - "image": "image107.jpeg" - }, { - "chinese_style": "日常生活", - "english_style": "Slice of life", - "id": "4688a2b4-d1e7-4bff-9d9e-e7c740bd0269", - "image": "image108.jpeg" - }, { - "chinese_style": "都市异闻", - "english_style": "Urban legends and folklore", - "id": "0bbec8ab-4e11-430c-a857-1b1693d1ca31", - "image": "image112.jpeg" - }, { - "chinese_style": "时尚潮流", - "english_style": "Fashion and trends", - "id": "59610aa3-1cb0-498e-a701-9ed0456085a6", - "image": "image110.jpeg" - }, { - "chinese_style": "社交网络", - "english_style": "Social media and relationships", - "id": "74549157-8829-45b4-a608-b9752dfcb84f", - "image": "image111.jpeg" - }, { - "chinese_style": "都市奇幻", - "english_style": "Urban fantasy", - "id": "235b4431-f310-4dd0-a6dc-f42cbb7ddf29", - "image": "image109.jpeg" - }], - "id": "c9d2846d-c8c0-40b0-ad9e-ee882aa6efcf" - }, { - "sheet": 7, - "name": "悬疑故事画风", - "subStyle": [{ - "chinese_style": "悬疑恐怖故事", - "english_style": "Suspenseful horror stories", - "id": "97dc5f98-c241-43c8-a918-ab9788b5e982", - "image": "image119.jpeg" - }, { - "chinese_style": "古堡探险", - "english_style": "Castle exploration", - "id": "e8370048-ee70-4664-8b91-a50fee0f93f5", - "image": "image117.jpeg" - }, { - "chinese_style": "失踪之谜", - "english_style": "Mystery of disappearance", - "id": "6145e00c-f5ce-4f4d-97ff-91939c26f92e", - "image": "image115.jpeg" - }, { - "chinese_style": "诡异事件调查", - "english_style": "Investigation of eerie events", - "id": "cd6b74f2-6599-4bd9-9282-84fabfa0e558", - "image": "image113.jpeg" - }, { - "chinese_style": "禁忌解密", - "english_style": "Forbidden decryption", - "id": "b4673555-6dd6-4a7c-95ac-f728ab587fd7", - "image": "image118.jpeg" - }, { - "chinese_style": "幽灵传说", - "english_style": "Ghost legends", - "id": "5d4ace6c-476a-4ae8-a621-ece0dd59c831", - "image": "image120.jpeg" - }, { - "chinese_style": "恐怖短片", - "english_style": "Horror short films", - "id": "9191e13c-2add-41e9-a68f-cee5828c6b55", - "image": "image116.jpeg" - }, { - "chinese_style": "神秘案件破解", - "english_style": "Solving mysterious cases", - "id": "b132999e-3bf5-4828-a963-8f83892f8c40", - "image": "image114.jpeg" - }, { - "chinese_style": "阴谋追踪", - "english_style": "Conspiracy tracking", - "id": "79b40a23-05f4-4915-aa6a-be916e471699", - "image": "image121.jpeg" - }], - "id": "7e83b352-ae2f-4617-91a4-ad10ebc7dd13" - }, { - "sheet": 8, - "name": "3D动画", - "subStyle": [{ - "chinese_style": "皮克斯电影", - "english_style": "Pixar Movie Style", - "id": "2e65894e-6d8b-475e-a93b-f93929860eb3", - "image": "image129.jpeg" - }, { - "chinese_style": "梦工厂电影风格", - "english_style": "Dream Factory Movie Style", - "id": "c4df479b-49fc-49b9-a24c-f901056774e2", - "image": "image130.jpeg" - }, { - "chinese_style": "迪士尼", - "english_style": "Disney", - "id": "9de96904-a2e6-4506-9a5d-be5bd79c9df4", - "image": "image126.jpeg" - }, { - "chinese_style": "哥伦比亚电影公司", - "english_style": "Columbia Pictures", - "id": "0836e43b-0cc6-49f6-894e-e5ed4205c192", - "image": "image131.jpeg" - }, { - "chinese_style": "索尼动画", - "english_style": "Sony Pictures Animation", - "id": "1773b5a6-6109-4bbe-8213-185559689d81", - "image": "image127.jpeg" - }, { - "chinese_style": "蓝天工作室", - "english_style": "Blue Sky Studios", - "id": "ed7dfdd1-6775-4ecb-9110-eb0ac26cd122", - "image": "image132.jpeg" - }, { - "chinese_style": "卡通网络动画", - "english_style": "Cartoon Network Studios", - "id": "37dd259a-1f42-403f-ad36-66e497bdf6e4", - "image": "image128.jpeg" - }, { - "chinese_style": "漫威动画", - "english_style": "Marvel Animation", - "id": "f4317d2a-e827-4da1-a158-26e33812ea89", - "image": "image133.jpeg" - }, { - "chinese_style": "华纳兄弟动画", - "english_style": "Warner Bros. Animation", - "id": "7f6f85c5-18a7-451a-ae5e-f911331a192a", - "image": "image141.jpeg" - }, { - "chinese_style": "环球影业动画", - "english_style": "Universal Pictures Animation", - "id": "90944358-bc96-4bc9-ad59-373365015725", - "image": "image134.jpeg" - }, { - "chinese_style": "20世纪福克斯动画", - "english_style": "20th Century Fox Animation", - "id": "e3c44ec7-cda7-415e-83fc-fde7b1cf948d", - "image": "image140.jpeg" - }, { - "chinese_style": "派拉蒙动画", - "english_style": "Paramount Animation", - "id": "b4353dab-6bd4-419b-9ccd-5f0c9352690e", - "image": "image135.jpeg" - }, { - "chinese_style": "米高梅动画", - "english_style": "Metro-Goldwyn-Mayer Animation", - "id": "8efe38ae-0b66-4441-b394-c63fc144551e", - "image": "image137.jpeg" - }, { - "chinese_style": "乐高影业", - "english_style": "LEGO Animation", - "id": "6caaddde-97fe-405a-8655-61e12d0434c1", - "image": "image138.jpeg" - }, { - "chinese_style": "迪士尼电视动画", - "english_style": "Disney Television Animation", - "id": "f0eb3c60-94ec-44de-8099-7c6018c454a7", - "image": "image139.jpeg" - }, { - "chinese_style": "尼克儿童动画", - "english_style": "Nickelodeon Animation Studio", - "id": "6174cf18-7114-43f0-b139-1db5fd2ad9bb", - "image": "image136.jpeg" - }, { - "chinese_style": "奈飞动画", - "english_style": "Netflix Animation", - "id": "0df4834b-8867-42b3-b680-80c169ba904e", - "image": "image123.jpeg" - }, { - "chinese_style": "华纳动画组", - "english_style": "Warner Animation Group", - "id": "80406a8b-9a23-4d35-b25e-a8984eb5581c", - "image": "image124.jpeg" - }, { - "chinese_style": "索尼娱乐动画", - "english_style": "Sony Entertainment Animation", - "id": "95f8555f-8615-4484-953b-27f14890b219", - "image": "image122.jpeg" - }, { - "chinese_style": "蓝宝儿动画", - "english_style": "Lionsgate Animation", - "id": "5c4a4871-753a-4825-bc45-93d66e97037c", - "image": "image125.jpeg" - }], - "id": "507a1001-efab-4f23-ba0a-e1b6fc65732a" - }, { - "sheet": 9, - "name": "概念艺术", - "subStyle": [{ - "chinese_style": "幻想题材", - "english_style": "Fantasy theme", - "id": "a0586d4b-5add-436f-aa74-74559f66a000", - "image": "image146.jpeg" - }, { - "chinese_style": "科幻题材", - "english_style": "Science fiction theme", - "id": "939ef719-0785-45ec-8a26-a1e56a740790", - "image": "image142.jpeg" - }, { - "chinese_style": "赛博朋克", - "english_style": "Cyberpunk style", - "id": "f488da0b-c5a4-465e-815e-8f8034ae4394", - "image": "image147.jpeg" - }, { - "chinese_style": "蒸汽朋克", - "english_style": "Steampunk style", - "id": "61d188e6-7f5f-469e-bd30-50f810b1285a", - "image": "image143.jpeg" - }, { - "chinese_style": "超自然现象", - "english_style": "Supernatural phenomena", - "id": "381ec4b4-2bf7-4043-beda-aa0fd65520cd", - "image": "image148.jpeg" - }, { - "chinese_style": "神话传说", - "english_style": "Mythology and legends", - "id": "d554974b-d1c5-47d3-8acc-e71911325360", - "image": "image149.jpeg" - }, { - "chinese_style": "魔法与咒语", - "english_style": "Magic and spells", - "id": "0b505a81-36fd-454c-8ccc-285be256896b", - "image": "image144.jpeg" - }, { - "chinese_style": "幻想生物", - "english_style": "Fantasy creatures", - "id": "a0bcefce-c94d-47b3-bbd5-4d7b6b9cdd01", - "image": "image145.jpeg" - }, { - "chinese_style": "历史重现", - "english_style": "Historical reenactment", - "id": "169249c5-dbf3-4ce8-be7f-47237c8535b2", - "image": "image150.jpeg" - }, { - "chinese_style": "未来都市", - "english_style": "Futuristic cityscape", - "id": "2d0eec27-4bab-42f1-9d8b-7909df82c709", - "image": "image152.jpeg" - }, { - "chinese_style": "末日废土", - "english_style": "Post-apocalyptic wasteland", - "id": "ffc43253-b1a4-4f4a-a5a6-d8b9e62c3208", - "image": "image153.jpeg" - }, { - "chinese_style": "异星世界", - "english_style": "Alien world", - "id": "8b7b821a-7f91-437a-8af9-4841f8a24517", - "image": "image151.jpeg" - }], - "id": "6459007e-cb61-4933-b42e-e2ea19ce1f03" - }, { - "sheet": 10, - "name": "新日本动漫风", - "subStyle": [{ - "chinese_style": "《刀剑神域》", - "english_style": "Sword Art Online style, fantasy and adventure, Kawahara Reki", - "id": "d2048c30-56ad-44be-bdf7-6e04a690c310", - "image": "image163.jpeg" - }, { - "chinese_style": "《东京食尸鬼》", - "english_style": "Sui Ishida style", - "id": "e22b50f6-f0c4-4cf7-97b2-084990537cf0", - "image": "image160.jpeg" - }, { - "chinese_style": "《命运之夜》", - "english_style": "Type-Moon style", - "id": "b97c9b77-c423-41b0-8c80-e19c4fe504ba", - "image": "image161.jpeg" - }, { - "chinese_style": "《狼与香辛料》", - "english_style": "Isuna Hasekura style", - "id": "670a7131-915f-4959-a020-3dd1e3ae1f69", - "image": "image158.jpeg" - }, { - "chinese_style": "《鬼灭之刃》", - "english_style": "Koyoharu Gotouge style", - "id": "907db0cb-24ed-457e-a0c0-c4067184b608", - "image": "image159.jpeg" - }, { - "chinese_style": "《名侦探柯南》", - "english_style": "Gosho Aoyama style", - "id": "3cff985d-2b9c-4d52-b373-adc4a415d487", - "image": "image162.jpeg" - }, { - "chinese_style": "《七原罪》", - "english_style": "Nakaba Suzuki style", - "id": "8d8ca7fc-7d78-4240-a300-274dbbf299cb", - "image": "image164.jpeg" - }, { - "chinese_style": "《妖怪手表》", - "english_style": "Level-5 style", - "id": "0569520e-cc54-4fb8-8f7c-ac7102c557e7", - "image": "image157.jpeg" - }, { - "chinese_style": "《灼眼的夏娜》", - "english_style": "Yashichiro Takahashi style", - "id": "899f56d0-67be-4546-a373-04e6648299ef", - "image": "image165.jpeg" - }, { - "chinese_style": "《命运石之门》", - "english_style": "Chiyomaru Shikura and Nitroplus style", - "id": "b0c30ddf-a77b-48f8-bdfe-d29f94ac7902", - "image": "image166.jpeg" - }, { - "chinese_style": "《化物语》", - "english_style": "Nisio Isin and VOFAN style", - "id": "1d50bf91-22b7-4efa-a5b4-1cce44cb82be", - "image": "image167.jpeg" - }, { - "chinese_style": "《未来日记》", - "english_style": "Sakae Esunostyle style", - "id": "b5aadac7-df6e-44fd-b953-9e83f8bef4b8", - "image": "image169.jpeg" - }, { - "chinese_style": "《Angel Beats!》", - "english_style": "Jun Maeda and Na-Ga style", - "id": "85202d85-4cfc-4439-83d5-4504836905f2", - "image": "image168.jpeg" - }, { - "chinese_style": "《Fate/Zero》", - "english_style": "Gen Urobuchi and Takashi Takeuchi style", - "id": "d5e1f5ef-bb4a-4e40-a51b-bd2045d609b7", - "image": "image172.jpeg" - }, { - "chinese_style": "《Re:从零开始的异世界生活》", - "english_style": "Tappei Nagatsuki and Shinichirou Otsuka style", - "id": "f821ed49-c12f-4f87-b81f-58424610ccd1", - "image": "image170.jpeg" - }, { - "chinese_style": "《OVERLORD》", - "english_style": "Kugane Maruyama and so-bin style", - "id": "1977e489-6693-49a5-ade6-72769a4fde00", - "image": "image171.jpeg" - }, { - "chinese_style": "《约会大作战》", - "english_style": "Koushi Tachibana and Tsunako style", - "id": "e7ca9f27-6937-4100-96ca-706d7efa49ec", - "image": "image155.jpeg" - }, { - "chinese_style": "《Re:CREATORS》", - "english_style": "Rei Hiroe style", - "id": "6acc66f5-79f9-40b3-abb0-6435da43c73b", - "image": "image156.jpeg" - }, { - "chinese_style": "《关于我转生变成史莱姆这档事》", - "english_style": "Rimuru Tempest style", - "id": "1ac9cc4a-f1bb-40ae-a76a-6fd593c7bb04", - "image": "image154.jpeg" - }], - "id": "14c7f9d5-32b8-409b-ad4c-f7217fa3defd" - }, { - "sheet": 11, - "name": "少年日本动漫风", - "subStyle": [{ - "chinese_style": "《Another》", - "english_style": "Yukito Ayatsuji and Hiro Kiyohara style", - "id": "d2329e3e-e8e5-4a95-82d7-09fda8a3f3cb", - "image": "image176.jpeg" - }, { - "chinese_style": "《尸体派对》", - "english_style": "Team GrisGris style", - "id": "436251be-eb1a-4825-9565-a2f4d7201632", - "image": "image177.jpeg" - }, { - "chinese_style": "《妖精森林的小不点》", - "english_style": "Takuto Kashiki style", - "id": "85196b76-ffd9-443d-9827-d6b1b5dd9752", - "image": "image178.jpeg" - }, { - "chinese_style": "《怪谈新耳袋》", - "english_style": "Kyouko Hikawa style", - "id": "447a9b2e-4f3c-47d5-acd6-a9e893d35614", - "image": "image174.jpeg" - }, { - "chinese_style": "《地缚少年花子君》", - "english_style": "Kouji Seo style", - "id": "0021c2d2-8f70-4536-9d88-07f287cb419f", - "image": "image179.jpeg" - }, { - "chinese_style": "《彼岸岛》", - "english_style": "Koji Matsumoto style", - "id": "9d884c85-c7c1-447c-96a6-a05416b5d1e7", - "image": "image180.jpeg" - }, { - "chinese_style": "《龙珠》", - "english_style": "Akira Toriyama style", - "id": "c8c3784a-aad1-4fbd-aa0a-ca18af2efa31", - "image": "image175.jpeg" - }, { - "chinese_style": "《海贼王》", - "english_style": "Eiichiro Oda style", - "id": "1ad0e6e6-4ab0-4669-a932-7ecaeef1090d", - "image": "image173.jpeg" - }, { - "chinese_style": "《火影忍者》", - "english_style": "Masashi Kishimoto style", - "id": "5a198a66-9e62-48c4-aaff-8be6586249be", - "image": "image198.jpeg" - }, { - "chinese_style": "《死神》", - "english_style": "Tite Kubo style", - "id": "cc514c8c-2194-403e-ae57-9733a455f3f2", - "image": "image192.jpeg" - }, { - "chinese_style": "《进击的巨人》", - "english_style": "Hajime Isayama style", - "id": "8c356863-e16d-4a4c-a154-1e4d3836aed9", - "image": "image199.jpeg" - }, { - "chinese_style": "《银魂》", - "english_style": "Hideaki Sorachi style", - "id": "4b98130b-ca33-468a-828e-36461e9f4da4", - "image": "image193.jpeg" - }, { - "chinese_style": "《全职猎人》", - "english_style": "Yoshihiro Togashi style", - "id": "22f84eff-c3d9-4c39-87df-8ab5b8908a78", - "image": "image196.jpeg" - }, { - "chinese_style": "《柯南》", - "english_style": "Gosho Aoyama style", - "id": "00abd3b8-d038-4cb0-bc8a-cf24b1c31f18", - "image": "image197.jpeg" - }, { - "chinese_style": "《妖精的尾巴》", - "english_style": "Hiro Mashima style", - "id": "41fe2942-2a96-4b84-ae9c-93b17d4b71c2", - "image": "image194.jpeg" - }, { - "chinese_style": "《黑子的篮球》", - "english_style": "Tadatoshi Fujimaki style", - "id": "96eb6f9d-9aca-40de-add5-6d27f0768660", - "image": "image195.jpeg" - }, { - "chinese_style": "《我的英雄学院》", - "english_style": "Kohei Horikoshi style", - "id": "3aafb780-ac7f-4e83-b1ae-2145026c24a8", - "image": "image201.jpeg" - }, { - "chinese_style": "《灌篮高手》", - "english_style": "Takehiko Inoue style", - "id": "97cf6531-e726-4e3c-b97f-64e6f0528634", - "image": "image200.jpeg" - }, { - "chinese_style": "《排球少年》", - "english_style": "Haruichi Furudate style", - "id": "c6f8d9e7-3d06-42a1-b255-989a2c711d90", - "image": "image204.jpeg" - }, { - "chinese_style": "《钻石王牌》", - "english_style": "Yuji Terajima style", - "id": "59f88205-0bce-4deb-b09c-f2db188e52ff", - "image": "image205.jpeg" - }, { - "chinese_style": "《浪客剑心》", - "english_style": "Nobuhiro Watsuki style", - "id": "73af468f-0b11-4d2e-9f45-142d4248ffe9", - "image": "image206.jpeg" - }, { - "chinese_style": "《幽游白书》", - "english_style": "Yoshihiro Togashi style", - "id": "816e1234-4126-422b-83a9-af25303c721d", - "image": "image202.jpeg" - }, { - "chinese_style": "《城市猎人》", - "english_style": "Tsukasa Hojo style", - "id": "33900424-0e31-44af-b147-fdd916b1405d", - "image": "image203.jpeg" - }, { - "chinese_style": "《圣斗士星矢》", - "english_style": "Masami Kurumada style", - "id": "d780c5bc-4e54-43d9-8291-ed9fbc39bd5a", - "image": "image207.jpeg" - }, { - "chinese_style": "《铁臂阿童木》", - "english_style": "Osamu Tezuka style", - "id": "edb4c3fa-e4af-40f6-b97f-ab7326088b80", - "image": "image181.jpeg" - }, { - "chinese_style": "《东京爱情故事》", - "english_style": "Yuki Fujimoto style", - "id": "db55ec39-a9bf-47aa-813f-ab3be24254d6", - "image": "image185.jpeg" - }, { - "chinese_style": "《深夜食堂》", - "english_style": "Yaro Abe style", - "id": "95d69b5e-19ec-47ce-92cd-7853cf3aa023", - "image": "image186.jpeg" - }, { - "chinese_style": "《恋爱暴君》", - "english_style": "Megane Mihoshi style", - "id": "1cf0fa67-dc9e-41d8-84ca-184b4e9e54ba", - "image": "image188.jpeg" - }, { - "chinese_style": "《请回答1988》", - "english_style": "Ilkwon Ha style", - "id": "fcbeee97-34cd-4dcb-9353-547e1d15b3ca", - "image": "image182.jpeg" - }, { - "chinese_style": "《NANA》", - "english_style": "Ai Yazawa style", - "id": "5c275a98-11bc-4cfe-95ee-f29829f2db45", - "image": "image183.jpeg" - }, { - "chinese_style": "《蜂蜜与四叶草》", - "english_style": "Chica Umino style", - "id": "0be84542-7362-45cc-b2e0-8203fbf9a628", - "image": "image184.jpeg" - }, { - "chinese_style": "《东京塔》", - "english_style": "Lily Franky style", - "id": "b70b64b2-ff97-4fcd-b5f7-aa0b8727ce6b", - "image": "image187.jpeg" - }, { - "chinese_style": "《工作狂》", - "english_style": "Anno Moyoco style", - "id": "c2b9a3ce-c33f-4c16-8d68-db3c36da18b5", - "image": "image213.jpeg" - }, { - "chinese_style": "《单身男女》", - "english_style": "Rakuda Torino style", - "id": "ac5fb0d0-e607-4c7f-ad78-b3759ec3c994", - "image": "image208.jpeg" - }, { - "chinese_style": "《恋爱情结》", - "english_style": "Aya Nakahara style", - "id": "bba7a88f-cd93-49f0-8cc7-977b3fd5422c", - "image": "image214.jpeg" - }, { - "chinese_style": "《白领羽田》", - "english_style": "Akiko Higashimura style", - "id": "d3261949-efa2-4066-8d39-e2061120bb71", - "image": "image215.jpeg" - }, { - "chinese_style": "《东京女子图鉴》", - "english_style": "Akiko Higashimura style", - "id": "0855c327-3127-4377-9bd5-1d12ff9ae684", - "image": "image211.jpeg" - }, { - "chinese_style": "《重版出来!》", - "english_style": "Eiji Nonaka style", - "id": "22f75192-b891-4562-8662-53650f52bf4f", - "image": "image210.jpeg" - }, { - "chinese_style": "《逃避虽可耻但有用》", - "english_style": "Tsunami Umino style", - "id": "9bf58d40-ab11-49b8-8700-8db9067e7369", - "image": "image209.jpeg" - }, { - "chinese_style": "《下辈子再好好过》", - "english_style": "Kazuto Tatsukawa style", - "id": "208444d2-c17c-40f8-93e2-2365676fb900", - "image": "image212.jpeg" - }, { - "chinese_style": "《无法成为野兽的我们》", - "english_style": "Ryoko Fukuyama style", - "id": "39109010-4ce4-4b72-a200-883b8feb62cf", - "image": "image191.jpeg" - }, { - "chinese_style": "《我不是结不了婚,只是不想》", - "english_style": "Ako Shimaki style", - "id": "1be7fe21-d5e2-4a90-b5aa-8df219b55810", - "image": "image190.jpeg" - }, { - "chinese_style": "《恋爱小人们》", - "english_style": "Musawo style", - "id": "3455d950-4d11-426d-891a-b0453606df34", - "image": "image189.jpeg" - }], - "id": "6ab67e20-2fbe-449b-b371-5f411c4c3892" - }, { - "sheet": 12, - "name": "恐怖日本动漫风", - "subStyle": [{ - "chinese_style": "《富江》", - "english_style": "Junji Ito style", - "id": "3bc00c50-04ff-41c1-8104-c31680b469d8", - "image": "image218.jpeg" - }, { - "chinese_style": "《寄生兽》", - "english_style": "Hitoshi Iwaaki style", - "id": "64d9204c-296d-4b09-9b50-36d89268d7fa", - "image": "image220.jpeg" - }, { - "chinese_style": "《漩涡》", - "english_style": "Kyo Shirodaira and Eita Mizuno style", - "id": "0522f21f-9094-4a95-9648-5a9f574d406b", - "image": "image222.jpeg" - }, { - "chinese_style": "《死亡笔记》", - "english_style": "Tsugumi Ohba and Takeshi Obata style", - "id": "bde5b7bc-37ad-4a59-829d-21f26c222b29", - "image": "image219.jpeg" - }, { - "chinese_style": "《怪医黑杰克》", - "english_style": "Osamu Tezuka style", - "id": "78cc9352-b68a-48d3-a32e-ebf13de78b3c", - "image": "image221.jpeg" - }, { - "chinese_style": "《学园默示录》", - "english_style": "Daisuke Sato and Shouji Sato style", - "id": "5e34a2d4-4247-4feb-a369-eaf781668171", - "image": "image217.jpeg" - }, { - "chinese_style": "《鬼灯的冷彻》", - "english_style": "Natsumi Eguchi style", - "id": "854eb4d2-fdf1-40cf-a668-2da4dd0c103a", - "image": "image216.jpeg" - }, { - "chinese_style": "《僵尸借贷》", - "english_style": "Peach-Pit style", - "id": "a98ad1ff-0e25-4ac6-872e-1be6dacfb99e", - "image": "image223.jpeg" - }, { - "chinese_style": "《东京喰种》", - "english_style": "Sui Ishida style", - "id": "2d3b1c15-4ff6-4843-9dec-4b5f16b3d1c6", - "image": "image224.jpeg" - }], - "id": "990502bb-b673-4138-9af6-b2e483acdbc0" - }, { - "sheet": 13, - "name": "机甲日本动漫风", - "subStyle": [{ - "chinese_style": "《机动战士高达》", - "english_style": "Yoshiyuki Tomino style", - "id": "d7f9add9-5dbe-4b9a-ac5a-3905be18c73d", - "image": "image231.jpeg" - }, { - "chinese_style": "《新世纪福音战士》", - "english_style": "Hideaki Anno and Yoshiyuki Sadamoto style", - "id": "138a6ff3-6562-4410-9d2e-aa849f512f98", - "image": "image237.jpeg" - }, { - "chinese_style": "《钢弹0080:口袋中的战争》", - "english_style": "Yoshiyuki Tomino and Takashi Imanishi style", - "id": "350a64e1-8e2b-4f5b-b8d9-a0af5a6454ec", - "image": "image232.jpeg" - }, { - "chinese_style": "《全金属狂潮》", - "english_style": "Shoji Kawamori style", - "id": "b9f034b8-4146-429a-83a6-dc76bacee682", - "image": "image230.jpeg" - }, { - "chinese_style": "《机动警察》", - "english_style": "Kunio Okawara style", - "id": "55cd3098-7c01-406b-ae0e-1964b28d0925", - "image": "image233.jpeg" - }, { - "chinese_style": "《超时空要塞》", - "english_style": "Shoji Kawamori style", - "id": "d2e08101-5654-4edb-a0d3-d65b54a366e5", - "image": "image236.jpeg" - }, { - "chinese_style": "《铁拳小子》", - "english_style": "Naoto Tsushima style", - "id": "8ef6433d-c274-4add-a74d-6b9ac9fff81b", - "image": "image234.jpeg" - }, { - "chinese_style": "《装甲骑兵》", - "english_style": "Ryousuke Takahashi style", - "id": "c9444ff5-a319-4e3f-96b6-4cad9f5d7736", - "image": "image235.jpeg" - }, { - "chinese_style": "《机动战士高达SEED》", - "english_style": "Yoshiyuki Tomino and Kenji Oguro style", - "id": "898c1979-99b2-46a7-b581-8272dd37cdba", - "image": "image227.jpeg" - }, { - "chinese_style": "《交响诗篇》", - "english_style": "Shinichirou Watanabe and Yasuhiro Nightow style", - "id": "2d420511-63f9-4c77-9e06-efab1df5b815", - "image": "image229.jpeg" - }, { - "chinese_style": "《天元突破》", - "english_style": "Kimiyoshi Yasuda and Hiroyuki Imaishi style", - "id": "c6cb088d-2d9f-45c1-a38f-5a69545c1c5d", - "image": "image225.jpeg" - }, { - "chinese_style": "《机动战士高达00》", - "english_style": "Yoshiyuki Tomino and Kenji Oguro style", - "id": "6ab2f65f-4f70-4c57-b4f9-99d66fabe4df", - "image": "image226.jpeg" - }, { - "chinese_style": "《ZEGAPAIN》", - "english_style": "Kouichi Chigira and Shinji Aramaki style", - "id": "8238df2e-c1be-4849-9684-1c217fe51b4c", - "image": "image228.jpeg" - }], - "id": "e646e2a4-a467-4506-8838-316d45cf5120" - }, { - "sheet": 14, - "name": "校园日本动漫风", - "subStyle": [{ - "chinese_style": "《青春猪头少年不会梦到兔女郎学姐》", - "english_style": "Daisuke Aizawa style", - "id": "a4bcfe18-7e85-4ebf-8a89-bc0f946e6dd5", - "image": "image242.jpeg" - }, { - "chinese_style": "《我的青春恋爱物语果然有问题》", - "english_style": "Hajime Kamoshida style", - "id": "dfebd4b2-657c-4c46-9319-c3834fde01d5", - "image": "image240.jpeg" - }, { - "chinese_style": "《某科学的超电磁炮》", - "english_style": "Kazuma Kamachi and Motoi Fushimi style", - "id": "f32174cb-1d1a-4cd6-bb14-6bcef9bf068e", - "image": "image243.jpeg" - }, { - "chinese_style": "《干物妹!小埋》", - "english_style": "Sakura Ikezuki style", - "id": "f2ca5f57-e759-4c9a-aa20-39c6862e5892", - "image": "image244.jpeg" - }, { - "chinese_style": "《四月是你的谎言》", - "english_style": "Kanade Yoko style", - "id": "0a07af72-fd77-468d-b667-5879048eb289", - "image": "image238.jpeg" - }, { - "chinese_style": "《Free!》", - "english_style": "Kouji Oji style", - "id": "4745b1fa-466e-4a25-8aa8-1017a55f6a3f", - "image": "image239.jpeg" - }, { - "chinese_style": "《樱花庄的宠物女孩》", - "english_style": "Hiroshi Kumakura and Tatsuhiko Takimoto style", - "id": "b7f2b370-2660-4653-86f1-e1b1bc959c35", - "image": "image245.jpeg" - }, { - "chinese_style": "《从零开始的异世界生活》", - "english_style": "Nagatsuki Tappei style", - "id": "6a8e1708-835b-4266-8546-cea85db6a7a1", - "image": "image241.jpeg" - }, { - "chinese_style": "《冰菓》", - "english_style": "Hyouka Fujino style", - "id": "423eedf0-0adb-4738-bd8b-a1d1a3b41bae", - "image": "image246.jpeg" - }, { - "chinese_style": "《Love Lab》", - "english_style": "Miki Yoshikawa style", - "id": "8cd108ea-2276-4b2b-9fb9-0078e1b28292", - "image": "image248.jpeg" - }, { - "chinese_style": "《月刊少女野崎君》", - "english_style": "Hima Katsura style", - "id": "57e7d3b8-640b-4ab4-a2c3-708af855dd96", - "image": "image250.jpeg" - }, { - "chinese_style": "《Charlotte》", - "english_style": "Jun Maeda style", - "id": "bd564191-e6f7-459d-8b8e-9df837f09a8a", - "image": "image249.jpeg" - }, { - "chinese_style": "《K-On!》", - "english_style": "Manga Mitogawa and Koji Oji style", - "id": "6c2ded36-ccd4-4ffd-972e-2587737efea6", - "image": "image247.jpeg" - }], - "id": "fbba8ae8-502c-4ae5-856c-ffb70efd852d" - }, { - "sheet": 15, - "name": "传统日本动漫风", - "subStyle": [{ - "chinese_style": "《红辣椒》", - "english_style": "Satoshi Kon style", - "id": "7c2f0bea-67fb-42b1-b02c-e9db30153055", - "image": "image260.jpeg" - }, { - "chinese_style": "《时之歌》", - "english_style": "Makoto Shinkai style", - "id": "997b348f-aef8-4e3a-973c-d93153cbe8c5", - "image": "image263.jpeg" - }, { - "chinese_style": "《完美蓝》", - "english_style": "Mamoru Oshii style", - "id": "a1620fb5-2a77-47f5-9ca9-0245e3bbf278", - "image": "image261.jpeg" - }, { - "chinese_style": "《狼的孩子雨和雪》", - "english_style": "Mamoru Hosoda style", - "id": "4427cac2-4f4a-490b-990f-cf6d46c9ba3a", - "image": "image264.jpeg" - }, { - "chinese_style": "《夏日大作战》", - "english_style": "Kunihiko Ikuhara style", - "id": "1e34a1d4-58cd-4b8c-ab61-b6724bbb053c", - "image": "image262.jpeg" - }, { - "chinese_style": "《未麻的部屋》", - "english_style": "Rintaro style", - "id": "cc689d92-8525-475a-90a4-f42d0adacfd2", - "image": "image265.jpeg" - }, { - "chinese_style": "《千年女优》", - "english_style": "Kon Satoshi style", - "id": "189a8d33-391c-4406-9f77-9811fc39429b", - "image": "image266.jpeg" - }, { - "chinese_style": "《虚空之旅》", - "english_style": "Katsuhiro Otomo style", - "id": "b65d8e8a-1ec1-46cf-a32b-8e16c6d4cada", - "image": "image267.jpeg" - }, { - "chinese_style": "《悬崖上的金鱼姬》", - "english_style": "Goro Miyazaki style", - "id": "fe069298-88d6-4ccd-8076-0af31aa1336c", - "image": "image273.jpeg" - }, { - "chinese_style": "《雪国列车》", - "english_style": "Yoshiaki Kawajiri style", - "id": "bf59ebda-e6df-47cc-9dde-f522b5145b58", - "image": "image270.jpeg" - }, { - "chinese_style": "《猎天使魔女》", - "english_style": "Yasuhito Kikuchi style", - "id": "72877d59-e763-4440-b41b-4826da6718c7", - "image": "image268.jpeg" - }, { - "chinese_style": "《猎魔人》", - "english_style": "Yoshiaki Kawajiri style", - "id": "dfbb0b74-a875-442f-9219-3aad3a66b2bb", - "image": "image274.jpeg" - }, { - "chinese_style": "《幽灵公主》", - "english_style": "Princess Mononoke style", - "id": "7458efbb-97fd-454f-b93f-85ac2e42c139", - "image": "image275.jpeg" - }, { - "chinese_style": "《百变狸猫》", - "english_style": "Pom Poko style", - "id": "0e6b6836-297b-4805-8f65-00e83693a1ae", - "image": "image271.jpeg" - }, { - "chinese_style": "《岁月的童话》", - "english_style": "Only Yesterday style", - "id": "7978dce5-aaa4-46d8-bf68-5b52758d6fa7", - "image": "image269.jpeg" - }, { - "chinese_style": "《我的邻居山田君》", - "english_style": "The Yamadas style", - "id": "c92165f2-00e8-4c06-b3e4-7531f145e3be", - "image": "image272.jpeg" - }, { - "chinese_style": "《猫的报恩》", - "english_style": "The Cat Returns style", - "id": "48aacb4a-501e-4fe6-8cb7-a2ad86657033", - "image": "image258.jpeg" - }, { - "chinese_style": "《借东西的小人阿莉埃蒂》", - "english_style": "Arrietty style", - "id": "48a38ff1-da64-496e-aec0-89c0dea12cc9", - "image": "image255.jpeg" - }, { - "chinese_style": "《起风了》", - "english_style": "The Wind Rises style", - "id": "5ae600ac-6797-4f11-b9e2-176856a1c23a", - "image": "image251.jpeg" - }, { - "chinese_style": "《辉夜姬物语》", - "english_style": "The Tale of The Princess Kaguya style", - "id": "b7ae0ca4-765e-4dda-9d79-63009b943afe", - "image": "image252.jpeg" - }, { - "chinese_style": "《地海传说》", - "english_style": "Tales from Earthsea style", - "id": "ba04d563-d7d5-453e-92d8-84b7dbb04828", - "image": "image253.jpeg" - }, { - "chinese_style": "《侧耳倾听》", - "english_style": "Whisper of the Heart style", - "id": "f3d6adc2-6c8d-4eeb-ac9e-4bc470099a87", - "image": "image254.jpeg" - }, { - "chinese_style": "《时光代理人》", - "english_style": "Link Click style", - "id": "1379ee57-77f0-44ea-ba0f-37d448cf2d86", - "image": "image257.jpeg" - }, { - "chinese_style": "《攻壳机动队》", - "english_style": "Ghost in the Shell style", - "id": "01da912f-f68a-4cff-aac8-5f7cdf945c0e", - "image": "image256.jpeg" - }, { - "chinese_style": "《宇宙战舰大和号》", - "english_style": "Space Battleship Yamato style", - "id": "c24de2c9-1dc7-4c9a-b0ff-7fed7a4f9b32", - "image": "image259.jpeg" - }], - "id": "a4bae3b0-7ca7-45b4-9a83-505e3407fd5e" - }, { - "sheet": 16, - "name": "国产动漫风", - "subStyle": [{ - "chinese_style": "《镖人》", - "english_style": "Biao Ren style", - "id": "12910c0e-1945-47d9-a1a4-0e13a5fa2616", - "image": "image283.jpeg" - }, { - "chinese_style": "《斗破苍穹》", - "english_style": "Battle Through the Heavens style", - "id": "f2d8e7f4-c4c6-497e-9a0d-cf7957e382dd", - "image": "image281.jpeg" - }, { - "chinese_style": "《雪中悍刀行》", - "english_style": "The Swordsman in the Rain style", - "id": "a863dda7-6be4-4c9c-b64a-ccb8561c89d0", - "image": "image287.jpeg" - }, { - "chinese_style": "《大主宰》", - "english_style": "The Great Ruler style", - "id": "bbbc22aa-d99f-4fa3-9f32-d02ff1bb140f", - "image": "image284.jpeg" - }, { - "chinese_style": "《秦时明月》", - "english_style": "The Legend of Qin style", - "id": "77a8e93f-bf9c-433a-9266-03b9b2bf7135", - "image": "image282.jpeg" - }, { - "chinese_style": "《天行九歌》", - "english_style": "Nine Songs style", - "id": "487c6c3d-fed2-43e7-87af-02736ad596b7", - "image": "image285.jpeg" - }, { - "chinese_style": "《画江湖之不良人》", - "english_style": "Hua Jianghu: The Bad Guys style", - "id": "dbc9edbb-72ad-4fc2-a0ae-fc146e0c5226", - "image": "image288.jpeg" - }, { - "chinese_style": "《白箱》", - "english_style": "Shirobako style", - "id": "67043ea7-f930-4144-b8de-6ad3d447e567", - "image": "image286.jpeg" - }, { - "chinese_style": "《百鬼屋》", - "english_style": "House of Hundred Ghosts style", - "id": "3f6b5402-3974-4fd8-83e7-ef88bdc4dad3", - "image": "image291.jpeg" - }, { - "chinese_style": "《端脑》", - "english_style": "Du Nao style", - "id": "dc7994f0-4318-4455-8f8d-e72554be17a9", - "image": "image292.jpeg" - }, { - "chinese_style": "《诛仙》", - "english_style": "Zhuxian style", - "id": "400a1638-0d7e-4a3b-a371-ec2ed1d27a11", - "image": "image294.jpeg" - }, { - "chinese_style": "《哪吒之魔童降世》", - "english_style": "Ne Zha style", - "id": "82517970-da4a-4f8b-aa90-84d84c09cbfb", - "image": "image295.jpeg" - }, { - "chinese_style": "《西游记》", - "english_style": "Journey to the West style", - "id": "3d898e60-ea86-4f20-90f2-f0c09c424b47", - "image": "image296.jpeg" - }, { - "chinese_style": "《封神纪》", - "english_style": "Fengshen Ji style", - "id": "25d49d46-9dc0-45ff-a704-dccdaded159f", - "image": "image289.jpeg" - }, { - "chinese_style": "《山海逆战》", - "english_style": "Shan Hai Ni Zhan style", - "id": "f5083376-cefc-40b3-a8d3-ad4cf3fad713", - "image": "image293.jpeg" - }, { - "chinese_style": "《百炼成神》", - "english_style": "Becoming a God style", - "id": "fd053b5e-1ce3-47bf-95e6-65a6caf739ec", - "image": "image290.jpeg" - }, { - "chinese_style": "《白蛇传》", - "english_style": "The Legend of White Snake style", - "id": "5cf1e3fd-9458-417c-bd7b-33d93a45958d", - "image": "image280.jpeg" - }, { - "chinese_style": "《妖神记》", - "english_style": "Chronicles of the Demon King style", - "id": "e6a1bdbe-8114-4393-a07b-080c8bbb3b1b", - "image": "image277.jpeg" - }, { - "chinese_style": "《镇魂街》", - "english_style": "Rakshasa Street style", - "id": "3dcaff26-29f4-43a1-8141-0ca108420d91", - "image": "image278.jpeg" - }, { - "chinese_style": "《斗罗大陆》", - "english_style": "Soul Land style", - "id": "c7303c09-1aa4-4156-9b21-3c63794d4e8e", - "image": "image276.jpeg" - }, { - "chinese_style": "《血族》", - "english_style": "Bloodline style", - "id": "02a2e278-4eb3-4384-a13a-80e1eef5b627", - "image": "image279.jpeg" - }], - "id": "fa957f58-129e-42cc-b80a-24859fc90789" - }, { - "sheet": 17, - "name": "电影风格", - "subStyle": [{ - "chinese_style": "黑白电影", - "english_style": "Black and white movies", - "id": "7bffd5d9-71e7-4443-99b7-d38cbe5853ee", - "image": "image309.jpeg" - }, { - "chinese_style": "科幻电影", - "english_style": "science fiction film", - "id": "f17c812e-aafd-4ac4-b6e4-36467f75c4e6", - "image": "image310.jpeg" - }, { - "chinese_style": "爱情电影", - "english_style": "romantic movies", - "id": "d2bac280-9bff-4582-a78e-b94a3f75950e", - "image": "image311.jpeg" - }, { - "chinese_style": "动作电影", - "english_style": "action movies", - "id": "a723ca3f-7f59-436b-b4aa-bd99f58bfe45", - "image": "image312.jpeg" - }, { - "chinese_style": "喜剧电影", - "english_style": "comedy movies", - "id": "1a39e88a-2e08-4adf-8859-76d7ac36f2fd", - "image": "image306.jpeg" - }, { - "chinese_style": "恐怖电影", - "english_style": "horror movies", - "id": "cafb6bde-4f43-4fbf-8bf4-9b9a2727c7bd", - "image": "image307.jpeg" - }, { - "chinese_style": "战争电影", - "english_style": "war movies", - "id": "64564b1d-69a2-45ff-b25e-3f073a45b76f", - "image": "image308.jpeg" - }, { - "chinese_style": "纪录片", - "english_style": "documentaries", - "id": "304e6b0f-1b30-4336-8f88-79b907d9592d", - "image": "image305.jpeg" - }, { - "chinese_style": "动画电影", - "english_style": "animated movies", - "id": "3ae766f0-a97b-4004-8a06-b5b8bd76f668", - "image": "image297.jpeg" - }, { - "chinese_style": "奇幻电影", - "english_style": "fantasy movies", - "id": "282b2144-8cf3-470e-9179-7f9419d12a1c", - "image": "image299.jpeg" - }, { - "chinese_style": "惊悚电影", - "english_style": "thriller movies", - "id": "ab55351f-3c55-4828-babc-a34e724d95a2", - "image": "image303.jpeg" - }, { - "chinese_style": "犯罪电影", - "english_style": "crime movies", - "id": "f95ea621-d040-47e5-b6e0-f6f326af1036", - "image": "image300.jpeg" - }, { - "chinese_style": "冒险电影", - "english_style": "adventure movies", - "id": "eb6ecf79-2d53-454b-8302-7cca5c9b591b", - "image": "image301.jpeg" - }, { - "chinese_style": "家庭电影", - "english_style": "family movies", - "id": "c2e2d144-8c87-4110-930b-fdfd41df9b30", - "image": "image302.jpeg" - }, { - "chinese_style": "历史剧", - "english_style": "historical dramas", - "id": "029cc87b-eeab-4f95-ac9f-425460ee9f08", - "image": "image298.jpeg" - }, { - "chinese_style": "音乐剧", - "english_style": "musical movies", - "id": "61993e49-68db-4be4-b8a9-908e1ac7b962", - "image": "image304.jpeg" - }, { - "chinese_style": "悬疑电影", - "english_style": "mystery movies", - "id": "98bf0ddc-4904-4576-9f93-db27363eee28", - "image": "image409.jpeg" - }, { - "chinese_style": "戏剧电影", - "english_style": "drama movies", - "id": "59885546-5b58-40c8-8202-ded895601539", - "image": "image410.jpeg" - }, { - "chinese_style": "运动电影", - "english_style": "sports movies", - "id": "42232865-7ffb-49e1-989b-efab01e44ac0", - "image": "image411.jpeg" - }], - "id": "5d5b2cfa-a417-4723-9931-a3abbac2b452" - }, { - "sheet": 18, - "name": "艺术风格", - "subStyle": [{ - "chinese_style": "幻想艺术风格", - "english_style": "Fantasy art style", - "id": "a7f0560f-fbaa-4fbe-abae-70401e6fedbe", - "image": "image333.jpeg" - }, { - "chinese_style": "复古漫画风格", - "english_style": "Retro comic style", - "id": "7fb47c08-d2e3-439d-9e5d-4a9e3886203e", - "image": "image338.jpeg" - }, { - "chinese_style": "抽象艺术风格", - "english_style": "Abstract art style", - "id": "a7e465c0-8c08-4407-928e-00ddcfc1e14d", - "image": "image331.jpeg" - }, { - "chinese_style": "极简主义风格", - "english_style": "Minimalist style", - "id": "2b4f5f05-9f9f-4605-8ea6-3e9f3e9390b7", - "image": "image335.jpeg" - }, { - "chinese_style": "涂鸦风格", - "english_style": "Graffiti style", - "id": "ca054eb1-ede6-48da-9832-46d2edb04020", - "image": "image336.jpeg" - }, { - "chinese_style": "浮世绘风格", - "english_style": "Ukiyo-e style", - "id": "d73397d8-6535-4a73-a6a8-2107c216c2ae", - "image": "image332.jpeg" - }, { - "chinese_style": "表现主义风格", - "english_style": "Expressionism style", - "id": "ef600238-917d-4bb2-a38d-6619dce4724d", - "image": "image337.jpeg" - }, { - "chinese_style": "超现实主义风格", - "english_style": "Surrealism style", - "id": "c4df7c3e-82b1-44dd-9c7a-6ce48c4c157d", - "image": "image334.jpeg" - }, { - "chinese_style": "装饰艺术风格", - "english_style": "Art Deco style", - "id": "33e5d594-dc86-4396-82d9-89544b356c69", - "image": "image341.jpeg" - }, { - "chinese_style": "未来主义风格", - "english_style": "Futurism style", - "id": "0a59d038-ff76-4575-aa38-616889b38361", - "image": "image344.jpeg" - }, { - "chinese_style": "像素艺术风格", - "english_style": "Pixel art style", - "id": "57e62d07-2d1a-450a-a16e-6641b64c9c07", - "image": "image346.jpeg" - }, { - "chinese_style": "漫画现实主义风格", - "english_style": "Comic realism style", - "id": "6f96a537-a952-4c98-adb5-02ca82025479", - "image": "image340.jpeg" - }, { - "chinese_style": "卡通渲染风格", - "english_style": "Cartoon rendering style", - "id": "0957f80e-2c3e-472a-8f05-263ff831c8ae", - "image": "image339.jpeg" - }, { - "chinese_style": "哥特式漫画风格", - "english_style": "Gothic comic style", - "id": "5ab38c3b-a63c-4852-85d0-5cde07fc900a", - "image": "image345.jpeg" - }, { - "chinese_style": "新古典主义风格", - "english_style": "Neoclassicism style", - "id": "ce5ee6e7-01d2-42b9-85aa-47b4503cfabc", - "image": "image342.jpeg" - }, { - "chinese_style": "浪漫主义风格", - "english_style": "Romanticism style", - "id": "38d106e0-2272-4964-8f83-84b9808d8d1d", - "image": "image343.jpeg" - }, { - "chinese_style": "街头艺术风格", - "english_style": "Street art style", - "id": "ef0a8d87-ba4f-48df-b2f9-11345eb75c10", - "image": "image319.jpeg" - }, { - "chinese_style": "概念艺术风格", - "english_style": "Concept art style", - "id": "347d3e35-5a70-451f-b6cf-58aaf339fc34", - "image": "image317.jpeg" - }, { - "chinese_style": "幻想漫画风格", - "english_style": "Fantasy comic style", - "id": "fdda76a9-25a5-47fa-9570-ec12c6c744c8", - "image": "image316.jpeg" - }, { - "chinese_style": "科幻风格", - "english_style": "Science fiction style", - "id": "8e26e6b3-c109-43c0-ae58-7f68ff050a88", - "image": "image320.jpeg" - }, { - "chinese_style": "西部风格", - "english_style": "Western style", - "id": "b23cf1e2-3449-48ae-b71d-160f081a7202", - "image": "image314.jpeg" - }, { - "chinese_style": "儿童插画风格", - "english_style": "Children's illustration style", - "id": "4572cc54-54e1-41b5-9d63-0b8e53a6bdb6", - "image": "image318.jpeg" - }, { - "chinese_style": "青春漫画风格", - "english_style": "Youth comic style", - "id": "06ccb7d6-d722-418e-ab6f-77f72c048814", - "image": "image315.jpeg" - }, { - "chinese_style": "历史题材漫画风格", - "english_style": "Historical comic style", - "id": "af31cb40-2f6a-486d-9e7b-667837360b15", - "image": "image313.jpeg" - }, { - "chinese_style": "民间艺术风格", - "english_style": "Folk art style", - "id": "750cca85-be64-42c4-b993-b53c414fd01c", - "image": "image325.jpeg" - }, { - "chinese_style": "艺术新潮流风格", - "english_style": "Art Nouveau style", - "id": "755ac85b-8c53-4674-a2ca-3ca86c588814", - "image": "image322.jpeg" - }, { - "chinese_style": "艺术装饰风格", - "english_style": "Art Deco style", - "id": "b20fc215-8631-4334-a345-27de5fbe83b5", - "image": "image328.jpeg" - }, { - "chinese_style": "艺术与工艺风格", - "english_style": "Arts and Crafts style", - "id": "b7bbf919-b6dc-4074-a42e-986b317dc43b", - "image": "image323.jpeg" - }, { - "chinese_style": "野兽派风格", - "english_style": "Fauvism style", - "id": "c8c19729-1cad-424e-8d89-79e024587100", - "image": "image326.jpeg" - }, { - "chinese_style": "立体主义风格", - "english_style": "Cubism style", - "id": "c1c2d744-3e88-4d78-8a91-0626caee0f21", - "image": "image324.jpeg" - }, { - "chinese_style": "原始主义风格", - "english_style": "Primitivism style", - "id": "a784d492-5c63-4ed0-849e-af7fc29ee76e", - "image": "image327.jpeg" - }, { - "chinese_style": "波普艺术风格", - "english_style": "Pop art style", - "id": "cd5726f6-6ef6-4cd8-a59e-8e06584ee6b7", - "image": "image321.jpeg" - }, { - "chinese_style": "后现代主义风格", - "english_style": "Postmodernism style", - "id": "f1f2c258-b5ba-41ba-994b-5f7ab3f180ae", - "image": "image329.jpeg" - }, { - "chinese_style": "超扁平风格", - "english_style": "Superflat style", - "id": "531ec980-a5e0-4126-ba9d-449fa8b3605b", - "image": "image330.jpeg" - }], - "id": "4dfa6a37-ea05-4a09-aabb-eed2c714830e" - }, { - "sheet": 19, - "name": "国风", - "subStyle": [{ - "chinese_style": "中国水墨画", - "english_style": "Chinese ink wash painting", - "id": "9aa7dced-46c5-4b9c-9159-41f3d9239a98", - "image": "image352.jpeg" - }, { - "chinese_style": "工笔花鸟画", - "english_style": "Fine-brushwork floral and bird painting", - "id": "e67ae511-04c0-4493-a696-a6799b07f2f8", - "image": "image347.jpeg" - }, { - "chinese_style": "青绿山水画", - "english_style": "Green and blue landscape painting", - "id": "46e39c6a-5df8-49e7-9eed-807cd3f14db2", - "image": "image349.jpeg" - }, { - "chinese_style": "敦煌壁画", - "english_style": "Dunhuang murals", - "id": "85561e1f-72dc-4c7e-a1ce-f70f5ccb4f5f", - "image": "image348.jpeg" - }, { - "chinese_style": "剪纸艺术", - "english_style": "Chinese paper-cut art", - "id": "7ebba49c-e8ef-45f8-bc68-e80036b92b62", - "image": "image350.jpeg" - }, { - "chinese_style": "年画", - "english_style": "New Year paintings", - "id": "e84038c0-0831-485e-beaa-d9247f960ec0", - "image": "image351.jpeg" - }], - "id": "aa51c366-fcaa-4063-84d7-ad5af8bca191" - }, { - "sheet": 20, - "name": "其他应用", - "subStyle": [{ - "chinese_style": "自然风光", - "english_style": "Natural scenery style", - "id": "75b472ed-192d-4120-87af-c38f353b938f", - "image": "image403.jpeg" - }, { - "chinese_style": "宇宙星空", - "english_style": "Space and stars theme", - "id": "a15f8591-0ce4-4d9d-9301-92b6f98b927d", - "image": "image404.jpeg" - }, { - "chinese_style": "城市建筑", - "english_style": "Urban architecture style", - "id": "be9d8a98-d011-4dd4-ace1-c55119691d0c", - "image": "image405.jpeg" - }, { - "chinese_style": "传统文化", - "english_style": "Traditional culture theme", - "id": "3e1e9539-4e2c-4ed5-82cc-84ec83a7f370", - "image": "image406.jpeg" - }, { - "chinese_style": "现代艺术", - "english_style": "Modern art style", - "id": "bc270c1a-ab1d-4e9d-a9a0-5413323802dd", - "image": "image407.jpeg" - }, { - "chinese_style": "民族风情", - "english_style": "Ethnic style", - "id": "43f968fd-e4d3-417a-b40d-a07c2dd691f7", - "image": "image401.jpeg" - }, { - "chinese_style": "古风仙韵", - "english_style": "Ancient charm style", - "id": "d00cead5-0991-40ed-a64a-5e0a8b5770a9", - "image": "image402.jpeg" - }, { - "chinese_style": "未来幻想", - "english_style": "Future fantasy style", - "id": "3537c9f9-a77f-4daf-84cc-73b260b2c155", - "image": "image408.jpeg" - }, { - "chinese_style": "科技机械", - "english_style": "Technology and machinery theme", - "id": "e83d74ec-697c-4962-8ad3-aa8bd4d85496", - "image": "image356.jpeg" - }, { - "chinese_style": "人物插画", - "english_style": "Character illustration style", - "id": "c1c6b6bb-d1ec-40b4-b703-a9ea67c73786", - "image": "image353.jpeg" - }, { - "chinese_style": "动漫卡通", - "english_style": "Anime and cartoon style", - "id": "73425a65-a3ae-4c51-a64c-670984165e32", - "image": "image357.jpeg" - }, { - "chinese_style": "游戏原画", - "english_style": "Game concept art style", - "id": "cddd0ead-0178-4b9e-86f9-2c83de6b57d0", - "image": "image358.jpeg" - }, { - "chinese_style": "影视剧照", - "english_style": "Film and TV stills style", - "id": "750f6d3b-7e5a-40d2-a581-c3d21ad4640b", - "image": "image355.jpeg" - }, { - "chinese_style": "广告插图", - "english_style": "Advertising illustration style", - "id": "9d95166e-8131-4a33-9ded-8a9c7bfddcb0", - "image": "image359.jpeg" - }, { - "chinese_style": "包装设计", - "english_style": "Packaging design style", - "id": "03aa78fa-3c6f-450d-b64c-b842a78f4237", - "image": "image360.jpeg" - }, { - "chinese_style": "平面海报", - "english_style": "Graphic poster style", - "id": "aaed015c-806c-4d8c-9fb4-7ed0d28098b5", - "image": "image354.jpeg" - }, { - "chinese_style": "网页UI", - "english_style": "Web UI design style", - "id": "063e6129-8f8b-4d61-a4f2-547342a279a3", - "image": "image364.jpeg" - }, { - "chinese_style": "品牌标识", - "english_style": "Brand identity design style", - "id": "5acd5018-661c-4983-8257-773217ba6951", - "image": "image361.jpeg" - }, { - "chinese_style": "时尚插画", - "english_style": "Fashion illustration style", - "id": "a9424c0e-2a33-40ae-b040-71127529de8e", - "image": "image365.jpeg" - }, { - "chinese_style": "儿童绘本", - "english_style": "Children's picture book style", - "id": "d2c5a700-1848-4341-93ea-75e6eae70dc2", - "image": "image363.jpeg" - }, { - "chinese_style": "科普漫画", - "english_style": "Popular science comic style", - "id": "21110cd9-34fd-4acf-86e5-18ea5250b16b", - "image": "image366.jpeg" - }, { - "chinese_style": "教育绘本", - "english_style": "Educational picture book style", - "id": "03fad4d9-2f97-4c83-9226-7f913cb22794", - "image": "image362.jpeg" - }, { - "chinese_style": "医学插图", - "english_style": "Medical illustration style", - "id": "6da6fa32-ded0-485f-a414-17b3d7fff6d2", - "image": "image367.jpeg" - }, { - "chinese_style": "建筑设计", - "english_style": "Architectural design style", - "id": "70c99e02-0578-4ba2-ab44-c49e354b1198", - "image": "image368.jpeg" - }, { - "chinese_style": "汽车设计", - "english_style": "Automotive design style", - "id": "04454eab-0491-4e38-a9a0-1476f4138ecb", - "image": "image370.jpeg" - }, { - "chinese_style": "工业设计", - "english_style": "Industrial design style", - "id": "c18d111c-f3e6-4df8-9867-df8af1207399", - "image": "image371.jpeg" - }, { - "chinese_style": "室内设计", - "english_style": "Interior design style", - "id": "4428d573-1829-4cad-9ce1-54c8dda6b7c2", - "image": "image374.jpeg" - }, { - "chinese_style": "时装设计", - "english_style": "Fashion design style", - "id": "90f7f936-8b54-4aae-bba1-ee6cdae5ce76", - "image": "image373.jpeg" - }, { - "chinese_style": "珠宝设计", - "english_style": "Jewelry design style", - "id": "1f9b2bd8-caa5-4f6c-ad87-0aa3ab5be760", - "image": "image369.jpeg" - }, { - "chinese_style": "家具设计", - "english_style": "Furniture design style", - "id": "b2d1bf95-5c92-4c9d-be02-cc5dcdeff625", - "image": "image372.jpeg" - }, { - "chinese_style": "平面设计", - "english_style": "Graphic design style", - "id": "761c2f31-2b3f-437b-9784-976aff089724", - "image": "image375.jpeg" - }, { - "chinese_style": "插图设计", - "english_style": "Illustration design style", - "id": "3887bd64-8f74-4994-bd0a-3f3798d0a336", - "image": "image376.jpeg" - }, { - "chinese_style": "动画设计", - "english_style": "Animation design style", - "id": "9961b135-7658-47c8-b8b6-94ee646345be", - "image": "image380.jpeg" - }, { - "chinese_style": "游戏设计", - "english_style": "Game design style", - "id": "4b95b12e-d27e-460c-b3c3-4bf7306adfca", - "image": "image377.jpeg" - }, { - "chinese_style": "用户界面", - "english_style": "User interface design style", - "id": "90a47637-a287-4f73-a6d3-e10b6cd52035", - "image": "image378.jpeg" - }, { - "chinese_style": "虚拟现实", - "english_style": "Virtual reality theme", - "id": "805a3511-4037-4981-b628-85b2c1c5805c", - "image": "image382.jpeg" - }, { - "chinese_style": "增强现实", - "english_style": "Augmented reality theme", - "id": "1126d0da-6610-4183-915c-e9fe695d44b1", - "image": "image381.jpeg" - }, { - "chinese_style": "人工智能", - "english_style": "Artificial intelligence theme", - "id": "c98ee53f-427c-4016-8745-b781ed180307", - "image": "image383.jpeg" - }, { - "chinese_style": "机器人科技", - "english_style": "Robotics and technology theme", - "id": "c6edebf7-f2be-4027-8620-888e0dec1e86", - "image": "image384.jpeg" - }, { - "chinese_style": "生物工程", - "english_style": "Biotechnology theme", - "id": "00425a0d-5e3d-4304-83be-f4653315abed", - "image": "image379.jpeg" - }, { - "chinese_style": "环境保护", - "english_style": "Environmental protection theme", - "id": "764a6b68-3530-4d45-bdbe-3db74c659dea", - "image": "image390.jpeg" - }, { - "chinese_style": "可持续发展", - "english_style": "Sustainable development theme", - "id": "7bf52103-ab9a-4fff-8250-42a5f8d32e73", - "image": "image386.jpeg" - }, { - "chinese_style": "社会公益", - "english_style": "Social welfare theme", - "id": "6edb9969-682c-4721-aa80-29b6ca583a57", - "image": "image389.jpeg" - }, { - "chinese_style": "医疗健康", - "english_style": "Medical and health theme", - "id": "e36cdc09-976a-43e5-921e-687950020ac6", - "image": "image391.jpeg" - }, { - "chinese_style": "教育培训", - "english_style": "Education and training theme", - "id": "402fbf92-ff82-422b-a12f-3595ff908197", - "image": "image387.jpeg" - }, { - "chinese_style": "金融经济", - "english_style": "Finance and economy theme", - "id": "e75bbc8c-ba12-47a8-9d42-1f2847533afd", - "image": "image388.jpeg" - }, { - "chinese_style": "科学研究", - "english_style": "Scientific research theme", - "id": "9cb82967-bf9e-4a6c-8a22-11e9b5b3d698", - "image": "image385.jpeg" - }, { - "chinese_style": "文化艺术", - "english_style": "Culture and art theme", - "id": "92fcc6e2-88a3-474d-b0ac-ab657e7605b6", - "image": "image392.jpeg" - }, { - "chinese_style": "体育运动", - "english_style": "Sports and fitness theme", - "id": "ecddba8f-d64e-431b-81fe-6a8234da6bca", - "image": "image395.jpeg" - }, { - "chinese_style": "旅游度假", - "english_style": "Travel and vacation theme", - "id": "7b826dfa-670b-4826-9d45-7803d2ee5c6a", - "image": "image400.jpeg" - }, { - "chinese_style": "美食烹饪", - "english_style": "Food and cooking theme", - "id": "2d72e89e-8208-4d19-ad8a-0f8e3718fb42", - "image": "image398.jpeg" - }, { - "chinese_style": "时尚美妆", - "english_style": "Fashion and beauty theme", - "id": "50acc1db-330c-413b-aa99-efcbda18c94d", - "image": "image393.jpeg" - }, { - "chinese_style": "婚礼庆典", - "english_style": "Wedding and celebration theme", - "id": "353a2699-8906-4d15-beac-1a942bf1e26e", - "image": "image394.jpeg" - }, { - "chinese_style": "家居生活", - "english_style": "Home and lifestyle theme", - "id": "1b9ce9cf-2c7f-43a4-a619-171856e8db41", - "image": "image399.jpeg" - }, { - "chinese_style": "母婴育儿", - "english_style": "Maternity and parenting theme", - "id": "df0f3682-82ae-4729-b469-25f0c1784364", - "image": "image396.jpeg" - }, { - "chinese_style": "科技创新", - "english_style": "Technological innovation theme", - "id": "1fa174c2-3557-4fec-bd03-1774561d494a", - "image": "image397.jpeg" - }], - "id": "cfd1b687-0043-4e39-bf8e-b8f4d4667016" - }], - /** - * 获取所有的生图风格 - * @returns {Array} 返回所有的风格数据 - */ - getImageStyle: function () { - return this.image_style; - }, - - /** - * 获取指定的的ID的风格数据,可以多个 - * @param {*} ids ID的数组 - * @returns - */ - getImageStyleObjectByIds: function (ids) { - let result = []; - if (!ids) { - ids = []; - } - let style = this.getAllSubStyle(); - for (let i = 0; i < ids.length; i++) { - const element = ids[i]; - for (let j = 0; j < style.length; j++) { - const item = style[j]; - if (item.id == element) { - result.push(item); - break; - } - } - } - return result; - }, - - /** - * 获取指定ID数组的风格提示词 - * @param {*} ids 需要拼接的id数组 - * @returns 返回拼接好的英文提示词字符串(会加上SD设置那边的权重) - */ - getImageStyleStringByIds: async function (ids) { - let res = ""; - let tmp = []; - let result = this.getImageStyleObjectByIds(ids); - for (let i = 0; i < result.length; i++) { - const element = result[i]; - tmp.push(element.english_style); - } - let weight = await SdSettingDefine.getSettingSettingProperty("style_weight", false); - weight = weight ? weight : 1; - tmp.map((item) => { - if (global.config.image_generate_category == "sd") { - res += `(${item}:${weight}),`; - } else { - res += `${item},`; - } - }); - return res; - }, - - /** - * - * @returns {Array} 返回所有的风格数据 - */ - getAllSubStyle: function () { - let subStyle = []; - this.image_style.forEach((item) => { - subStyle = subStyle.concat(item.subStyle); - }); - return subStyle; - }, - - /** - * 根据图像风格数据,返回选择菜单 - * @returns {Array} 返回所有的风格数据 - */ - getImageStyleMenu: function () { - let menu = []; - this.image_style.forEach((item) => { - menu.push({ - id: item.id, - label: item.name, - key: item.id, - }); - }); - return menu; - }, - - /** - * 获取指定的ID的下面数据的风格 - * @param {*} id 菜单的ID - */ - getImagePathById: function (id) { - try { - let index = this.image_style.findIndex((item) => item.id == id); - if (index < 0) { - throw new Error("没有找到指定的ID"); - } - let subStyle = this.image_style[index].subStyle; - return subStyle; - - } catch (error) { - throw error; - } - } - -} - -export { ImageStyleDefine } \ No newline at end of file diff --git a/src/main/IPCEvent/settingIpc.js b/src/main/IPCEvent/settingIpc.js deleted file mode 100644 index f4696d4..0000000 --- a/src/main/IPCEvent/settingIpc.js +++ /dev/null @@ -1,72 +0,0 @@ -const { - ipcMain -} = require("electron") -import { DEFINE_STRING } from '../../define/define_string' -import { - Setting -} from '../setting/setting' -let setting = new Setting(global); - -function SettingIpc() { - - // 获取背景音乐配置列表 - ipcMain.handle(DEFINE_STRING.GET_BACKGROUND_MUSIC_CONFIG_LIST, async (event) => await setting.GetBackGroundMusicConfigList()); - - // 获取剪映关键帧配置列表 - ipcMain.handle(DEFINE_STRING.GET_KEYFRAME_OPTIONS, async (event) => await setting.GetKeyFrameOptions()); - // 保存剪映关键帧配置 - ipcMain.handle(DEFINE_STRING.SAVE_KEY_FRAME_SETTING, async (event, value) => await setting.SaveKeyFrameSetting(value)); - // 监听添加背景音乐文件 - ipcMain.handle(DEFINE_STRING.ADD_BACKGROUND_MUSIC_FOLDER, async (event, value) => await setting.AddBackgroundMusicFolder(value)) - // 删除剪映的样式设置 - ipcMain.handle(DEFINE_STRING.DELETE_DRAFT_TEXT_STYLE, async (event, value) => await setting.deleteClipSetting("text_style", value)); - - // 删除剪映的背景音乐设置 - ipcMain.handle(DEFINE_STRING.DELETE_CLIP_SETTING, async (event, value) => await setting.deleteClipSetting("background_music_setting", value)); - // 删除剪映的友情提示设置 - ipcMain.handle(DEFINE_STRING.DELETE_FRIENDLY_REMINDER, async (event, value) => await setting.deleteClipSetting("friendly_reminder_setting", value)); - - // 监听获取SD配置任务 - ipcMain.handle(DEFINE_STRING.INIT_SD_CONFIG, async (event, value) => await setting.InitSDConfig()); - - // 获取主页显示信息 - ipcMain.handle(DEFINE_STRING.GET_SHOW_MESSAGE, async (event) => await setting.GetShowMessage()) - // 获取关键帧的配置数据 - ipcMain.handle(DEFINE_STRING.GET_KEY_FRAME_CONFIG_DATA, async (event) => await setting.GetKeyFrameConfigData()); - - // 删除后台队列任务 - ipcMain.handle(DEFINE_STRING.DELETE_BACK_TASK, async (event, value) => await setting.RemoveTask(value)); - - // 获取自动保存图片的分类方式 - ipcMain.handle(DEFINE_STRING.GET_AUTO_SAVE_IMAGE_CLASSIFY_OPTIONS, async (event) => await setting.GetAutoSaveImageClassifyOptions()); - - // 保存图片自动保存的配置 - ipcMain.handle(DEFINE_STRING.SAVE_IMAGE_AUTO_SAVE_SETTING, async (event, value) => await setting.SaveImageAutoSaveSetting(value)); - - // 获取当前的自动保存图片的设置 - ipcMain.handle(DEFINE_STRING.GET_IMAGE_AUTO_SAVE_SETTING, async (event) => await setting.GetImageAutoSaveSetting()); - - // 开始手动保存图片 - ipcMain.handle(DEFINE_STRING.SAVE_IMAGE_TO_OTHER_FOLDER, async (event, value) => await setting.SaveImageToOtherFolder(value)); - // 检查机器码是否存在 - ipcMain.handle(DEFINE_STRING.CHECK_MACHINE_ID, async (event, value) => await setting.CheckMachineId(value)); - - //修改剪映草稿配置 - ipcMain.handle(DEFINE_STRING.MODIFY_SAMPLE_SETTING, async (event, value) => await setting.ModifySampleSetting(value)); - - // 获取选择角色场景模式的options - ipcMain.handle(DEFINE_STRING.MJ.GET_TAG_SELECT_MODEL, async (event) => await setting.GetRoleSceneModeOptions()); - - // 获取当前生成图片的生图方式(sd,mj,d3) - ipcMain.handle(DEFINE_STRING.GET_IMAGE_GENERATE_CATEGORY, async (event) => await setting.GetImageGenerateCategory()); - - // // 获取指定的配置文件里面指定的属性的数据 - ipcMain.handle(DEFINE_STRING.GET_DEFINE_CONFIG_JSON_BY_PROPERTY, async (event, value) => await setting.GetDefineConfigJsonByProperty(value)) - - // // 保存指定的配置文件里面指定的属性的数据 - ipcMain.handle(DEFINE_STRING.SAVE_DEFINE_CONFIG_JSON_BY_PROPERTY, async (event, value) => await setting.SaveDefineConfigJsonByProperty(value)) -} - -export { - SettingIpc -} \ No newline at end of file diff --git a/src/main/IPCEvent/writingIpc.js b/src/main/IPCEvent/writingIpc.js deleted file mode 100644 index 668dc1d..0000000 --- a/src/main/IPCEvent/writingIpc.js +++ /dev/null @@ -1,28 +0,0 @@ -import { - ipcMain -} from "electron"; -import { DEFINE_STRING } from '../../define/define_string' -import { - Writing -} from '../backPrompt/writing' -let writing = new Writing(global); - -function WritingIpc() { - // 监听分镜时间的保存 - ipcMain.handle(DEFINE_STRING.SAVE_COPYWRITING_INFOMATION, async (event, value) => await writing.SaveCopywritingInformation(value)); - - // 监听获取当前项目下面的分镜文案 - ipcMain.handle(DEFINE_STRING.GET_PROJECT_WORD, async (event, value) => await writing.GetProjectWord()); - - // 获取config配置文件数据 - ipcMain.handle(DEFINE_STRING.GET_CONFIG_JSON, async (event, value) => await writing.GetConfigJson(value)); - - // 将指定的文案txt数组写入到指定的文件中 - ipcMain.handle(DEFINE_STRING.SAVE_WORD_TXT, async (event, value) => await writing.SaveWordTxt(value)); - - // 监听获取字幕时间 - ipcMain.handle(DEFINE_STRING.IMPORT_SRT_AND_GET_TIME, async (event, value) => await writing.ImportSrtAndGetTime(value)) -} -export { - WritingIpc -} diff --git a/src/main/Original/TagCustomize.js b/src/main/Original/TagCustomize.js deleted file mode 100644 index cb37102..0000000 --- a/src/main/Original/TagCustomize.js +++ /dev/null @@ -1,33 +0,0 @@ -import { TagDefine } from "../../define/tagDefine"; -export class TagCustomize { - constructor(global) { - this.global = global; - this.tagDefine = new TagDefine(global); - } - - /** - * 获取默认的tag - * @param {*} value - */ - async GetTagDataByTypeAndProperty(value) { - return await this.tagDefine.getTagDataByTypeAndProperty(value[0], value[1]); - } - - /** - * 保存数据到指定的tag中 - * @param {*} value - * @returns - */ - async SaveTagPropertyData(value) { - return await this.tagDefine.saveTagPropertyData(value); - } - - /** - * 删除指定的tag数据 - * @param {*} value - * @returns - */ - async DeleteTagPropertyData(value) { - return await this.tagDefine.deleteTagPropertyData(value); - } -} \ No newline at end of file diff --git a/src/main/backPrompt/imageGenerate.js b/src/main/backPrompt/imageGenerate.js deleted file mode 100644 index 1571cce..0000000 --- a/src/main/backPrompt/imageGenerate.js +++ /dev/null @@ -1,493 +0,0 @@ - -import { Tools } from "../tools"; -import path from "path"; -import { DEFINE_STRING } from "../../define/define_string"; -import { define } from "../../define/define"; -import { PublicMethod } from "../Public/publicMethod"; -import { SD } from "../Public/SD" -const util = require('util'); -const { spawn, exec } = require('child_process'); -import axios from "axios"; -const sharp = require('sharp'); -const execAsync = util.promisify(exec); -const { v4: uuidv4 } = require('uuid'); // 引入UUID库来生成唯一标识符 -let fspromises = require("fs").promises; -import { MD5 } from "crypto-js"; -import { ImageSetting } from "../../define/setting/imageSetting"; - - -export class ImageGenerate { - constructor(global) { - this.global = global; - this.tools = new Tools(); - this.pm = new PublicMethod(global); - this.sd = new SD(global); - } - - /** - * 获取指定名称的提示词json文件数据 - * @param {*} value - */ - async GetPromptJson(value) { - try { - let json_path = path.join(this.global.config.project_path, "tmp/input_crop/" + value + ".json"); - let isExist = await this.tools.checkExists(json_path); - if (!isExist) { - throw new Error("提示词文件不存在"); - } - let res = JSON.parse(await fspromises.readFile(json_path, 'utf-8')); - return { - value: 1, - data: res - } - } catch (error) { - return { - code: 0, - message: error.toString() - } - } - } - - /** - * 修改指定任务队列的状态 - * @param {*} value 0 使用什么查找(id。out_folder,) 1查找的值 2 状态值 - * @returns - */ - async ModifyGenerateTaskStatus(value) { - try { - await this.pm.ModifyTaskStatus(value[0], value[1], value[2]); - return { - code: 1 - } - } catch (error) { - return { - code: 0, - message: error.toString() - } - } - } - - - - /** - * 修改本地的参数 - * @param {修改json的参数} value - */ - async ModifyInpurCropJson(value) { - try { - value = JSON.parse(value); - let prompt = value.prompt; - // 重绘幅度 - let denoising_strength = value.denoising_strength; - let json_path = path.join(path.join(global.config.project_path, 'tmp/input_crop'), value.name + ".json"); - let old_json = JSON.parse(await fspromises.readFile(json_path, 'utf-8')); - old_json.webui_config.prompt = prompt; - old_json.webui_config.denoising_strength = denoising_strength; - old_json.model = value.model; - old_json.adetailer = value.adetailer; - old_json.chinese_prompt = value.chinese_prompt; - - if (value.modify_old) { - old_json.webui_config.init_images = value.modify_old; - } - - await fspromises.writeFile(json_path, JSON.stringify(old_json)); - return { - code: 1 - } - } catch (error) { - throw new Error(error); - } - } - - /** - * 返回文件夹里的所有的图片,以及其他信息 - * @param {图片文件夹} value - * @returns - */ - async getFolderImageList(mainWindow, value, isReturn) { - try { - let img_dir = path.normalize(value); - let base_name = path.basename(img_dir); - let tmp = path.dirname(img_dir); - let input_path = path.join(tmp, "input_crop") - // console.log(tmp, input_path) - let files = await fspromises.readdir(img_dir) - let imageFiles = files.filter(file => /\.(png)$/i.test(file)); - imageFiles.sort(); - - let res = []; - let task_list_json = JSON.parse(await fspromises.readFile(path.join(this.global.config.project_path, 'scripts/task_list.json'), 'utf-8')); - // 处理数据 - for (let i = 0; i < imageFiles.length; i++) { - const img = imageFiles[i]; - let imput_path = path.join(input_path, img); - let img_json = path.join(input_path, img + '.json'); - // 判断文件是不是存在 - let prompt_json = JSON.parse(await fspromises.readFile(img_json)); - - let output_list = await this.pm.getSubFolderList(path.join(this.global.config.project_path, "tmp"), 'start', 'output_crop'); - let output_image_list = []; - for (let i = 0; i < output_list.length; i++) { - const item = output_list[i]; - // 找到找到文件对应的任务列表的样式和lora - let task_list = task_list_json.task_list.filter(a => a.out_folder == item); - let output_1 = path.join(tmp, item); - let obj = { - id: uuidv4(), - img_path: path.join(output_1, img), - image_style: task_list[0].image_style, - lora: task_list[0].lora - } - output_image_list.push(obj); - - } - let main_task_list = task_list_json.task_list.filter(a => a.out_folder == base_name); - let obj = { - name: img, - id: uuidv4(), - sampler_name: prompt_json.webui_config.sampler_name, - prompt: prompt_json.webui_config.prompt, - chinese_prompt: prompt_json.chinese_prompt, - negative_prompt: prompt_json.webui_config.negative_prompt, - denoising_strength: prompt_json.webui_config.denoising_strength, - seed: prompt_json.webui_config.seed, - image: path.join(img_dir, img), - oldImage: prompt_json.webui_config.init_images, - output_list: output_image_list, - model: prompt_json.model, - image_style: main_task_list[0].image_style, - lora: main_task_list[0].lora, - image_style_list: main_task_list[0].image_style_list, - adetailer: prompt_json.adetailer, - width: prompt_json.webui_config.width, - height: prompt_json.webui_config.height - } - res.push(obj) - // 获取提示词 - } - if (isReturn) { - return { - code: 1, - windowID: mainWindow.id, - value: res - } - } else { - mainWindow.webContents.send(DEFINE_STRING.RETURN_IMAGE_PROMPT, { - code: 1, - windowID: mainWindow.id, - value: res - }) - } - } catch (error) { - return { - code: 0, - message: `Error message ${error.toString()}` - } - } - } - - /** - * 将反推的图片的信息添加到一个json文件中 - */ - async AddWebuiJson() { - try { - return await this.pm.AddWebuiJson(); - } catch (error) { - return { - code: 0, - message: error.toString() - } - } - } - - /** - * 修改任务队列数据 - * @param {替换后的值} value - */ - async ModifyImageTaskList(value) { - try { - let res = await this.pm.ModifyImageTaskList(value); - if (res) { - return { - code: 1, - message: "替换成功" - } - } - } catch (error) { - return { - code: 0, - message: error.toString() - } - } - } - - /** - * 获取生成图片的任务队列(可以添加部分判断) - */ - async GetGenerateTaskList() { - try { - return await this.pm.GetImageTask() - } catch (error) { - return { - code: 0, - message: error.message - } - } - } - - /** - * 生成任务中的队列 - * @param {传入所有执行生图队列的任务} value - */ - async GenerateImageInSelectTask(value) { - try { - let batch = DEFINE_STRING.QUEUE_BATCH.SD_BACKSTEP_GENERATE_IMAGE - let taskPath = path.join(this.global.config.project_path, 'scripts/task_list.json'); - let task_list_json = JSON.parse(await fspromises.readFile(taskPath, 'utf-8')); - let auto_save_image = await this.tools.getJsonFilePropertyValue(define.img_base, "auto_save_image", {}, false); - let png_files = []; - // 读取队列中的任务,然后添加队列 - for (let i = 0; i < value.length; i++) { - const element = value[i]; - let task_list = task_list_json.task_list.filter(item => item.id == element)[0]; - let seed = -1; - let images = await this.tools.getFilesWithExtensions(path.join(this.global.config.project_path, 'tmp/input_crop'), '.png'); - await fspromises.mkdir(path.join(this.global.config.project_path, 'tmp/' + task_list.out_folder), { recursive: true }); - if (images.length <= 0) { - throw new Error("未检测到抽帧图片。请检查"); - } - if (images.length > auto_save_image.save_match_count) { - png_files = await this.tools.getFilesWithExtensions(auto_save_image.main_save_folder, '.png'); - } - this.global.requestQuene.enqueue(async () => { - let res = await this.sd.OneImageGeneration(images[0], task_list, seed); - let tmp_seed = -1; - if (seed == -1) { - tmp_seed = res; - } - for (let j = 1; j < images.length; j++) { - const item = images[j]; - - let has_permission = false; - // 判断权限 - let permission = this.global.permission; - - if (permission && permission.length >= 0) { - if (permission.indexOf(DEFINE_STRING.PERMISSIONS.AUTO_SAVE_IMAGE_PERMISSION) >= 0) { - has_permission = true; - } - } else { - has_permission = true; - } - - if (auto_save_image.save_match_count && j >= auto_save_image.save_match_count && has_permission && auto_save_image.auto_match) { - // 现在随机匹配视频 - // 获取指定的文件夹中的图片 - let randomData = png_files[Math.floor(Math.random() * png_files.length)]; - let base_name = path.basename(item); - let copy_path = path.join(this.global.config.project_path, 'tmp/' + task_list.out_folder, base_name); - await this.tools.copyFileOrDirectory(randomData, copy_path); - } else { - this.global.requestQuene.enqueue(async () => { - await this.sd.OneImageGeneration(item, task_list, tmp_seed); - }, `${task_list.out_folder}_${images[j]}`, batch, task_list.out_folder) - } - } - - }, `${task_list.out_folder}_${images[0]}`, batch, task_list.out_folder) - // } - task_list.status = 'queue'; - - // 开始批次执行(全部刷新) - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.IMAGE_TASK_STATUS_REFRESH, task_list); - - // 判断是不是还有批次执行的任务 - // 监听子批次完成(修改当前批次的状态) - this.global.requestQuene.setSubBatchCompletionCallback(batch, task_list.out_folder, async (failedTasks) => { - console.log(failedTasks) - if (failedTasks.length > 0) { - - } else { - // 判断是不是有错误。没有错误的话。直接修改状态。有错误直接记录错误(写入一个就行) - task_list_json = JSON.parse(await fspromises.readFile(taskPath, 'utf-8')); - // 全部执行完毕之后,修改 - task_list_json.task_list.map(a => { - if (a.out_folder == task_list.out_folder) { - a.status = "ok"; - } - }) - // 写入 - await fspromises.writeFile(taskPath, JSON.stringify(task_list_json)); - - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.IMAGE_TASK_STATUS_REFRESH, { - out_folder: task_list.out_folder, - status: "ok" - }); - - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH, { - out_folder: task_list.out_folder, - status: "ok" - }) - } - }) - } - - // 监听总批次完成 - this.global.requestQuene.setBatchCompletionCallback(batch, (failedTasks) => { - if (failedTasks.length > 0) { - let message = ` - 批次生成任务都已完成。 - 但是以下任务执行失败: - ` - failedTasks.forEach(({ taskId, error }) => { - message += `${taskId}-, \n 错误信息: ${error}` + '\n'; - }); - - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.SHOW_MESSAGE_DIALOG, { - code: 0, - message: message - }) - } else { - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.SHOW_MESSAGE_DIALOG, { - code: 1, - message: "所有生成任务完成" - }) - } - }) - // 写回 - await fspromises.writeFile(taskPath, JSON.stringify(task_list_json)); - return { - code: 1, - } - } catch (error) { - return { - code: 0, - message: error.toString() - } - } - } - - /** - * 批量高清文件夹 - * @param {项目下面的文件夹的值} value - */ - async ImproveResolution(value) { - try { - let batch = DEFINE_STRING.QUEUE_BATCH.LOCAL_IMAGE_IMPROVE; - - // 加入队列 - for (let i = 0; i < value.length; i++) { - const folder = value[i]; - this.global.requestQuene.enqueue(async () => { - await this.pm.ImproveFolder(folder); - }, folder, batch) - - // 添加队列后修改状态 - await this.pm.ModifyTaskStatus('out_folder', folder, "video_improving"); - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH, { - out_folder: folder, - status: "video_improving" - }) - } - - global.requestQuene.setBatchCompletionCallback(batch, async (failedTasks) => { - - let permission = this.global.permission; - // 判断权限 - if (permission && permission.length >= 0) { - if (permission.indexOf(DEFINE_STRING.PERMISSIONS.AUTO_SAVE_IMAGE_PERMISSION) >= 0) { - // 在高清前,先将要高清的图片保存 - let res = await ImageSetting.SaveImageToOtherFolder(value, null); - if (res.code == 0) { - return res; - } - } - } else { - // 在高清前,先将要高清的图片保存 - let res = await ImageSetting.SaveImageToOtherFolder(value, null); - if (res.code == 0) { - return res; - } - } - - - if (failedTasks.length > 0) { - let message = ` - 高清任务都已完成。 - 但是以下任务执行失败: - ` - failedTasks.forEach(({ taskId, error }) => { - message += `${taskId}-, \n 错误信息: ${error}` + '\n'; - }); - - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.SHOW_MESSAGE_DIALOG, { - code: 0, - message: message - }) - } else { - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.SHOW_MESSAGE_DIALOG, { - code: 1, - message: "所有任务高清完成" - }) - } - }) - return { - code: 1 - } - } catch (error) { - return { - code: 0, - message: error.toString() - } - } - } - - /** - * 下载文件到指定位置 - * @param {*} value 0: 源图片地址 1: 类型 2: 目标文件地址 - */ - async DownloadImageFile(value) { - try { - let type = value[1]; - let img_file = value[0]; - let target_file = value[2]; - if (type == "cover") { - // 下载封面 - // 判断封面是不是存在 - let cover_path = path.join(this.global.config.project_path, 'data/封面'); - let isExist = await this.tools.checkExists(cover_path); - if (!isExist) { - await fspromises.mkdir(cover_path, { recursive: true }); - } - // 复制 - await fspromises.copyFile(img_file, path.join(cover_path, Date.now() + '.png')); - return { - code: 1, - message: "保存成功!" - } - } else if (type == "replace") { - if (!target_file) { - throw new Error("目标文件地址不存在"); - } - await fspromises.copyFile(path.normalize(decodeURIComponent(img_file)), path.normalize(decodeURIComponent(target_file))); - await this.tools.copyFileOrDirectory(decodeURIComponent(img_file), decodeURIComponent(target_file).replace("output_crop_1", "input_crop")); - return { - code: 1, - } - } - - else { - return { - code: 0, - message: "参数错误" - } - } - } catch (error) { - return { - code: 0, - message: error.toString() - } - } - } -} \ No newline at end of file diff --git a/src/main/backPrompt/videoGenerate.js b/src/main/backPrompt/videoGenerate.js deleted file mode 100644 index a1be12a..0000000 --- a/src/main/backPrompt/videoGenerate.js +++ /dev/null @@ -1,556 +0,0 @@ -import path from "path"; -import { define } from "../../define/define"; -import { Tools } from "../tools"; -import { PublicMethod } from "../Public/publicMethod"; -import { func } from '../func' -import { DEFINE_STRING } from "../../define/define_string"; -const util = require('util'); -const { spawn, exec } = require('child_process'); -const execAsync = util.promisify(exec); -const fspromises = require("fs").promises; -import { SD } from "../Public/SD" - -export class VideoGenerate { - constructor(global) { - this.global = global; - this.tools = new Tools(); - this.pm = new PublicMethod(global); - this.sd = new SD(global); - } - - /** - * 获取之前的基础配置 - */ - async GetVideoGenerateConfig() { - try { - let res = await this.tools.getJsonFilePropertyValue(path.join(this.global.config.project_path, "scripts/config.json"), "video_config", {}, false); - return { - code: 1, - data: res - } - } catch (error) { - return { - code: 0, - message: error.toString() - } - } - } - - /** - * 保存合成视频的基础信息(Srt,audio,background) - * @param {*} value 保存合成视频的基础信息(Srt,audio,background) - */ - async SaveVideoSrtAndAudioMessage(value) { - try { - value = JSON.parse(value); - await this.tools.writeJsonFilePropertyValue(path.join(this.global.config.project_path, "scripts/config.json"), "video_config", value); - return { - code: 1 - } - } catch (error) { - return { - code: 0, - message: error.toString() - } - } - } - - /** - *全自动合成视频的任务(出图、高清、合成视频) - * @param {传入的需要执行的task_list的任务} value - */ - async ActionAutoVideoTask(value) { - try { - // 开始添加队列任务 - // 生图 - // 将当前的所有任务添加到队列中 - await this.pm.AddWebuiJson(); - let batch = DEFINE_STRING.QUEUE_BATCH.AUTO_VIDEO_GENERATE; - let taskPath = path.join(this.global.config.project_path, "scripts/task_list.json"); - - // // 修改数据(保存srt字幕文件位置。配音文件位置。背景音乐文件) - // this.global.fileQueue.enqueue(async () => { - // let config_json = JSON.parse(await fspromises.readFile(path.join(this.global.config.project_path, "scripts/config.json"), 'utf-8')); - // config_json.srt_path = value[1].srt_path; - // config_json.audio_path = value[1].audio_path; - // config_json.background_music = value[1].background_music; - // await fspromises.writeFile(path.join(this.global.config.project_path, "scripts/config.json"), JSON.stringify(config_json)); - // }) - - await this.tools.writeJsonFilePropertyValue(path.join(this.global.config.project_path, "scripts/config.json"), "video_config", value[1]); - - // 便利所有的队列任务 - for (let i = 0; i < value[0].length; i++) { - // 将所有的数据天添加到队列(总的大队列,有很多的小队列) - // 将所有生图任务添加到队列中 - const task_list = value[0][i]; - let seed = -1; - let subBatchId = `${task_list.out_folder}_image` - let images = await this.tools.getFilesWithExtensions(path.join(this.global.config.project_path, 'tmp/input_crop'), '.png'); - await fspromises.mkdir(path.join(this.global.config.project_path, 'tmp/' + task_list.out_folder), { recursive: true }); - if (images.length <= 0) { - throw new Error("未检测到抽帧图片。请检查"); - } - this.global.requestQuene.enqueue(async () => { - let res = await this.sd.OneImageGeneration(images[0], task_list, seed); - let tmp_seed = -1; - if (seed == -1) { - tmp_seed = res; - } - for (let j = 1; j < images.length; j++) { - const element = images[j]; - this.global.requestQuene.enqueue(async () => { - await this.sd.OneImageGeneration(element, task_list, tmp_seed); - }, `${task_list.out_folder}_${images[j]}`, batch, subBatchId) - } - - }, `${task_list.out_folder}_${images[0]}`, batch, subBatchId) - // } - task_list.status = 'queue'; - task_list["isAuto"] = "true"; - await this.pm.ModifyImageTaskList([task_list]); - // 修改状态 - // await this.pm.ModifyTaskStatus("id", task_list.id, "queue"); - // this.global.fileQueue.enqueue(async () => { - // let task_json = JSON.parse(await fspromises.readFile(taskPath, 'utf-8')); - // let index = task_json.task_list.findIndex(item => item.id == task_list.id); - // task_json.task_list[index] = task_list; - // await fspromises.writeFile(taskPath, JSON.stringify(task_json)); - // }) - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH, task_list) - - // 判断是不是还有批次执行的任务 - // 监听子批次完成(修改当前批次的状态) - this.global.requestQuene.setSubBatchCompletionCallback(batch, subBatchId, async (failedTasks) => { - console.log(failedTasks) - if (failedTasks.length > 0) { - // 之前的任务出现错误 - // 执行错误 - } else { - // 判断是不是有错误。没有错误的话。直接修改状态。有错误直接记录错误(写入一个就行) - task_list.status = "ok"; - await this.pm.ModifyTaskStatus("id", task_list.id, 'ok'); - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH, task_list) - console.log(subBatchId + "生图执行完毕。可以开始执行高清") - - // 添加高清队列 - // task_list - this.global.requestQuene.enqueue(async () => { - await this.pm.ImproveFolder(task_list.out_folder); - }, `${task_list.out_folder}_improve`, batch, `${task_list.out_folder}_improve`); - // 添加队列后修改状态 - task_list.status = "video_improving" - await this.pm.ModifyTaskStatus('out_folder', task_list.out_folder, "video_improving"); - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH, task_list) - - // 监听高清任务完成 - this.global.requestQuene.setSubBatchCompletionCallback(batch, `${task_list.out_folder}_improve`, async (failedTasks) => { - console.log(failedTasks) - if (failedTasks.length > 0) { - // 之前的任务出现错误 - // 执行错误 - } else { - - console.log(task_list.out_folder + "高清完成,可以开始合成视频"); - // 添加生成视频队列 - this.global.requestQuene.enqueue(async () => { - let video_config = JSON.parse(await fspromises.readFile(define.video_config, 'utf-8')); - await this.AutoGeneretionOneVide(task_list.out_folder, video_config, value); - }, `${task_list.out_folder}_video`, batch, `${task_list.out_folder}_video`); - task_list.status = "video_queue"; - // 添加后修改状态 - await this.pm.ModifyTaskStatus('out_folder', task_list.out_folder, "video_queue"); - - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH, task_list) - - // 监听生成视频任务完成 - this.global.requestQuene.setSubBatchCompletionCallback(batch, `${task_list.out_folder}_video`, async (failedTasks) => { - console.log(failedTasks) - if (failedTasks.length > 0) { - // 之前的任务出现错误 - // 执行错误 - } else { - console.log(task_list.out_folder + "合成视频完成"); - // 添加生成视频队列 - task_list.status = "video_ok"; - // 添加后修改状态 - await this.pm.ModifyTaskStatus('out_folder', task_list.out_folder, "video_ok"); - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH, task_list) - } - }) - - } - }) - } - }) - } - - // 监听总批次完成 - this.global.requestQuene.setBatchCompletionCallback(batch, async (failedTasks) => { - if (failedTasks.length > 0) { - let message = ` - 批次生成任务都已完成。 - 但是以下任务执行失败: - ` - failedTasks.forEach(({ taskId, error }) => { - message += `${taskId}-, \n 错误信息: ${error}` + '\n'; - }); - - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.SHOW_MESSAGE_DIALOG, { - code: 0, - message: message - }) - } else { - console.log("所有的自动生成任务完成"); - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.SHOW_MESSAGE_DIALOG, { - code: 1, - message: "所有自动任务完成" - }) - } - - this.global.fileQueue.enqueue(async () => { - // 读取最新的数据删除 - // 将自动化标识删除 - let task_json = JSON.parse(await fspromises.readFile(taskPath, 'utf-8')); - for (let i = 0; i < task_json.task_list.length; i++) { - let task_list = task_json.task_list[i]; - task_list["isAuto"] = "false"; - await this.pm.ModifyImageTaskList([task_list]); - } - }) - }) - return { - code: 1, - message: "自动任务添加到队列中" - } - - } catch (error) { - console.error(error) - return { - code: 0, - message: error.message - } - } - } - - /** - * 获取文件夹下面的子文件夹,添加判断条件 - * @param {value} value - * @returns - */ - async getSubFolderList(value) { - try { - let folder = await this.pm.getSubFolderList(path.join(this.global.config.project_path, "tmp"), value[0], value[1]); - // 找到所有的数据(查询状态返回) - let task_path = path.join(this.global.config.project_path, "scripts/task_list.json"); - let isExist = await this.tools.checkExists(task_path); - let data = []; - if (!isExist) { - for (let i = 0; i < folder.length; i++) { - const element = folder[i]; - let obj = { - folder: element, - status: "unkown error" - } - data.push(obj); - } - } else { - let task_list = JSON.parse(await fspromises.readFile(task_path, 'utf-8'))["task_list"]; - // 查询状态 - for (let i = 0; i < folder.length; i++) { - const element = folder[i]; - let index = task_list.findIndex(item => item.out_folder == element); - if (index < 0) { - let obj = { - folder: element, - status: "unkown error" - } - data.push(obj); - } else { - let status = task_list[index].status; - let obj = { - folder: element, - status: status - } - data.push(obj); - } - } - } - return { - code: 1, - data: data - } - } catch (error) { - return { - code: 0, - message: `Error Message ${error}` - } - } - } - - /** - * 自动生成一个视频 - * @param {视频生成图片的文件夹} element - * @param {视频配置} video_config - * @param {参数。第一个值为数组,为生成的图片文件。第二个参数是配置} value - */ - async AutoGeneretionOneVide(element, video_config, value) { - try { - let background_music = ""; - // 读取背景音乐的路径 - if (value[1].background_music != "") { - let background_music_config = (await func.getClipSetting("background_music_setting")).value; - let background_music_filter = background_music_config.filter(item => item.id == value[1].background_music); - if (background_music_filter.length <= 0) { - throw new Error("背景音乐对应的配置没有找到"); - } else { - background_music = background_music_filter[0].folder_path; - } - } - - // 随机获取字幕设置 - let ass_config = video_config.assConfig; - let ass_random_index = Math.floor(Math.random() * ass_config.length); - let watermark_config = video_config.watermarkConfig; - let watermark_random_index = Math.floor(Math.random() * watermark_config.length); - - // 对每个视频生成配置文件并将其添加到配置文件中 - let obj = { - srt_path: value[1].srt_path, - // 字幕样式(需要随机) - srt_style: ass_config[ass_random_index], - audio_path: value[1].audio_path, - background_music_folder: background_music, - // 水印设置(需要随机) - friendly_reminder: watermark_config[watermark_random_index], - video_resolution_x: video_config.video_resolution_x, - video_resolution_y: video_config.video_resolution_y, - outpue_file: path.join(this.global.config.project_path, this.global.config.project_name + element + ".mp4"), - image_folder: path.join(this.global.config.project_path, 'tmp/' + element), - srt_config: path.join(this.global.config.project_path, 'scripts/config.json'), - mp4_file_txt: path.join(this.global.config.project_path, `scripts/${element}.txt`), - status: "no", - audio_sound_size: video_config.audioSoundSize, - background_music_sound_size: video_config.backgroundMusicSoundSize, - keyFrame: video_config.keyframe, - frameRate: video_config.frameRate, - bitRate: video_config.bitRate - } - // 将配置文件写入 - let project_config_path = path.join(this.global.config.project_path, `scripts/${element}.json`); - await fspromises.writeFile(project_config_path, JSON.stringify(obj)); - // let task_list = JSON.parse(await fspromises.readFile(path.join(this.global.config.project_path,'scripts/task_'))); - let scriptPath = path.join(define.scripts_path, 'Lai.exe'); - // 执行生成图片的脚本 - let script = `cd "${define.scripts_path}" && "${scriptPath}" -c "${project_config_path.replaceAll('\\', '/')}"`; - const output = await execAsync(script, { maxBuffer: 1024 * 1024 * 10, encoding: 'utf-8' }); - if (output.stderr != '') { - obj.status = "video_error"; - obj.stdout = output.stdout; - obj.stderr = output.stderr; - await this.pm.ModifyTaskStatus('out_folder', element, "video_error"); - throw new Error(output.stderr); - } else { - obj.status = "video_ok"; - obj.stdout = output.stdout; - obj.stderr = output.stderr; - await this.pm.ModifyTaskStatus('out_folder', element, "video_ok"); - // 将写出的视频中的exif数据删除 - // await this.tools.deletePngAndDeleteExifData(obj.outpue_file, path.join(this.global.config.project_path, this.global.config.project_name + "_" + element.split('_')[element.split('_').length - 1] + ".mp4")); - } - - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH, { - out_folder: element, - status: obj.status - }) - } catch (error) { - //手动修改 - let task_list_json = JSON.parse(await fspromises.readFile(path.join(this.global.config.project_path, "scripts/task_list.json"), 'utf-8')); - let index = task_list_json.task_list.findIndex(item => item.out_folder == element); - if (index < 0) { - throw new Error("未找到对应的任务"); - } - task_list_json.task_list[index].status = "video_error"; - task_list_json.task_list[index].errorMessage = error.toString(); - // 写回 - await fspromises.writeFile(path.join(this.global.config.project_path, "scripts/task_list.json"), JSON.stringify(task_list_json)); - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH, { - out_folder: element, - status: "video_error" - }) - throw error; - } - } - - /** - * 添加自动合成任务到队列中去 - * @param {} value - */ - async AutoGeneretionVideo(value) { - try { - // 先检查所有的条件 - let batch = DEFINE_STRING.QUEUE_BATCH.AUTO_VIDEO_GENERATE_SINGLE; - // console.log(value); - let video_config = JSON.parse(await fspromises.readFile(define.video_config, 'utf-8')); - let res = await this.CheckVideoGenerattionAllCondition(video_config, value[1], value[0]); - if (res.code == 0) { - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.SHOW_MESSAGE_DIALOG, res); - return res; - } - for (let i = 0; i < value[0].length; i++) { - const element = value[0][i]; - this.global.requestQuene.enqueue(async () => { - await this.AutoGeneretionOneVide(element, video_config, value) - }, element, batch); - - // 添加队列后修改状态 - await this.pm.ModifyTaskStatus('out_folder', element, "video_queue"); - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.VIDEO_GENERATE_STATUS_REFRESH, { - out_folder: element, - status: "video_queue" - }) - } - - this.global.requestQuene.setBatchCompletionCallback(batch, (failedTasks) => { - if (failedTasks.length > 0) { - let message = ` - 生成视频任务都已完成。 - 但是以下任务执行失败: - ` - failedTasks.forEach(({ taskId, error }) => { - message += `${taskId}-, \n 错误信息: ${error}` + '\n'; - }); - - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.SHOW_MESSAGE_DIALOG, { - code: 0, - message: message - }) - } else { - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.SHOW_MESSAGE_DIALOG, { - code: 1, - message: "所有生成视频任务已完成" - }) - } - }) - return { - code: 1 - } - } catch (error) { - return { - code: 0, - message: error.toString() - } - } - } - - /** - * 检测生成视频条件的必要条件 - * @param {生成视频配置文件} video_config - * @param {生成视频的基础配置} simpleData - * @param {输出文件夹位置,为null,检查input文件里面的图片文件是不是和配置文件中的图片数量一致} out_folder - * @returns - */ - async CheckVideoGenerattionAllCondition(video_config, simpleData, out_folder) { - let message = ""; - if (video_config == null) { - video_config = JSON.parse(await fspromises.readFile(define.video_config, 'utf-8')); - } - // 基础信息检测 - if (video_config.audioSoundSize == null) { - message += "配音大小不能为空" + '\n'; - } - if (video_config.backgroundMusicSoundSize == null) { - message += "背景音乐音量大学不能为空" + '\n'; - } - if (video_config.video_resolution_x == null) { - message += "生成视频的宽度不能为空" + '\n'; - } - if (video_config.video_resolution_y == null) { - message += "生成视频的高度不能为空" + '\r\n'; - } - if (video_config.offsetValue == null) { - message += "视频的上下偏移量不能为空" + '\n'; - } - if (video_config.frameRate == null) { - message += "生成视频的帧率不能为空" + '\n'; - } - if (video_config.bitRate == null) { - message += "生成视频码率的不能为空" + '\n'; - } - - // 判断字幕列表中是不是有数据 - if (video_config.assConfig == null || video_config.assConfig.length <= 0) { - message += "字幕设置最少包含一条" + '\n'; - } - if (video_config.watermarkConfig == null || video_config.watermarkConfig.length <= 0) { - message += "水印设置最少包含一条" + '\n'; - } - // 判断背景音乐文件夹中是不是存在。并且检查其中是不是有音乐文件 - if (simpleData.background_music == "") { - message += "背景音乐文件夹路径不能为空" + '\n'; - } - // 判断背景音乐文件夹是不是存在 - if (await this.tools.checkExists(simpleData.background_music)) { - message += "背景音乐文件夹不存在" + '\n'; - } - // 判断里面是不是有MP3或者是wav - let clip_json = JSON.parse(await fspromises.readFile(define.clip_setting, 'utf-8'))["background_music_setting"]; - let background_music_obj = clip_json.filter(item => item.id == simpleData.background_music)[0]; - let mp3_file = await this.tools.getFilesWithExtensions(background_music_obj.folder_path, '.mp3'); - let wav_file = await this.tools.getFilesWithExtensions(background_music_obj.folder_path, '.wav'); - if (mp3_file.length <= 0 && wav_file.length <= 0) { - message += "背景文件夹中没有 MP3 或 WAV 文件" + '\n'; - } - - let config_path = path.join(this.global.config.project_path, 'scripts/config.json'); - let isE = await this.tools.checkExists(config_path); - if (!isE) { - message += "配置文件不存在。请先导入字幕文件。并调整时间轴。" - } else { - // 判断文案时间信息和图片信息是不是相同 - let config_json = JSON.parse(await fspromises.readFile(config_path, 'utf-8')); - let len = config_json["srt_time_information"].length; - if (out_folder == null) { - // 判断输入文件中的配置文件中的数量是不是对上 - let img_l = await this.tools.getFilesWithExtensions(path.join(this.global.config.project_path, "tmp/input_crop"), '.png'); - if (img_l.length != len) { - message += `input_crop 文件里面图片和文案信息对不上。检查是不是图片数量不对` - } - // 判断是不是有tag文件 - let tag_txt = await this.tools.getFilesWithExtensions(path.join(this.global.config.project_path, "tmp/input_crop"), '.txt'); - let c_j = await this.tools.getFilesWithExtensions(path.join(this.global.config.project_path, "tmp/input_crop"), '.json'); - if (tag_txt.length > 0) { - if (tag_txt.length != img_l.length) { - message += "反推的tag文件和图片的数量对不上。" + "\n"; - } - } else if (c_j.length > 0) { - if (c_j.length != img_l.length) { - message += "已存在的配置文件和图片的数量对不上。" + "\n"; - } - } else { - message += "好像没有反推呢" + "\n"; - } - } else { - // 判断当前的输入的 out_folder 中图片数量是不是可以和配置文件中能否对上 - for (let i = 0; i < out_folder.length; i++) { - const element = out_folder[i]; - let image_l = await this.tools.getFilesWithExtensions(path.join(this.global.config.project_path, "tmp/" + element), '.png'); - if (image_l.length != len) { - message += `${element} 文件里面图片和文案信息对不上。检查是不是图片数量不对` - } - } - } - } - if (message != '') { - let res = { - code: 0, - message: message - } - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.SHOW_MESSAGE_DIALOG, res) - return res; - } - return { - code: 1, - } - } -} \ No newline at end of file diff --git a/src/main/backPrompt/writing.js b/src/main/backPrompt/writing.js deleted file mode 100644 index 17f03eb..0000000 --- a/src/main/backPrompt/writing.js +++ /dev/null @@ -1,301 +0,0 @@ -let path = require("path"); -let fspromises = require("fs").promises; -import { Tools } from "../tools"; -import { DEFINE_STRING } from "../../define/define_string"; -import { PublicMethod } from "../Public/publicMethod"; -import { define } from "../../define/define"; -import { get, has } from "lodash"; -import { ClipSetting } from "../../define/setting/clipSetting"; -const { v4: uuidv4 } = require('uuid'); // 引入UUID库来生成唯一标识符 -let tools = new Tools(); - -export class Writing { - constructor(global) { - this.global = global - this.pm = new PublicMethod(global); - } - - /** - * 将文案信息写入到本地的文案文件中 - * @param {*} value - */ - async SaveWordTxt(value) { - try { - let word_path = path.join(global.config.project_path, "文案.txt"); - await tools.writeArrayToFile(value, word_path); - return { - code: 1, - message: "保存成功" - } - } catch (error) { - throw new Error(error); - } - } - - /** - * 将分镜的时间信息添加道配置文件中 - * @param {*} value 是一个数组,0 :写入的数据 1:写入的属性 2:是否需要解析 - */ - async SaveCopywritingInformation(value) { - try { - return await this.pm.SaveConfigJsonProperty(value); - } catch (error) { - return { - code: 0, - message: error.toString() - } - } - } - - /** - * 获取Config.json文件中指定的属性 - * @param {Array} value 传入的值 0 : 需要获取的属性 1: 返回的默认值 - * @returns - */ - async GetConfigJson(value) { - try { - return await this.pm.GetConfigJson(value, false); - } catch (error) { - return { - code: 0, - message: error.toString() - } - } - } - - /** - * 获取当前项目下面的文案 - */ - async GetProjectWord() { - try { - // 先判断当前的项目文件下面是不是又配置文件。没有才读取文案 - let srt_config_path = path.join(global.config.project_path, "scripts/config.json"); - let isExist = await tools.checkExists(srt_config_path); - let data = null; - let isImformation = false; - if (isExist) { - let config_1 = JSON.parse(await fspromises.readFile(srt_config_path)); - isImformation = has(config_1, 'srt_time_information'); - if (isImformation) { - data = JSON.parse(await fspromises.readFile(srt_config_path)).srt_time_information; - } - } - - if (!isExist || !isImformation) { - let word_path = path.join(global.config.project_path, "文案.txt"); - let isExistWord = await tools.checkExists(word_path); - if (!isExistWord) { - return { - code: 0, - message: "没有文案文件" - } - } - let data = await fspromises.readFile(word_path, { encoding: 'utf-8' }); - let lines = data.split(/\r?\n/); - // 打印或返回这个数组 - // console.log(lines); - // 判断是不是有洗稿后的文件 - let new_srt_path = path.join(global.config.project_path, "new_word.txt"); - let isExistAfterGPTWord = await tools.checkExists(new_srt_path); - let after_data = null; - if (isExistAfterGPTWord) { - after_data = (await fspromises.readFile(new_srt_path, { encoding: 'utf-8' })).split(/\r?\n/); - } - // 判断抽帧文件是不是存在 - // 返回图片信息 - let old_image_path_list = await tools.getFilesWithExtensions(path.join(global.config.project_path, "tmp/input_crop"), '.png'); - let res = []; - let lastId = ''; - // 处理数据 - for (let i = 0; i < lines.length; i++) { - const line = lines[i]; - let id = uuidv4(); - let after_gpt = null; - if (after_data != null) { - after_gpt = after_data[i]; - } - - let img_path = null; - if (old_image_path_list != null) { - img_path = old_image_path_list[i]; - } - let obj = { - no: i + 1, - id: id, - lastId: lastId, - word: line, - old_image: img_path, - after_gpt: after_gpt, - start_time: null, - end_time: null, - timeLimit: null, - subValue: [] - } - res.push(obj); - lastId = id; - } - return { - code: 1, - type: 0, - data: res - } - } else { - let data = JSON.parse(await fspromises.readFile(srt_config_path)).srt_time_information; - return { - code: 1, - type: 1, - data: data - } - } - - } catch (error) { - throw new Error(error); - } - } - - /** - * 搭导入srt。然后加载时间轴。完全匹配失败的将会还是会导入然后手动手动切换 - * @param {文案洗稿界面信息} textData - */ - async ImportSrtAndGetTime(data) { - let textData = data[0]; - let init_num = textData.length; - let srt_path = data[1]; - let current_text = ""; - try { - if (!srt_path) { - // 获取项目下面的所有的srt - let srtfiles = await tools.getFilesWithExtensions(global.config.project_path, '.srt'); - if (srtfiles.length <= 0) { - throw new Error("没有SRT文件"); - } - srt_path = srtfiles[0]; - } - let srt_data = (await fspromises.readFile(srt_path, 'utf-8')).toString("utf-8"); - const entries = srt_data.replace(/\r\n/g, '\n').split('\n\n'); - let data = entries.map(entry => { - const lines = entry.split('\n'); - if (lines.length >= 3) { - const times = lines[1]; - const text = lines.slice(2).join(' '); - const [start, end] = times.split(' --> ').map(time => { - const [hours, minutes, seconds] = time.split(':'); - const [sec, millis] = seconds.split(','); - return ((parseInt(hours) * 3600 + parseInt(minutes) * 60 + parseInt(sec)) * 1000 + parseInt(millis)); - }); - return { start, end, text, id: uuidv4() }; - } - }).filter(entry => entry); - // 开始匹配(洗稿后的) - let srt_list = []; - let srt_obj = null - let text_count = 0; - let tmp_str = ""; - for (let i = 0; i < data.length;) { - let srt_value = data[i].text; - current_text = `字幕: “${srt_value}” 和文案第${text_count + 1} 行数据 “${textData[text_count].after_gpt}” 数据不匹配(检查一下上下文)`; - let start_time = data[i].start; - let end_time = data[i].end; - let obj = { - start_time, - end_time, - srt_value, - id: data[i].id - }; - // 判断当前字幕是不是在当前句 - // 不能用简单的包含,而是将数据进行去除特殊符号拼接后判断是不是相同 - tmp_str += srt_value; - if (tools.removePunctuationIncludingEllipsis(textData[text_count].after_gpt).startsWith(tools.removePunctuationIncludingEllipsis(tmp_str))) { - if (srt_obj == null) { - srt_obj = {} - srt_obj.id = uuidv4(); - srt_obj.start_time = start_time; - srt_obj.value = srt_value; - srt_obj.subValue = [obj]; - } - else { - srt_obj.value = srt_obj.value + srt_value; - srt_obj.subValue = [...srt_obj.subValue, obj]; - } - textData[text_count].start_time = srt_obj.start_time; - textData[text_count].subValue = srt_obj.subValue - srt_list.push(obj); - i++; - } else { - // 判断下一句文件是不是以当当前巨开头。是的话继续。不是的话。直接返回后面的所有信息 - if (tools.removePunctuationIncludingEllipsis(textData[text_count + 1].after_gpt).startsWith(tools.removePunctuationIncludingEllipsis(srt_value))) { - textData[text_count].end_time = srt_list[srt_list.length - 1].end_time; - text_count++; - srt_obj = null; - tmp_str = "" - } else { - // 将下面的数据直接 添加到textData后面。 - // 修改当前行数据的结束事件为 - if (srt_list.length > 0) { - textData[text_count].end_time = srt_list[srt_list.length - 1].end_time; - text_count++; - } - // 将后面的数据直接添加 - let lastId = textData[textData.length - 1].id; - for (let j = i; j < data.length; j++) { - // 直接修改原有数据 - if (text_count < init_num) { - textData[text_count].subValue = [{ - start_time: data[j].start, - end_time: data[j].end, - id: data[j].id, - srt_value: data[j].text - }] - textData[text_count].start_time = data[j].start; - textData[text_count].end_time = data[j].end; - text_count++; - } - else { - let id = uuidv4(); - // 添加 - let obj = { - no: j + 1, - id: id, - word: null, - lastId: lastId, - old_image: path.normalize(define.zhanwei_image), - after_gpt: null, - start_time: data[j].start, - end_time: data[j].end, - subValue: [{ - start_time: data[j].start, - end_time: data[j].end, - id: data[j].id, - srt_value: data[j].text - }] - } - lastId = id; - textData.push(obj); - } - } - this.global.newWindow[0].win.webContents.send(DEFINE_STRING.SHOW_MESSAGE_DIALOG, { - code: 0, - message: current_text - }) - return { - code: 1, - data: textData - } - } - } - } - // 最后对齐 - textData[textData.length - 1].end_time = srt_list[srt_list.length - 1].end_time - // 返回数据 - return { - code: 1, - data: textData - } - } catch (error) { - return { - code: 0, - message: error.toString() - } - } - } -} \ No newline at end of file diff --git a/src/main/discord/discordApi.js b/src/main/discord/discordApi.js deleted file mode 100644 index 9550ab1..0000000 --- a/src/main/discord/discordApi.js +++ /dev/null @@ -1,490 +0,0 @@ -const axios = require('axios'); -// import { Midjourney as mApi} from "midjourney"; -// const MJapi2 = require('midjourney'); -// const { midjourney } = require('midjourney') -// const Midjourney = require('midjourney'); -// ES5 的模块引入方式 -const fetch = require("node-fetch"); - -// ES6 的模块引入方式 -// import fetch from "node-fetch"; - -export class DiscordAPI { - constructor(mj_setting) { - // https://discord.com/api/v9/channels/1208362852482809939/messages?limit=20 - this.apiClient = axios.create({ - baseURL: 'https://discord.com' - }); - this.DiscordBaseUrl = 'https://discord.com'; - this.ServerId = mj_setting.serviceID; - this.ChannelId = mj_setting.channelID; - this.userToken = mj_setting.token; - this.botId = mj_setting.select_robot?.botId; - this.commandId = mj_setting.select_robot?.commandId; - this.versionId = mj_setting.select_robot?.versionId; - this.versionName = mj_setting.select_robot?.versionName; - this.botName = mj_setting.select_robot?.botName; - } - - // 提交任务 - async imagine(data) { - - // let req_data = { - // "token": this.userToken, - // "method": "post", - // "api_url": "/mj/submit/imagine", - // "data":data - // } - - // const response = await this.apiClient.post('/api/v3/req_mj_api', req_data); - // await this.interactions(data.prompt); - return await this.interactions(data.prompt) - // return { - // code:1, - // result:'taskid_'+new Date().getTime() - // } - // return response.data; - - } - async channelList() { - axios.get(`https://discord.com/api/v9/channels/${this.ChannelId}/messages?limit=20`, { - method: 'get', - headers: { - "Authorization": this.userToken - } - }) - .then(response => { - // 请求成功处理 - console.log(typeof response.data); - let eList = [] - let flg = false; - let job_id = ''; - let type = ''; - if (response && response.data) { - try { - response.data.forEach(element => { - flg = false; - type = ''; - if (element.attachments && element.attachments.length) { - const arr = element.attachments[0].filename.split("_"); - job_id = arr[arr.length - 1].replace(".png", ''); - if (element.components) { - element.components.forEach(e2 => { - e2.components.forEach(e3 => { - if (e3.label == 'U1') { - flg = true; - type = 'U1' - } else if (e3.label && e3.label.indexOf('Upscale') > -1) { - flg = true; - type = 'Upscale' - } - }) - }); - } - let t = eList.find((e) => { - return e.filename == element.attachments[0].filename; - }) - - if (!t) { - eList.push( - { - flg: flg, job_id: job_id, filename: element.attachments[0].filename, - url: element.attachments[0].url, - proxy_url: element.attachments[0].proxy_url, - type: type, - timestamp: element.timestamp - }) - } - - // console.log({flg:flg,job_id:job_id,filename:element.attachments[0].filename}) - } else { - console.log({ flg: flg }) - } - - }); - } catch (error) { - console.log('异常2', error) - } - // console.log(eList) - // 8e7406df-bf0c-4e3d-8e49-b2bb8e2c263d - // 5abedc71-ba80-4756-8ddc-489c927d3acd - } - }).catch(error => { - // 请求失败处理 - console.error(error); - }); - } - // 混合 - async blend(data) { - - let req_data = { - "token": this.userToken, - "method": "post", - "api_url": "/mj/submit/blend", - "data": data - } - - const response = await this.apiClient.post('/api/v3/req_mj_api', req_data); - return response.data; - - } - - - // 反推 - async describe(data) { - - let req_data = { - "token": this.userToken, - "method": "post", - "api_url": "/mj/submit/describe", - "data": data - } - - const response = await this.apiClient.post('/api/v3/req_mj_api', req_data); - return response.data; - - } - - // 获取任务 - async getTaskId(task_id) { - let req_data = { - "token": this.userToken, - "method": "get", - "api_url": `/mj/task/${task_id}/fetch`, - "data": {} - } - const response = await this.apiClient.post('/api/v3/req_mj_api', req_data); - return response.data; - } - - //获取seed - async imageSeed(task_id) { - let req_data = { - "token": this.userToken, - "method": "get", - "api_url": `/mj/task/${task_id}/image-seed`, - "data": {} - } - const response = await this.apiClient.post('/api/v3/req_mj_api', req_data); - return response.data; - - } - - //账号创建 - async account_create(data) { - let req_data = { - "token": this.userToken, - "method": "post", - "api_url": '/mj/account/create', - "data": data - } - const response = await this.apiClient.post('/api/v3/req_mj_api', req_data, { timeout: 20000 }); - return response.data; - } - - //账号创建 - async account_fetch(cid) { - let req_data = { - "token": this.userToken, - "method": "get", - "api_url": `/mj/account/${cid}/fetch`, - "data": {} - } - const response = await this.apiClient.post('/api/v3/req_mj_api', req_data); - return response.data; - - } - - //账号同步信息 - async account_asyn_info(cid) { - let req_data = { - "token": this.userToken, - "method": "post", - "api_url": `/mj/account/${cid}/sync-info`, - "data": {} - } - const response = await this.apiClient.post('/api/v3/req_mj_api', req_data, { timeout: 20000 }); - return response.data; - } - - //账号删除信息 - async account_del_info(cid) { - let req_data = { - "token": this.userToken, - "method": "delete", - "api_url": `/mj/account/${cid}/delete`, - "data": {} - } - const response = await this.apiClient.post('/api/v3/req_mj_api', req_data); - return response.data; - } - - - //执行动作 - async action(data) { - let req_data = { - "token": this.userToken, - "method": "post", - "api_url": '/mj/submit/action', - "data": data - } - const response = await this.apiClient.post('/api/v3/req_mj_api', req_data); - return response.data; - } - - // 确认弹窗 - async modal(data) { - let req_data = { - "token": this.userToken, - "method": "post", - "api_url": '/mj/submit/modal', - "data": data - } - const response = await this.apiClient.post('/api/v3/req_mj_api', req_data); - return response.data; - - } - - async interactions(prompt) { - // 直接自己调用 - prompt = prompt.trim(); - // prompt = "4k,8k,best quality, masterpiece, woman, divorced, leaving fast-paced city life, serene expression, walking away from cityscape, bustling streets, entering tranquil countryside, peaceful surroundings, rejuvenating atmosphere, , --niji 5 --ar 4:3" - var payload = {}; - if (this.botName == 'niji') { - payload = { - "type": 2, - "application_id": this.botId, - "guild_id": this.ServerId, - "channel_id": this.ChannelId, - "session_id": this.userToken, - "data": { - "version": this.versionId, - "id": this.commandId, - "name": "imagine", - "type": 1, - "options": [ - { - "type": 3, - "name": "prompt", - "value": prompt - } - ], - "application_command": { - "id": this.commandId, - "type": 1, - "application_id": this.botId, - "version": this.versionId, - "name": "imagine", - "description": "Create images with Midjourney", - "options": [ - { - "type": 3, - "name": "prompt", - "description": "The prompt to imagine", - "required": true, - "description_localized": "The prompt to imagine", - "name_localized": "prompt" - } - ], - "integration_types": [ - 0 - ], - "global_popularity_rank": 1, - "description_localized": "Create images with Midjourney", - "name_localized": "imagine" - }, - "attachments": [ - - ] - }, - // "nonce": "1210857131343872000", - "analytics_location": "slash_ui" - } - } else { - payload = { - "type": 2, - // "application_id":"1022952195194359889",//niji - "application_id": this.botId, - "guild_id": this.ServerId, - "channel_id": this.ChannelId, - "session_id": this.userToken, - "data": { - "version": this.versionId, - "id": this.commandId, - "name": "imagine", "type": 1, - "options": - [{ - "type": 3, - "name": "prompt", - "value": prompt - }], - "application_command": { - "id": this.commandId, - "type": 1, - "application_id": this.botId, - "version": this.versionId, - "name": "imagine", - "description": "Create images with Niji journey", - "options": [{ "type": 3, "name": "prompt", "description": "The prompt to imagine", "required": true, "description_localized": "The prompt to imagine", "name_localized": "prompt" }], - "integration_types": [0], "global_popularity_rank": 1, "description_localized": "Create images with Niji journey", "name_localized": "imagine" - }, - "attachments": [] - }, - "analytics_location": "slash_ui" - } - } - - let response = { - status: 200, - data: {} - }; - - - try { - const headers = { - "Content-Type": "application/json", - Authorization: this.userToken, - }; - await fetch(`${this.DiscordBaseUrl}/api/v9/interactions`, { - method: "POST", - body: JSON.stringify(payload), - headers: headers, - }).then(res => res.json()).then(res => { - response.data = res; - }).catch(e => { - console.error("请求失败了,详细信息:" + JSON.stringify(e)); - response = { - status: 500, - data: JSON.stringify(e) - }; - }); - console.log('response结果') - console.log(response) - // if (response.status == 204) { - // //成功 - - // } - if (response.status >= 400) { - console.error("api.error.config", { - payload: JSON.stringify(payload) - }); - } - return { - code: response.status, - response: response - }; - } - catch (error) { - console.error(error); - return 500; - } - return; - const client = new Midjourney.Midjourney({ - ServerId: this.ServerId, - ChannelId: this.ChannelId, - SalaiToken: this.userToken, - Debug: true, - fetch: fetch, - Ws: true, //enable ws is required for remix mode (and custom zoom) - }); - await client.init(); - console.log('mjmj_begin2', prompt); - // const prompt = - // "Christmas dinner with spaghetti with family in a cozy house, we see interior details , simple blue&white illustration"; - //imagine - const Imagine = await client.Imagine( - prompt, - (uri, progress) => { - client.Close(); - - console.log("loading", uri, "progress", progress); - return - } - ); - console.log(Imagine); - if (!Imagine) { - console.log("no message"); - console.log('mjmj_end2') - return; - } - console.log('mjmj_end') - client.Close(); - return - - } - - /** - * 获取频道内的机器人 - * @returns 返回机器人列表 - */ - async getBotList() { - try { - - const headers = { - 'Host': 'discord.com', - 'Connection': 'keep-alive', - 'authorization': this.userToken, - } - - await fetch('https://discord.com/api/v9/guilds/1182523906855284826/application-command-index', { - method: 'GET', - headers: headers, - }) - .then(response => { - response.json() - } - ) - .then(data => { - console.log(data) - }) - .catch(error => { - console.error('Error:', error) - }) - - - } catch (error) { - throw new Error(error); - } - } - - - async getMjMsgList() { - // const headers = { - // "Content-Type": "application/json", - // Authorization:this.userToken, - // }; - let response = { - status: 200, - data: {} - }; - // // `https://discord.com/api/v9/channels/${mj_channelId}/messages?limit=10 - // await fetch(`${this.DiscordBaseUrl}/api/v9/channels/${this.ChannelId}/messages?limit=50`, { - // method: "GET", - // headers: headers, - // }).then(res => res.json()).then(res => { - // response.data=res; - // }).catch(e => { - // console.error("请求失败了,详细信息:" + JSON.stringify(e)); - // response ={ - // status:500, - // data:JSON.stringify(e) - // }; - // }); - // console.log('getMjMsgList_response结果') - // // console.log(response) - - // return response; - axios.get(`https://discord.com/api/v9/channels/${this.ChannelId}/messages?limit=20`, { - method: 'get', - headers: { - "Authorization": this.userToken - } - }).then(res => { - response.data = res; - }).catch(error => { - // 请求失败处理 - console.error(error); - }); - - } -} diff --git a/src/preload/discordIndex.js b/src/preload/discordIndex.js deleted file mode 100644 index 4c771c9..0000000 --- a/src/preload/discordIndex.js +++ /dev/null @@ -1,28 +0,0 @@ -import { contextBridge, ipcRenderer } from 'electron' -import { DEFINE_STRING } from '../define/define_string.js'; -// Custom APIs for renderer - -let events = []; -const api = { - // 创建MJ消息 - CreateMessage: (value) => ipcRenderer.send(DEFINE_STRING.DISCORD.CREATE_MESSAGE, value), - - // MJ消息更新 - UpdateMessage: (value) => ipcRenderer.send(DEFINE_STRING.DISCORD.UPDATE_MESSAGE, value), - - // MJ消息删除 - DeleteMessage: (value) => ipcRenderer.send(DEFINE_STRING.DISCORD.DELETE_MESSAGE, value), -} -// Use `contextBridge` APIs to expose Electron APIs to -// renderer only if context isolation is enabled, otherwise -// just add to the DOM global. -if (process.contextIsolated) { - try { - contextBridge.exposeInMainWorld('api', api) - } catch (error) { - console.error(error) - } -} else { - window.api = api -} -