Ubuntu 20.04.5 LTS x86_64 Docker stable diffusion webui 及 http api接口

news2024/11/28 22:46:59

资源

Docker镜像

docker pull darkroot1234/ayanami:latest

参考地址:

docker一键运行stable diffusion webui,常用插件和功能完备,获得镜像后可打包带走 - 哔哩哔哩

nvidia cuda 驱动

https://us.download.nvidia.cn/XFree86/aarch64/525.89.02/NVIDIA-Linux-aarch64-525.89.02.run

lora模型下载

热门Civitai LoRA模型下载第一批合集 Stable Diffusion WebUI - openAI

启动

docker run --gpus all -it -p 8888:8888 -p 7860:7860 -p 6666:22 --name ayanami --ipc=host darkroot1234/ayanami:latest

注意:启动时会访问公网,如果网络不通,会导致启动失败,注意看docker日志输出

docker cp 拷贝模型文件到容器/workspace/models/Stable-diffusion/目录下:chilloutmix_Ni.safetensors 

重启docker

docker restart ayanami

等待加载资源,打开浏览器,访问 http://127.0.0.1:7860

左上角选择放入的模型,采用该容器自带的参数,生成绫波丽

 

 修改参数,去掉CAD,机器人等信息

((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,

http api

请求

通过观察浏览器请求,发现首次触发生成时,第一条请求predict/卡在pending状态,当渲染结束后,该请求响应出了图片地址

 复制出来的curl指令

curl 'http://127.0.0.1:7860/run/predict/' \
  -H 'Accept: */*' \
  -H 'Accept-Language: zh,en-US;q=0.9,en;q=0.8' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Cookie: _ga=GA1.1.1067480164.1660637226' \
  -H 'Origin: http://127.0.0.1:7860' \
  -H 'Referer: http://127.0.0.1:7860/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: same-origin' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Google Chrome";v="113", "Chromium";v="113", "Not-A.Brand";v="24"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "Linux"' \
  --data-raw $'{"fn_index":102,"data":["((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,","","None","None",50,"Euler a",false,false,1,1,11,2083545561,-1,0,0,0,false,704,1024,false,0.7,0,0,"None",false,false,false,false,"","Seed","","Nothing","",true,false,false,null,"{\\"prompt\\": \\"((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,\\", \\"all_prompts\\": [\\"((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,\\"], \\"negative_prompt\\": \\"\\", \\"all_negative_prompts\\": [\\"\\"], \\"seed\\": 2083545561, \\"all_seeds\\": [2083545561], \\"subseed\\": 1093441852, \\"all_subseeds\\": [1093441852], \\"subseed_strength\\": 0, \\"width\\": 1024, \\"height\\": 704, \\"sampler_name\\": \\"Euler a\\", \\"cfg_scale\\": 11, \\"steps\\": 50, \\"batch_size\\": 1, \\"restore_faces\\": false, \\"face_restoration_model\\": null, \\"sd_model_hash\\": \\"8c3b86ce\\", \\"seed_resize_from_w\\": 0, \\"seed_resize_from_h\\": 0, \\"denoising_strength\\": null, \\"extra_generation_params\\": {}, \\"index_of_first_image\\": 0, \\"infotexts\\": [\\"((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,\\\\nSteps: 50, Sampler: Euler a, CFG scale: 11, Seed: 2083545561, Size: 1024x704, Model hash: 8c3b86ce, Clip skip: 2\\"], \\"styles\\": [\\"None\\", \\"None\\"], \\"job_timestamp\\": \\"20230511015740\\", \\"clip_skip\\": 2, \\"is_using_inpainting_conditioning\\": false}","<p>((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,<br>\\nSteps: 50, Sampler: Euler a, CFG scale: 11, Seed: 2083545561, Size: 1024x704, Model hash: 8c3b86ce, Clip skip: 2</p><div class=\'performance\'><p class=\'time\'>Time taken: <wbr>24.71s</p><p class=\'vram\'>Torch active/reserved: 3573/4222 MiB, <wbr>Sys VRAM: 5882/5924 MiB (99.29%)</p></div>"],"session_hash":"t3m95wa7oj"}' \
  --compressed

其中我们填写的参数在data数组的第一段字符串参数内,即

((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,

第二个参数标识第二个输入框,我们没有输入。

响应

该请求会阻塞,直到渲染结束

{"data":[[{"name":"outputs/txt2img-images/00054-2083545561-((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,.png","data":null,"is_file":true}],"{\"prompt\": \"((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,\", \"all_prompts\": [\"((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,\"], \"negative_prompt\": \"\", \"all_negative_prompts\": [\"\"], \"seed\": 2083545561, \"all_seeds\": [2083545561], \"subseed\": 881369708, \"all_subseeds\": [881369708], \"subseed_strength\": 0, \"width\": 1024, \"height\": 704, \"sampler_name\": \"Euler a\", \"cfg_scale\": 11, \"steps\": 50, \"batch_size\": 1, \"restore_faces\": false, \"face_restoration_model\": null, \"sd_model_hash\": \"8c3b86ce\", \"seed_resize_from_w\": 0, \"seed_resize_from_h\": 0, \"denoising_strength\": null, \"extra_generation_params\": {}, \"index_of_first_image\": 0, \"infotexts\": [\"((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,\\nSteps: 50, Sampler: Euler a, CFG scale: 11, Seed: 2083545561, Size: 1024x704, Model hash: 8c3b86ce, Clip skip: 2\"], \"styles\": [\"None\", \"None\"], \"job_timestamp\": \"20230511015814\", \"clip_skip\": 2, \"is_using_inpainting_conditioning\": false}","<p>((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,<br>\nSteps: 50, Sampler: Euler a, CFG scale: 11, Seed: 2083545561, Size: 1024x704, Model hash: 8c3b86ce, Clip skip: 2</p><div class='performance'><p class='time'>Time taken: <wbr>24.88s</p><p class='vram'>Torch active/reserved: 3573/3980 MiB, <wbr>Sys VRAM: 5665/5924 MiB (95.63%)</p></div>"],"is_generating":false,"duration":24.88272213935852,"average_duration":34.33394391720112}

其中name字段为生成图片的文件名,访问方式

http://127.0.0.1:7860/file=outputs/txt2img-images/00054-2083545561-((masterpiece)),%20((best%20quality)),((extremely%20detailed)),Ayanami%20Rei,beautiful%20face,Blue%20hair,Beautiful%20red%20eyes,.png

即:固定url前段

http://127.0.0.1:7860/file=

拼接上文件名,注意:文件名应当采用urlencode编码

效果

 该文件位于容器路径

/workspace/outputs/txt2img-images/ 

注意:该路径不会自动清理,如果大量生成,需要自行考虑把该目录挂载到分布式存储上,如glasterfs,需要自行设计清理程序。

进度查询

curl 'http://127.0.0.1:7860/run/predict/' \
  -H 'sec-ch-ua: "Google Chrome";v="113", "Chromium";v="113", "Not-A.Brand";v="24"' \
  -H 'sec-ch-ua-platform: "Linux"' \
  -H 'Referer: http://127.0.0.1:7860/' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36' \
  -H 'Content-Type: application/json' \
  --data-raw '{"fn_index":88,"data":[],"session_hash":"t3m95wa7oj"}' \
  --compressed

响应

进行中

{"data":["<span id='txt2img_progress_span' style='display: none'>1683771458.0030112</span><p><div class='progressDiv'><div class='progress' style=\"overflow:visible;width:98.0%;white-space:nowrap;\">&nbsp;&nbsp;98% ETA: 00s</div></div></p>",{"visible":false,"__type__":"update"},{"visible":false,"__type__":"update"},{"visible":false,"__type__":"update"}],"is_generating":false,"duration":0.0002410411834716797,"average_duration":0.0002521400164840813}

完成

{"data":["",{"visible":false,"__type__":"update"},{"visible":false,"__type__":"update"},{"visible":false,"__type__":"update"}],"is_generating":false,"duration":0.0005140304565429688,"average_duration":0.0002525332453730586}

api差异说明

fn_indexdatasession_hash
生成api102必填必填
查询api88留空必填(保持与生成api一致)

http api调佣测试

主要参数修改为

((masterpiece)), ((best quality)),((extremely detailed)),beautiful face,Beautiful eyes,

完整curl指令

curl 'http://127.0.0.1:7860/run/predict/' \
  -H 'Accept: */*' \
  -H 'Accept-Language: zh,en-US;q=0.9,en;q=0.8' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Cookie: _ga=GA1.1.1067480164.1660637226' \
  -H 'Origin: http://127.0.0.1:7860' \
  -H 'Referer: http://127.0.0.1:7860/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: same-origin' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Google Chrome";v="113", "Chromium";v="113", "Not-A.Brand";v="24"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "Linux"' \
  --data-raw $'{"fn_index":102,"data":["((masterpiece)), ((best quality)),((extremely detailed)),beautiful face,Beautiful eyes,","","None","None",50,"Euler a",false,false,1,1,11,2083545561,-1,0,0,0,false,704,1024,false,0.7,0,0,"None",false,false,false,false,"","Seed","","Nothing","",true,false,false,null,"{\\"prompt\\": \\"((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,\\", \\"all_prompts\\": [\\"((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,\\"], \\"negative_prompt\\": \\"\\", \\"all_negative_prompts\\": [\\"\\"], \\"seed\\": 2083545561, \\"all_seeds\\": [2083545561], \\"subseed\\": 1093441852, \\"all_subseeds\\": [1093441852], \\"subseed_strength\\": 0, \\"width\\": 1024, \\"height\\": 704, \\"sampler_name\\": \\"Euler a\\", \\"cfg_scale\\": 11, \\"steps\\": 50, \\"batch_size\\": 1, \\"restore_faces\\": false, \\"face_restoration_model\\": null, \\"sd_model_hash\\": \\"8c3b86ce\\", \\"seed_resize_from_w\\": 0, \\"seed_resize_from_h\\": 0, \\"denoising_strength\\": null, \\"extra_generation_params\\": {}, \\"index_of_first_image\\": 0, \\"infotexts\\": [\\"((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,\\\\nSteps: 50, Sampler: Euler a, CFG scale: 11, Seed: 2083545561, Size: 1024x704, Model hash: 8c3b86ce, Clip skip: 2\\"], \\"styles\\": [\\"None\\", \\"None\\"], \\"job_timestamp\\": \\"20230511015740\\", \\"clip_skip\\": 2, \\"is_using_inpainting_conditioning\\": false}","<p>((masterpiece)), ((best quality)),((extremely detailed)),Ayanami Rei,beautiful face,Blue hair,Beautiful red eyes,<br>\\nSteps: 50, Sampler: Euler a, CFG scale: 11, Seed: 2083545561, Size: 1024x704, Model hash: 8c3b86ce, Clip skip: 2</p><div class=\'performance\'><p class=\'time\'>Time taken: <wbr>24.71s</p><p class=\'vram\'>Torch active/reserved: 3573/4222 MiB, <wbr>Sys VRAM: 5882/5924 MiB (99.29%)</p></div>"],"session_hash":"t3m95wa7oj"}' \
  --compressed

响应(约15秒)

{"data":[[{"name":"outputs/txt2img-images/00055-2083545561-((masterpiece)), ((best quality)),((extremely detailed)),beautiful face,Beautiful eyes,.png","data":null,"is_file":true}],"{\"prompt\": \"((masterpiece)), ((best quality)),((extremely detailed)),beautiful face,Beautiful eyes,\", \"all_prompts\": [\"((masterpiece)), ((best quality)),((extremely detailed)),beautiful face,Beautiful eyes,\"], \"negative_prompt\": \"\", \"all_negative_prompts\": [\"\"], \"seed\": 2083545561, \"all_seeds\": [2083545561], \"subseed\": 501878245, \"all_subseeds\": [501878245], \"subseed_strength\": 0, \"width\": 1024, \"height\": 704, \"sampler_name\": \"Euler a\", \"cfg_scale\": 11, \"steps\": 50, \"batch_size\": 1, \"restore_faces\": false, \"face_restoration_model\": null, \"sd_model_hash\": \"8c3b86ce\", \"seed_resize_from_w\": 0, \"seed_resize_from_h\": 0, \"denoising_strength\": null, \"extra_generation_params\": {}, \"index_of_first_image\": 0, \"infotexts\": [\"((masterpiece)), ((best quality)),((extremely detailed)),beautiful face,Beautiful eyes,\\nSteps: 50, Sampler: Euler a, CFG scale: 11, Seed: 2083545561, Size: 1024x704, Model hash: 8c3b86ce, Clip skip: 2\"], \"styles\": [\"None\", \"None\"], \"job_timestamp\": \"20230511021329\", \"clip_skip\": 2, \"is_using_inpainting_conditioning\": false}","<p>((masterpiece)), ((best quality)),((extremely detailed)),beautiful face,Beautiful eyes,<br>\nSteps: 50, Sampler: Euler a, CFG scale: 11, Seed: 2083545561, Size: 1024x704, Model hash: 8c3b86ce, Clip skip: 2</p><div class='performance'><p class='time'>Time taken: <wbr>24.41s</p><p class='vram'>Torch active/reserved: 3573/4222 MiB, <wbr>Sys VRAM: 5853/5924 MiB (98.8%)</p></div>"],"is_generating":false,"duration":24.41366720199585,"average_duration":33.62535272325788}

拼接出图片地址

http://127.0.0.1:7860/file=outputs/txt2img-images/00055-2083545561-((masterpiece)),%20((best%20quality)),((extremely%20detailed)),beautiful%20face,Beautiful%20eyes,.png 

访问

处理时,gpu负载

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/512670.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Django框架005:阶段性`实战小案例`“答辩“公司员工表

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

基于 DDR3 的串口传图帧缓存系统设计实现(整体设计)

文章目录 前言一、串口传图顶层系统设计框图二、各模块说明三、系统工程及 IP 创建四、uart_ddr3_tft模块五、uart_ddr3_tft模块仿真文件六、uart_ddr3_tft模块仿真文件 前言 结合串口接收模块和 tft 显示屏控制模块&#xff0c;设计一个基于 DDR3 的串口传图帧缓存系统。 提示…

DES加密算法、RSA加密算法

DES加密算法 DES加密过程 1、将明文和密钥转化为ASCII码&#xff0c;明文64位bit&#xff0c;密钥56位 2、明文进行初始置换 3、明文初始置换后前32位为L0&#xff0c;后32位为R0 4、第一轮算法&#xff0c;L1R0&#xff0c;R0进行F运算后跟L0异或的结果为R1 5、F运算&#x…

jmeter如何测试一个get请求

目录 1.配置测试计划1.1.创建线程组1.2.创建GET的HTTP请求取样器&#xff08;模拟GET请求&#xff09;1.3.添加查看结果树和聚合报告 2.执行压测并查看结果2.1.验证接口2.2.执行压力测试 使用jmeter测试一个http的get请求示例. 1.配置测试计划 1.1.创建线程组 打开jmeter - 测…

C语言实现扫雷(包含递归展开)

目录 一&#xff1a;扫雷游戏的基础逻辑 二&#xff1a;关于扫雷相关的信息存储 三&#xff1a;游戏大体实现逻辑 四&#xff1a;具体实现 (1)初始化 (2)打印 (3)布置雷 (4)查雷 五&#xff1a;全部代码 (1)game.h (2)game.c (3)test.c 六&#xff1a;实际效果演示…

【操作系统复习】第6章 虚拟存储器 2

请求分页中的内存分配 在为进程分配物理块时&#xff0c;要解决下列的三个问题&#xff1a; 1. 保证进程可正常运行所需要的最少物理块数 2. 每个进程的物理块数&#xff0c;是固定值还是可变值&#xff08;分配策略&#xff09; 3. 不同进程所分配的物理块数&#xff…

Python基础入门编程代码练习(三)

一、猜数游戏 有一个数列&#xff1a;8&#xff0c;4&#xff0c;2&#xff0c;1&#xff0c;23&#xff0c;344&#xff0c;12循环输出数列的值求数列中所有数值的和猜数游戏&#xff1a;从键盘中任意输入一个数据&#xff0c;判断数列中是否包含此数 实现代码如下&#xf…

【云原生】Kubrenetes二进制--单节点Master集群

单节点Master集群 一、Kubernetes概述1、Master组件2、Node组件 二、Kubernetes核心概念1、Pod概述2、Pod控制器3、Label标签4、Label选择器5、Service6、Ingress 三、部署kubernetes1、所有节点关闭防火墙 核心防护 Swap交换2、将三台服务器的地址hosts中3、调整内核参数4、时…

十分钟教你搭建ChatGPT 图片生成的安卓应用

十分钟教你搭建ChatGPT 图片生成的安卓应用 大家好&#xff0c;我是易安&#xff01; 今天&#xff0c;我们将集成 OpenAI API (ChatGPT)来构建一个简单的类似 ChatGPT 的 android 应用程序&#xff0c;让它返回我们想要的图片&#xff0c;本文是上一篇的姊妹篇。 详细步骤 第…

防止表单重复提交的几种方式,演示一个自定义注解方式的实现

防止表单重复提交的几种方式&#xff0c;演示一个自定义注解方式的实现 一、防止表单重复提交的几种方式方式一&#xff1a;Token 机制方式二&#xff1a;去重表&#xff08;主要是利用 MySQL 的唯一索引机制来实现的&#xff09;方式三&#xff1a;Redis 的 setnx方式四&#…

数组(C语言版)

&#x1f929;本文作者&#xff1a;大家好&#xff0c;我是paperjie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 &#x1f970;内容专栏&#xff1a;这里是《C知识系统分享》专栏&#xff0c;笔者用重金(时间和精力)打造&#xff0c;基础知识一网打尽&#xff0c;…

3 ES快速入门

3 ES快速入门 ES作为一个索引及搜索服务&#xff0c;对外提供丰富的REST接口&#xff0c;快速入门部分的实例使用head插件来测试&#xff0c;目的是对ES 的使用方法及流程有个初步的认识。 3.1 创建索引库 ES的索引库是一个逻辑概念&#xff0c;它包括了分词列表及文档列表…

电力系统负荷与电价预测优化模型(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【C++】vector的模拟实现及深度剖析

目录 一、模拟实现二、使用memcpy拷贝问题三、动态二维数组理解 一、模拟实现 namespace hxj {template<class T>class vector{public:// Vector的迭代器是一个原生指针typedef T* iterator;typedef const T* const_iterator;//构造和销毁vector():_start(nullptr), _fi…

Spring更简单的存储和读取Bean对象

目录 1.第一个Spring项目 2.存储Bean对象 2.1 准备工作 2.2 五大类注解 2.3 方法注解Bean 2.4 Bean对象的默认命名规则 3. 读取Bean对象 3.1 属性注入 3.2 setter注入 3.3 构造方法注入 3.4 注入异常问题 3.5 注入方式优缺点 3.6 Autowired和Resource的区别 1.第一…

python web开发(二):HTML标签语言

文章目录 简介标签语法标题div和span超链接插入图片列表表格Input系列提交表单 参考 简介 如下展示了一段简单的HTML模板&#xff0c; <head></head>标签中主要包含一些基本配置&#xff0c;如编码方式&#xff0c;标题等&#xff0c;注意标题的作用如下图所示 …

【java BUG收集-持续更~】

JAVA BUG JAVA BUGliquibase.lockservice锁异常1、启动参数增加jvm参数 -Dliquibase.lockservicefalse2、修改或清空 包含有 DATABASECHANGELOGLOCK的表 JAVA BUG 该章收集工作中遇到的java bug,作为工作日志&#xff0c;方便回顾。 liquibase.lockservice锁异常 报错信息&a…

Spring Boot实用技巧之单元测试

文章目录 一、单元测试的概念二、单元测试的优势三、Spring Boot实现单元测试&#xff08;一&#xff09;添加依赖&#xff08;二&#xff09;生成单元测试的类&#xff08;三&#xff09; 添加注解和业务代码1. 添加 SpringBootTest 注解2. 添加单元测试的业务代码3. 执行测试…

MySQL部分常用函数总结

数值计算函数 使用方法&#xff1a; ABS&#xff08;x&#xff09; date函数 获取date中对应部分&#xff1a; YEAR(date) 字符串函数 用法举例&#xff1a; 左侧截取字符 SELECT LEFT(‘MySQL’,2); 按符号拆分字符&#xff0c;返回拆分后的部分 SUBSTRING_INDEX(profile,“…

创新洞察 |与众不同的DTC模式:2023年发展趋势将如何影响零售业增长策略?

DTC零售不再局限于数字原生品牌。传统零售商也在采用相同的策略&#xff0c;特别是在后疫情世界中竞争时。预计DTC销售将继续增长&#xff0c;因为更多品牌转向电子商务领域&#xff0c;而已建立的DTC参与者也在扩大其现有市场。预计仅在美国&#xff0c;数字原生品牌将在2023年…