pip install samila==1.2conda install -c sepandhaghighi samila<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/5aec661d-9848-4798-a31d-37aa0968deea.png">>>> import matplotlib.pyplot as plt >>> from samila import GenerativeImage >>> g = GenerativeImage() >>> g.generate() >>> g.plot() >>> plt.show()
GenerativeImage中的func_seed参数更改函数生成种子<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/09f5babd-7914-40d6-8e11-1a57e3cc985b.png">>>> import random >>> import math >>> def f1(x, y): result = random.uniform(-1,1) * x**2 - math.sin(y**2) + abs(y-x) return result >>> def f2(x, y): result = random.uniform(-1,1) * y**3 - math.cos(x**2) + 2*x return result >>> g = GenerativeImage(f1, f2) >>> g.generate() >>> g.plot() >>> g.seed 188781 >>> plt.show()
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/0dc0dd1a-a092-424f-8328-2eb2a984de9a.png">>>> from samila import Projection >>> g = GenerativeImage(f1, f2) >>> g.generate() >>> g.plot(projection=Projection.POLAR) >>> g.seed 829730 >>> plt.show()
RECTILINEAR, POLAR, AITOFF, HAMMER, LAMBERT, MOLLWEIDE 和 RANDOMRECTILINEAR<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/84f71333-4141-46d8-bd25-a607950357ef.png">>>> from samila import Marker >>> g = GenerativeImage(f1, f2) >>> g.generate() >>> g.plot(marker=Marker.CIRCLE, spot_size=10) >>> g.seed 448742 >>> plt.show()
POINT、PIXEL、CIRCLE、TRIANGLE_DOWN、TRIANGLE_UP、TRIANGLE_LEFT、TRIANGLE_RIGHT、TRI_DOWN、TRI_UP、TRI_LEFT、TRI_RIGHT、OCTAGON、SQUARE、PENTAGON、PLUS、PLUS_FILLED、STAR、HEXAGON_VERTICAL、HEXAGON_HORIZONTAL、X、X_FILLED、DIAMOND、DIAMON_THIN、VLINE、HLINE和RANDOMPOINT你甚至可以使用rotation参数旋转你的艺术作品。输入你想要的图像旋转角度,你就能得到它。
>>> g = GenerativeImage(f1, f2) >>> g.generate() >>> g.plot(rotation=45)
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/53ce842e-f2d9-4b4b-a943-c54764f31321.png">>>> g = GenerativeImage(f1, f2) >>> g.generate(start=-2*math.pi, step=0.01, stop=0) >>> g.plot() >>> g.seed 234752 >>> plt.show()
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/d93829d7-7c88-4623-adce-ed79a3f5be3b.png">>>> g = GenerativeImage(f1, f2) >>> g.generate() >>> g.plot(color="yellow", bgcolor="black", projection=Projection.POLAR) >>> g.seed 1018273 >>> plt.show()
可用的颜色在VALID_COLORS列表中
color和bgcolor参数支持的格式:
color="yellow")color=(0.1,0.1,0.1),color=(0.1,0.1,0.1,0.1))color="#eeefff")color="random")color="complement", bgcolor="blue")bgcolor="transparent")color=["black", "#fffeef",...])⚠️ 透明模式仅适用于背景
⚠️ 列表模式仅适用于颜色
⚠️ 在列表模式下,此列表的长度必须等于data1和data2的长度
你可以制作自定义颜色映射并在Samila中使用它
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/abd86c43-c62f-4320-8225-5de07ef1481e.png">>>> colorarray = [ ... [0.7, 0.2, 0.2, 1], ... [0.6, 0.3, 0.2, 1], ... "black", ... [0.4, 0.4, 0.3, 1], ... [0.3, 0.4, 0.4, 1], ... "#ff2561"] >>> g.generate() >>> g.seed 454893 >>> g.plot(cmap=colorarray, color=g.data2, projection=Projection.POLAR) >>> plt.show()
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/4ffdac20-48fe-4d84-bcd9-7de14d973b41.png">>>> g = GenerativeImage(f1, f2) >>> g.generate(seed=1018273) >>> g.plot(projection=Projection.POLAR) >>> plt.show()
直接将生成的图像上传到NFT.storage
>>> g.nft_storage(api_key="YOUR_API_KEY", timeout=5000) {'status': True, 'message': 'FILE_LINK'}
你也可以将配置/数据上传到NFT.storage,如下所示:
>>> g.nft_storage(api_key="API_KEY", upload_config=True) {'status': {'image': True, 'config':True}, 'message': {'image':'IMAGE_FILE_LINK', 'config':'CONFIG_FILE_LINK'}
或
>>> g.nft_storage(api_key="API_KEY", upload_data=True) {'status': {'image': True, 'data':True}, 'message': {'image':'IMAGE_FILE_LINK', 'data':'DATA_FILE_LINK'}
你可以选择特定的IPFS网关:
>>> from samila import Gateway >>> g.nft_storage(api_key="API_KEY", upload_data=True, gateway=Gateway.DWEB) {'status': {'image': True, 'data':True}, 'message': {'image':'IMAGE_FILE_LINK', 'data':'DATA_FILE_LINK'}
保存生成的图像
>>> g.save_image(file_adr="test.png") {'status': True, 'message': 'FILE_PATH'}
以更高分辨率保存生成的图像
>>> g.save_image(file_adr="test.png", depth=5) {'status': True, 'message': 'FILE_PATH'}
保存生成的图像数据
>>> g.save_data(file_adr="data.json") {'status': True, 'message': 'FILE_PATH'}
这样你之后可以通过以下方式将其加载到GenerativeImage实例中
>>> g = GenerativeImage(data=open('data.json', 'r'))
数据结构:
{ "plot": { "projection": "polar", "bgcolor": "black", "color": "snow", "spot_size": 0.01 }, "matplotlib_version": "3.0.3", "data1": [ 0.3886741692042526, 22.57390286376703, -0.1646310981668766, 66.23632344600155 ], "data2": [ -0.14588750183600108, 20.197945942677833, 0.5485453260942901, -589.3284610518896 ] }
保存生成的图像配置。它包含函数的字符串格式,也是人类可读的。
>>> g.save_config(file_adr="config.json") {'status': True, 'message': 'FILE_PATH'}
这样你之后可以通过以下方式将其加载到GenerativeImage实例中
>>> g = GenerativeImage(config=open('config.json', 'r'))
配置结构:
{ "matplotlib_version": "3.0.3", "generate": { "seed": 379184, "stop": 3.141592653589793, "step": 0.01, "start": -3.141592653589793 }, "f2": "random.uniform(-1,1)*math.cos(x*(y**3))+random.uniform(-1,1)*math.ceil(y-x)", "f1": "random.uniform(-1,1)*math.ceil(y)-random.uniform(-1,1)*y**2+random.uniform(-1,1)*abs(y-x)", "plot": { "color": "snow", "bgcolor": "black", "projection": "polar", "spot_size": 0.01 } }
Samila 实质上是将笛卡尔坐标系中的方形空间转换为任意坐标系(如极坐标系)的变换。
我们在第一个空间(左侧方形)中有一组点,可以定义如下:
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/17d2a928-286e-4ce1-a804-9ca737dda2af.jpg">以下函数用于转换:
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/c50de4d3-8b7a-431e-a766-fd32ce86d6ea.jpg">>>> def f1(x, y): result = random.uniform(-1,1) * x**2 - math.sin(y**2) + abs(y-x) return result >>> def f2(x, y): result = random.uniform(-1,1) * y**3 - math.cos(x**2) + 2*x return result
这里我们使用 Projection.POLAR,所以后面的空间将是极坐标空间,我们有:
<img src="https://yellow-cdn.veclightyear.com/0a4dffa0/dcf1ccfc-9f16-4356-840e-7563f7d65149.jpg"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/bb3db8c7-ba00-4d99-a39c-8ccca51fa10b.png">>>> g = GenerativeImage(f1, f2) >>> g.generate(seed=10) >>> g.plot(projection=Projection.POLAR)
Samila 可以通过 Binder 或 Colab 服务在线使用交互式 Jupyter Notebooks!现在就来试试吧!:
examples 文件夹只需填写一个 issue 并描述问题。我们会尽快检查!或发送电子邮件至 info@samila.site。
你也可以加入我们的 Discord 服务器
<a href="https://discord.com/invite/94bz5QGZWb"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/999d2862-53a2-458b-94e1-810b29749beb.svg?style=for-the-badge" alt="Discord 频道"> </a>本项目由 Protocol Labs 设立的 Next Step Microgrant 计划资助。
如果这个项目对你有帮助,请给一个 ⭐️!
<h3>为我们的项目捐款</h3>如果你喜欢我们的项目,我们希望你能支持我们。我们的项目现在不是也永远不会以盈利为目的。我们需要这笔钱只是为了继续我们正在做的事情 ;-) 。
<a href="http://www.samila.site/donate.html" target="_blank"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/3c6601f2-4f06-4b75-a430-5586d6a441bc.png" height="90px" width="270px" alt="Samila 捐款"></a>


GPT充值
支持 ChatGPT Plus / Pro 充值服务,支付便捷,自动发货,售后可查。


AI 图片生成平台
GPT Image 2 是面向用户的 AI 图片生成平台,支持文生图、图生图及多模型创意工作流。


你的AI Agent团队
Vecbase 是专为 AI 团队打造的智能工作空间,将数据管理、模型协作与知识沉淀整合于一处。算法、产品与业务在同一平台无缝协同,让从数据到 AI 应用的落地更快一步。


全球首个AI音乐社区
音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。


阿里Qoder团队推出的桌面端AI智能体
QoderWork 是阿里推出的本地优先桌面 AI 智能体,适配 macOS14+/Windows10+,以自然语言交互实现文件管理、数据分析、AI 视觉生成、浏览器自动化等办公任务,自主拆解执行复杂工作流,数据本地运行零上传, 技能市场可无限扩展,是高效的 Agentic 生产力办公助手。


一站式搞定所有学习需求
不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。


为AI短剧协作而生
专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。


能听懂你表达的视频模型
Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。


国内直接访问,限时3折
输入简单文字,生成想要的图片,纳米香蕉中文站基于 Google 模型的 AI 图片生成网站,支持文字生图、图生图。官网价格限时3折活动


职场AI,就用扣子
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!
最新AI工具、AI资讯
独家AI资源、AI项目落地
