<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: classccai</title>
    <description>The latest articles on DEV Community by classccai (@classccai).</description>
    <link>https://dev.to/classccai</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3895281%2Fba7f488e-305e-4198-bf7b-f48cb1967e67.png</url>
      <title>DEV Community: classccai</title>
      <link>https://dev.to/classccai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/classccai"/>
    <language>en</language>
    <item>
      <title>aios</title>
      <dc:creator>classccai</dc:creator>
      <pubDate>Fri, 24 Apr 2026 07:13:34 +0000</pubDate>
      <link>https://dev.to/classccai/aios-55m5</link>
      <guid>https://dev.to/classccai/aios-55m5</guid>
      <description>&lt;h1&gt;
  
  
  AIOS: AI Agent Operating System
&lt;/h1&gt;

&lt;h2&gt;
  
  
  📰 News
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;[2025-07-08]&lt;/strong&gt; 🎉 The foundational paper &lt;a href="https://arxiv.org/abs/2403.16971" rel="noopener noreferrer"&gt;AIOS: LLM Agent Operating System&lt;/a&gt; has been accepted by the Conference on Language Modeling (COLM 2025). Congratulations to the team!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2025-07-02]&lt;/strong&gt; 🎉 AIOS has been selected as the finalist for AgentX – LLM Agents MOOC Competition, hosted by Berkeley RDI in conjunction with the Advanced LLM Agents MOOC. Congratulations to the team!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2025-05-24]&lt;/strong&gt; 📋 Check out our paper on computer-use agent: &lt;a href="https://arxiv.org/pdf/2505.18829" rel="noopener noreferrer"&gt;LiteCUA: Computer as MCP Server for Computer-Use Agent on AIOS&lt;/a&gt; and the corresponding &lt;a href="https://github.com/agiresearch/LiteCUA" rel="noopener noreferrer"&gt;codebase&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2025-03-13]&lt;/strong&gt; 📋 Paper &lt;a href="https://arxiv.org/abs/2503.11444" rel="noopener noreferrer"&gt;Cerebrum (AIOS SDK): A Platform for Agent Development, Deployment, Distribution, and Discovery&lt;/a&gt; has been accepted by NAACL 2025! Features has been integrated into &lt;a href="https://github.com/agiresearch/Cerebrum" rel="noopener noreferrer"&gt;Cerebrum&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2025-03-12]&lt;/strong&gt; 🔥 A major refactor of the codebase packed with powerful new features have been integrated into the main repo. Please check out the AIOS v0.2.2 release.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2025-03-10]&lt;/strong&gt; 📋 Check out our paper on agentic memory &lt;a href="https://arxiv.org/abs/2502.12110" rel="noopener noreferrer"&gt;A-MEM: Agentic Memory for LLM Agents&lt;/a&gt; and the corresponding &lt;a href="https://github.com/agiresearch/A-mem" rel="noopener noreferrer"&gt;codebase&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2025-02-07]&lt;/strong&gt; 📋 Our paper &lt;a href="https://arxiv.org/abs/2410.11843" rel="noopener noreferrer"&gt;From Commands to Prompts: LLM-based Semantic File System for AIOS&lt;/a&gt; has been accepted by ICLR2025! The features of this paper has been integrated into AIOS as the &lt;strong&gt;Terminal UI&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2025-01-27]&lt;/strong&gt; 🔥 Deepseek-r1 (1.5b, 7b, 8b, 14b, 32b, 70b, 671b) has already been supported in AIOS, both open-sourced versions and deepseek apis (deepseek-chat and deepseek-reasoner) are available. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2024-11-30]&lt;/strong&gt; 🔥 AIOS v0.2: Disentangled AIOS Kernel (this &lt;a href="https://github.com/agiresearch/AIOS" rel="noopener noreferrer"&gt;AIOS&lt;/a&gt; repository) and AIOS SDK (The &lt;a href="https://github.com/agiresearch/Cerebrum" rel="noopener noreferrer"&gt;Cerebrum&lt;/a&gt; repository), Remote Kernel for agent users. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2024-09-01]&lt;/strong&gt; 🔥 AIOS supports multiple agent creation frameworks (e.g., ReAct, Reflexion, OpenAGI, AutoGen, Open Interpreter, MetaGPT). Agents created by these frameworks can onboard AIOS. Onboarding guidelines can be found at the &lt;a href="https://docs.aios.foundation/aios-docs/aios-agent/how-to-develop-agents" rel="noopener noreferrer"&gt;Doc&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2024-07-10]&lt;/strong&gt; 📖 AIOS documentation is up, which can be found at &lt;a href="https://docs.aios.foundation/" rel="noopener noreferrer"&gt;Website&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2024-06-20]&lt;/strong&gt; 🔥 Function calling for open-sourced LLMs (native huggingface, vLLM, ollama) is supported.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2024-05-20]&lt;/strong&gt; 🚀 More agents with ChatGPT-based tool calling are added (i.e., MathAgent, RecAgent, TravelAgent, AcademicAgent and CreationAgent), their profiles and workflows can be found in &lt;a href="https://github.com/agiresearch/OpenAGI" rel="noopener noreferrer"&gt;OpenAGI&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2024-05-13]&lt;/strong&gt; 🛠️ Local models (diffusion models) as tools from HuggingFace are integrated.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2024-05-01]&lt;/strong&gt; 🛠️ The agent creation in AIOS is refactored, which can be found in our &lt;a href="https://github.com/agiresearch/OpenAGI" rel="noopener noreferrer"&gt;OpenAGI&lt;/a&gt; package.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2024-04-05]&lt;/strong&gt; 🛠️ AIOS currently supports external tool callings (google search, wolframalpha, rapid API, etc).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2024-04-02]&lt;/strong&gt; 🤝 AIOS &lt;a href="https://discord.gg/B2HFxEgTJX" rel="noopener noreferrer"&gt;Discord Community&lt;/a&gt; is up. Welcome to join the community for discussions, brainstorming, development, or just random chats! For how to contribute to AIOS, please see &lt;a href="https://github.com/agiresearch/AIOS/blob/main/docs/CONTRIBUTE.md" rel="noopener noreferrer"&gt;CONTRIBUTE&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2024-03-25]&lt;/strong&gt; ✈️ Our paper &lt;a href="https://arxiv.org/abs/2403.16971" rel="noopener noreferrer"&gt;AIOS: LLM Agent Operating System&lt;/a&gt; is released!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;[2023-12-06]&lt;/strong&gt; 📋 After several months of working, our perspective paper &lt;a href="https://arxiv.org/abs/2312.03815" rel="noopener noreferrer"&gt;LLM as OS, Agents as Apps: Envisioning AIOS, Agents and the AIOS-Agent Ecosystem&lt;/a&gt; is officially released.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Different deployment modes of AIOS
&lt;/h2&gt;

&lt;p&gt;Here are some key notations that are required to know before introducing the different modes of AIOS. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AHM (Agent Hub Machine)&lt;/strong&gt;: Central server that hosts the agent marketplace/repository where users can publish, download, and share agents. Acts as the distribution center for all agent-related resources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AUM (Agent UI Machine)&lt;/strong&gt;: Client machine that provides user interface for interacting with agents. Can be any device from mobile phones to desktops that supports agent visualization and control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ADM (Agent Development Machine)&lt;/strong&gt;: Development environment where agent developers write, debug and test their agents. Requires proper development tools and libraries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ARM (Agent Running Machine)&lt;/strong&gt;: Execution environment where agents actually run and perform tasks. Needs adequate computational resources for agent operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The following parts introduce different modes of deploying AIOS. &lt;strong&gt;Currently, AIOS already supports Mode 1 and Mode 2, other modes with new features are still ongoing.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Mode 1 (Local Kernel Mode)
&lt;/h3&gt;

&lt;p&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fassets%2Faios-figs%2Fstage1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fassets%2Faios-figs%2Fstage1.png" width="800" height="400"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Features:

&lt;ul&gt;
&lt;li&gt;For agent users: They can download agents from agent hub from Machine B and run agents on Machine A. &lt;/li&gt;
&lt;li&gt;For agent developers: They can develop and test agents in Machine A and can upload agents to agent hub on Machine B.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mode 2 (Remote Kernel Mode)
&lt;/h3&gt;

&lt;p&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fassets%2Faios-figs%2Fstage2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fassets%2Faios-figs%2Fstage2.png" width="800" height="400"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Features: 

&lt;ul&gt;
&lt;li&gt;Remote use of agents: Agent users / developers can use agents on Machine B, which is different from the development and running machine (Machine A).
&lt;/li&gt;
&lt;li&gt;Benefit users who would like to use agents on resource-restricted machine (e.g., mobile device or edge device)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mode 2.5 (Remote Kernel Dev Mode)
&lt;/h3&gt;

&lt;p&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fassets%2Faios-figs%2Fstage2.5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fassets%2Faios-figs%2Fstage2.5.png" width="800" height="400"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Features:

&lt;ul&gt;
&lt;li&gt;Remote development of agents: Agent developers can develop their agents on Machine B while running and testing their agents in Machine A. Benefit developers who would like to develop agents on resource-restricted machine (e.g., mobile device or edge device)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Critical technique:

&lt;ul&gt;
&lt;li&gt;Packaging and agent transmission on different machines for distributed agent development and testing&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mode 3 (Personal Remote Kernel Mode)
&lt;/h3&gt;

&lt;p&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fassets%2Faios-figs%2Fstage3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fassets%2Faios-figs%2Fstage3.png" width="800" height="400"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Ongoing Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each user/developer can have their personal AIOS with long-term persistent data as long as they have registered account in the AIOS ecosystem&lt;/li&gt;
&lt;li&gt;Their personal data can be synced to different machines with the same account&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Critical techniques:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User account registration and verification mechanism&lt;/li&gt;
&lt;li&gt;Persistent personal data storage for each user's AIOS&lt;/li&gt;
&lt;li&gt;Synchronization for different AIOS instances on different devices within the same account&lt;/li&gt;
&lt;li&gt;Data privacy mechanism&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mode 4 (Personal Remote Virtual Kernel Mode)
&lt;/h3&gt;

&lt;p&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fassets%2Faios-figs%2Fstage4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fassets%2Faios-figs%2Fstage4.png" width="800" height="400"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ongoing Features:

&lt;ul&gt;
&lt;li&gt;Different user/developer's personal AIOS kernels can co-exist in the same physical machine through virtualization&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Critical techniques:

&lt;ul&gt;
&lt;li&gt;Virtualization of different AIOS kernel instances in the same machine&lt;/li&gt;
&lt;li&gt;Scheduling and resource allocation mechanism for different virtual machines located in the same machine&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  ✈️ Getting Started
&lt;/h2&gt;

&lt;p&gt;Please see our ongoing &lt;a href="https://docs.aios.foundation/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; for more information.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aios.foundation/aios-docs/getting-started/installation" rel="noopener noreferrer"&gt;Installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aios.foundation/aios-docs/getting-started/quickstart" rel="noopener noreferrer"&gt;Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aios.foundation/aios-docs/getting-started/webui-quickstart" rel="noopener noreferrer"&gt;WebUI Quickstart&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Requirements
&lt;/h4&gt;

&lt;h5&gt;
  
  
  Python
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Supported versions: &lt;strong&gt;Python 3.10 - 3.11&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Installation from source
&lt;/h4&gt;

&lt;h5&gt;
  
  
  Step 1: Install AIOS Kernel
&lt;/h5&gt;

&lt;p&gt;Git clone AIOS kernel&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/agiresearch/AIOS.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create venv environment&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3.x &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv &lt;span class="c"&gt;# Only support for Python 3.10 and 3.11&lt;/span&gt;
&lt;span class="nb"&gt;source &lt;/span&gt;venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or create conda environment&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;conda create &lt;span class="nt"&gt;-n&lt;/span&gt; venv &lt;span class="nv"&gt;python&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3.x  &lt;span class="c"&gt;# Only support for Python 3.10 and 3.11&lt;/span&gt;
conda activate venv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;br&gt;
We strongly recommend using &lt;a href="https://github.com/astral-sh/uv" rel="noopener noreferrer"&gt;uv&lt;/a&gt; for faster and more reliable package installation.&lt;br&gt;
To install uv: &lt;/p&gt;

&lt;p&gt;&lt;br&gt;
 &lt;code&gt;bash pip install uv&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;For GPU environments:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements-cuda.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For CPU-only environments:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alternatively, if you prefer using pip:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For GPU environments:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements-cuda.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;For CPU-only environments:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Step 2: Install AIOS SDK (Cerebrum)
&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt;Clone the Cerebrum repository:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git clone https://github.com/agiresearch/Cerebrum.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Install using uv (recommended):
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;cd &lt;/span&gt;Cerebrum &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; uv pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or using pip:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;cd &lt;/span&gt;Cerebrum &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Step 3: Install Virtualized Environment (Optional)
&lt;/h5&gt;

&lt;p&gt;To use the mcp for computer-use agent, we strongly recommend you install a virtualized environment equipped with GUI. Instructions can be found in &lt;a href="https://github.com/xlang-ai/OSWorld" rel="noopener noreferrer"&gt;here&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: The machine where the AIOS kernel (AIOS) is installed must also have the AIOS SDK (Cerebrum) installed. Installing AIOS kernel will install the AIOS SDK automatically by default. If you are using the Local Kernel mode, i.e., you are running AIOS and agents on the same machine, then simply install both AIOS and Cerebrum on that machine. If you are using Remote Kernel mode, i.e., running AIOS on Machine 1 and running agents on Machine 2 and the agents remotely interact with the kernel, then you need to install both AIOS kernel and AIOS SDK on Machine 1, and install the AIOS SDK alone on Machine 2. Please follow the guidelines at &lt;a href="https://github.com/agiresearch/Cerebrum" rel="noopener noreferrer"&gt;Cerebrum&lt;/a&gt; regarding how to install the SDK.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quickstart
&lt;/h3&gt;

&lt;p&gt;Before launching AIOS, it is required to set up configurations. AIOS provides two ways of setting up configurations, one is to set up by directly modifying the configuration file, another is to set up interactively. &lt;/p&gt;

&lt;h4&gt;
  
  
  Set up configuration file directly (Recommended)
&lt;/h4&gt;

&lt;p&gt;You need API keys for services like OpenAI, Anthropic, Groq and HuggingFace. The simplest way to configure them is to edit the &lt;code&gt;aios/config/config.yaml&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;br&gt;
It is important to mention that, we strongly recommend using the &lt;code&gt;aios/config/config.yaml&lt;/code&gt; file to set up your API keys. This method is straightforward and helps avoid potential sychronization issues with environment variables. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A simple example to set up your API keys in &lt;code&gt;aios/config/config.yaml&lt;/code&gt; is shown below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;api_keys&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;openai&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-openai-key"&lt;/span&gt;    
  &lt;span class="na"&gt;gemini&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-gemini-key"&lt;/span&gt;    
  &lt;span class="na"&gt;groq&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-groq-key"&lt;/span&gt;      
  &lt;span class="na"&gt;anthropic&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-anthropic-key"&lt;/span&gt; 
  &lt;span class="na"&gt;huggingface&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;auth_token&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-huggingface-token-for-authorized-models"&lt;/span&gt;  
    &lt;span class="na"&gt;cache_dir&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-cache-dir-for-saving-models"&lt;/span&gt;
  &lt;span class="na"&gt;novita&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-novita-api-key"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To obtain these API keys:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deepseek API: Visit &lt;a href="https://api-docs.deepseek.com/" rel="noopener noreferrer"&gt;https://api-docs.deepseek.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OpenAI API: Visit &lt;a href="https://platform.openai.com/api-keys" rel="noopener noreferrer"&gt;https://platform.openai.com/api-keys&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Google Gemini API: Visit &lt;a href="https://makersuite.google.com/app/apikey" rel="noopener noreferrer"&gt;https://makersuite.google.com/app/apikey&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Groq API: Visit &lt;a href="https://console.groq.com/keys" rel="noopener noreferrer"&gt;https://console.groq.com/keys&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;HuggingFace Token: Visit &lt;a href="https://huggingface.co/settings/tokens" rel="noopener noreferrer"&gt;https://huggingface.co/settings/tokens&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Anthropic API: Visit &lt;a href="https://console.anthropic.com/keys" rel="noopener noreferrer"&gt;https://console.anthropic.com/keys&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Novita AI API: Visit &lt;a href="https://novita.ai/api-keys" rel="noopener noreferrer"&gt;https://novita.ai/api-keys&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Configure LLM Models
&lt;/h4&gt;

&lt;p&gt;You can configure which LLM models to use in the same &lt;code&gt;aios/config/config.yaml&lt;/code&gt; file. Here's an example configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;llms&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;models&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# Ollama Models&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen2.5:7b"&lt;/span&gt;
      &lt;span class="na"&gt;backend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ollama"&lt;/span&gt;
      &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:11434"&lt;/span&gt;  &lt;span class="c1"&gt;# Make sure to run ollama server&lt;/span&gt;

    &lt;span class="c1"&gt;# vLLM Models&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;meta-llama/Llama-3.1-8B-Instruct"&lt;/span&gt;
      &lt;span class="na"&gt;backend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;vllm"&lt;/span&gt;
      &lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://localhost:8091/v1"&lt;/span&gt;  &lt;span class="c1"&gt;# Make sure to run vllm server&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Using Ollama Models:&lt;/strong&gt; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;First, download ollama from &lt;a href="https://ollama.com/" rel="noopener noreferrer"&gt;https://ollama.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Start the ollama server in a separate terminal:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama serve
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Pull your desired models from &lt;a href="https://ollama.com/library:" rel="noopener noreferrer"&gt;https://ollama.com/library:&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull qwen2.5:7b  &lt;span class="c"&gt;# example model&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;br&gt;
Ollama supports both CPU-only and GPU environments. For more details about ollama usage, visit &lt;a href="https://github.com/ollama/ollama" rel="noopener noreferrer"&gt;ollama documentation&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Using vLLM Models:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install vLLM following their &lt;a href="https://docs.vllm.ai/en/latest/getting_started/installation.html" rel="noopener noreferrer"&gt;installation guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Start the vLLM server in a separate terminal:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vllm serve meta-llama/Llama-3.1-8B-Instruct &lt;span class="nt"&gt;--port&lt;/span&gt; 8091
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;br&gt;
vLLM currently only supports Linux and GPU-enabled environments. If you don't have a compatible environment, please choose other backend options.&lt;br&gt;
To enable the tool calling feature of vllm, refer to &lt;a href="https://docs.vllm.ai/en/latest/features/tool_calling.html" rel="noopener noreferrer"&gt;https://docs.vllm.ai/en/latest/features/tool_calling.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Using HuggingFace Models:&lt;/strong&gt; &lt;br&gt;
You can configure HuggingFace models with specific GPU memory allocation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;meta-llama/Llama-3.1-8B-Instruct"&lt;/span&gt;
  &lt;span class="na"&gt;backend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;huggingface"&lt;/span&gt;
  &lt;span class="na"&gt;max_gpu_memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;0&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;24GB"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;1&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;24GB"&lt;/span&gt;&lt;span class="pi"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;# GPU memory allocation&lt;/span&gt;
  &lt;span class="na"&gt;eval_device&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cuda:0"&lt;/span&gt;  &lt;span class="c1"&gt;# Device for model evaluation&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Set up interactively
&lt;/h4&gt;

&lt;p&gt;Alternatively, you can set up aios configurations interactively by using the following command. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;aios env list&lt;/code&gt;: Show current environment variables, or show available API keys if no variables are set&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;aios env set&lt;/code&gt;: Show current environment variables, or show available API keys if no variables are set&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;aios refresh&lt;/code&gt;: Refresh AIOS configuration.
Reloads the configuration from aios/config/config.yaml.
Reinitializes all components without restarting the server.
The server must be running.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When no environment variables are set, the following API keys will be shown:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;DEEPSEEK_API_KEY&lt;/code&gt;: Deepseek API key for accessing Deepseek services&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;OPENAI_API_KEY&lt;/code&gt;: OpenAI API key for accessing OpenAI services&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GEMINI_API_KEY&lt;/code&gt;: Google Gemini API key for accessing Google's Gemini services&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GROQ_API_KEY&lt;/code&gt;: Groq API key for accessing Groq services&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;HF_AUTH_TOKEN&lt;/code&gt;: HuggingFace authentication token for accessing models&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;HF_HOME&lt;/code&gt;: Optional path to store HuggingFace models&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;NOVITA_API_KEY&lt;/code&gt;: Novita AI API key for accessing Novita AI services&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Launch AIOS
&lt;/h4&gt;

&lt;p&gt;After you setup your keys or environment parameters, then you can follow the instructions below to start.&lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bash runtime/launch_kernel.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or if you need to explicity set the Python version by running &lt;code&gt;python3.10&lt;/code&gt;, &lt;code&gt;python3.11&lt;/code&gt;, &lt;code&gt;python3&lt;/code&gt;, etc. run the command below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3.x -m uvicorn runtime.launch:app --host 0.0.0.0 --port 8000 # replace the port with your own port
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You also need to set up the host and port in the configuration of Cerebrum (AIOS SDK) to make sure it is consistent with the configurations of AIOS. &lt;/p&gt;

&lt;p&gt;You can also force the kernel to run in the background with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3.x -m uvicorn runtime.launch:app --host 0.0.0.0 &amp;gt; uvicorn.log 2&amp;gt;&amp;amp;1 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you can run it even after the shell closes by typing &lt;code&gt;nohup&lt;/code&gt; before the entire command.&lt;/p&gt;

&lt;p&gt;Command to launch the kernel in the background so it continues running even after the active shell is closed, while also logging information to the specified log file (recommended):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nohup python3 -m uvicorn runtime.launch:app --host 0.0.0.0 --port 8000 &amp;gt; uvicorn.log 2&amp;gt;&amp;amp;1 &amp;amp;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Interact with AIOS terminal
&lt;/h4&gt;

&lt;p&gt;To interact with the AIOS terminal (LLM-based semantic file system), you can run the following command to start the AIOS terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python scripts/run_terminal.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you can start interacting with the AIOS terminal by typing natural language commands. &lt;/p&gt;

&lt;p&gt;If you successfully start the AIOS terminal, it will be shown as below: &lt;/p&gt;

&lt;p&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fassets%2Fterminal-figs%2Fexample.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/docs%2Fassets%2Fterminal-figs%2Fexample.png" width="800" height="400"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;Detailed instructions of how to use the AIOS terminal can be found at &lt;a href="https://github.com/agiresearch/AIOS-LSFS" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!WARNING]&lt;br&gt;
The rollback feature of the AIOS terminal requires the connection to the redis server. Make sure you have the redis server running if you would like to use the rollback feature.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Run computer-use Agent
&lt;/h4&gt;

&lt;p&gt;Make sure you have installed a virtualized environment with GUI, then you can refer to &lt;a href="https://github.com/agiresearch/Cerebrum" rel="noopener noreferrer"&gt;Cerebrum&lt;/a&gt; for how to run the computer-use agent. &lt;/p&gt;

&lt;h3&gt;
  
  
  Supported Agent Frameworks
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/agiresearch/openagi" rel="noopener noreferrer"&gt;OpenAGI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/microsoft/autogen" rel="noopener noreferrer"&gt;AutoGen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/OpenInterpreter/open-interpreter" rel="noopener noreferrer"&gt;Open-Interpreter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/geekan/MetaGPT?tab=readme-ov-file" rel="noopener noreferrer"&gt;MetaGPT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Supported LLM Cores
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider 🏢&lt;/th&gt;
&lt;th&gt;Model Name 🤖&lt;/th&gt;
&lt;th&gt;Open Source 🔓&lt;/th&gt;
&lt;th&gt;Model String ⌨️&lt;/th&gt;
&lt;th&gt;Backend ⚙️&lt;/th&gt;
&lt;th&gt;Required API Key&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;&lt;a href="https://makersuite.google.com/app/apikey" rel="noopener noreferrer"&gt;All Models&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;model-name&lt;/td&gt;
&lt;td&gt;anthropic&lt;/td&gt;
&lt;td&gt;ANTHROPIC_API_KEY&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;&lt;a href="https://platform.openai.com/docs/models" rel="noopener noreferrer"&gt;All Models&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;model-name&lt;/td&gt;
&lt;td&gt;openai&lt;/td&gt;
&lt;td&gt;OPENAI_API_KEY&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deepseek&lt;/td&gt;
&lt;td&gt;&lt;a href="https://api-docs.deepseek.com/" rel="noopener noreferrer"&gt;All Models&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;model-name&lt;/td&gt;
&lt;td&gt;deepseek&lt;/td&gt;
&lt;td&gt;DEEPSEEK_API_KEY&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google&lt;/td&gt;
&lt;td&gt;&lt;a href="https://makersuite.google.com/app/apikey" rel="noopener noreferrer"&gt;All Models&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;model-name&lt;/td&gt;
&lt;td&gt;gemini&lt;/td&gt;
&lt;td&gt;GEMINI_API_KEY&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Groq&lt;/td&gt;
&lt;td&gt;&lt;a href="https://console.groq.com/keys" rel="noopener noreferrer"&gt;All Models&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;model-name&lt;/td&gt;
&lt;td&gt;groq&lt;/td&gt;
&lt;td&gt;GROQ_API_KEY&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HuggingFace&lt;/td&gt;
&lt;td&gt;&lt;a href="https://huggingface.co/models/" rel="noopener noreferrer"&gt;All Models&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;model-name&lt;/td&gt;
&lt;td&gt;huggingface&lt;/td&gt;
&lt;td&gt;HF_HOME&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ollama&lt;/td&gt;
&lt;td&gt;&lt;a href="https://ollama.com/search" rel="noopener noreferrer"&gt;All Models&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;model-name&lt;/td&gt;
&lt;td&gt;ollama&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vLLM&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.vllm.ai/en/latest/" rel="noopener noreferrer"&gt;All Models&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;model-name&lt;/td&gt;
&lt;td&gt;vllm&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Novita&lt;/td&gt;
&lt;td&gt;&lt;a href="https://novita.ai/models/llm" rel="noopener noreferrer"&gt;All Models&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;model-name&lt;/td&gt;
&lt;td&gt;novita&lt;/td&gt;
&lt;td&gt;NOVITA_API_KEY&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🔧 Experimental Rust Rewrite (aios-rs)
&lt;/h2&gt;

&lt;p&gt;An early experimental Rust scaffold lives in &lt;code&gt;aios-rs/&lt;/code&gt; providing trait definitions and minimal placeholder implementations (context, memory, storage, tool, scheduler, llm). This is NOT feature-parity yet; it's a foundation for incremental porting and performance-focused components.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try It
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;aios-rs
cargo build
cargo &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example (Echo LLM + Noop Scheduler)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight rust"&gt;&lt;code&gt;&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;aios_rs&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;prelude&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;fn&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nn"&gt;anyhow&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;Result&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;sync&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;Arc&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;EchoLLM&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;sync&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;Arc&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;sync&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;Mutex&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;InMemoryMemoryManager&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;()));&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;sync&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;Arc&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nn"&gt;FsStorageManager&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/tmp/aios_store"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;std&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;sync&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nn"&gt;Arc&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NoopToolManager&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="k"&gt;mut&lt;/span&gt; &lt;span class="n"&gt;scheduler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;NoopScheduler&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;scheduler&lt;/span&gt;&lt;span class="nf"&gt;.start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="n"&gt;scheduler&lt;/span&gt;&lt;span class="nf"&gt;.stop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nf"&gt;Ok&lt;/span&gt;&lt;span class="p"&gt;(())&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@article{mei2025aios,
  title={AIOS: LLM Agent Operating System},
  author={Mei, Kai and Zhu, Xi and Xu, Wujiang and Hua, Wenyue and Jin, Mingyu and Li, Zelong and Xu, Shuyuan and Ye, Ruosong and Ge, Yingqiang and Zhang, Yongfeng}
  journal={In Proceedings of the 2nd Conference on Language Modeling (COLM 2025)},
  year={2025}
}
@article{mei2025litecua,
  title={LiteCUA: Computer as MCP Server for Computer-Use Agent on AIOS},
  author={Mei, Kai and Zhu, Xi and Gao, Hang and Lin, Shuhang and Zhang, Yongfeng},
  journal={arXiv preprint arXiv:2505.18829},
  year={2025}
}
@article{xu2025mem,
  title={A-Mem: Agentic Memory for LLM Agents},
  author={Xu, Wujiang and Liang, Zujie and Mei, Kai and Gao, Hang and Tan, Juntao and Zhang, Yongfeng},
  journal={arXiv:2502.12110},
  year={2025}
}
@inproceedings{rama2025cerebrum,
  title={Cerebrum (AIOS SDK): A Platform for Agent Development, Deployment, Distribution, and Discovery}, 
  author={Balaji Rama and Kai Mei and Yongfeng Zhang},
  booktitle={2025 Annual Conference of the Nations of the Americas Chapter of the Association for Computational Linguistics},
  year={2025}
}
@inproceedings{shi2025from,
  title={From Commands to Prompts: {LLM}-based Semantic File System for AIOS},
  author={Zeru Shi and Kai Mei and Mingyu Jin and Yongye Su and Chaoji Zuo and Wenyue Hua and Wujiang Xu and Yujie Ren and Zirui Liu and Mengnan Du and Dong Deng and Yongfeng Zhang},
  booktitle={The Thirteenth International Conference on Learning Representations},
  year={2025},
  url={https://openreview.net/forum?id=2G021ZqUEZ}
}
@article{ge2023llm,
  title={LLM as OS, Agents as Apps: Envisioning AIOS, Agents and the AIOS-Agent Ecosystem},
  author={Ge, Yingqiang and Ren, Yujie and Hua, Wenyue and Xu, Shuyuan and Tan, Juntao and Zhang, Yongfeng},
  journal={arXiv:2312.03815},
  year={2023}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🚀 Contributions
&lt;/h2&gt;

&lt;p&gt;For how to contribute, see &lt;a href="https://github.com/agiresearch/AIOS/blob/main/docs/CONTRIBUTE.md" rel="noopener noreferrer"&gt;CONTRIBUTE&lt;/a&gt;. If you would like to contribute to the codebase, &lt;a href="https://github.com/agiresearch/AIOS/issues" rel="noopener noreferrer"&gt;issues&lt;/a&gt; or &lt;a href="https://github.com/agiresearch/AIOS/pulls" rel="noopener noreferrer"&gt;pull requests&lt;/a&gt; are always welcome!&lt;/p&gt;

&lt;h2&gt;
  
  
  🌍 AIOS Contributors
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/agiresearch/AIOS/graphs/contributors" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcontrib.rocks%2Fimage%3Frepo%3Dagiresearch%2FAIOS%26max%3D300" alt="AIOS contributors" width="812" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Acknowledgement
&lt;/h2&gt;

&lt;p&gt;We learned the design and reused code from the following projects: &lt;a href="https://docs.litellm.ai/docs/" rel="noopener noreferrer"&gt;LiteLLM&lt;/a&gt;, &lt;a href="https://os-world.github.io/" rel="noopener noreferrer"&gt;OSWorld&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤝 Discord Channel
&lt;/h2&gt;

&lt;p&gt;If you would like to join the community, ask questions, chat with fellows, learn about or propose new features, and participate in future developments, join our &lt;a href="https://discord.gg/B2HFxEgTJX" rel="noopener noreferrer"&gt;Discord Community&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>aios</category>
    </item>
    <item>
      <title>antimicro</title>
      <dc:creator>classccai</dc:creator>
      <pubDate>Fri, 24 Apr 2026 07:09:39 +0000</pubDate>
      <link>https://dev.to/classccai/antimicro-36e4</link>
      <guid>https://dev.to/classccai/antimicro-36e4</guid>
      <description>&lt;p&gt;AntiMicroX&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
Description
&lt;/li&gt;
&lt;li&gt;
License
&lt;/li&gt;
&lt;li&gt;Installation&lt;/li&gt;
&lt;li&gt;Wiki&lt;/li&gt;
&lt;li&gt;
Command Line &lt;/li&gt;
&lt;li&gt;D-Bus&lt;/li&gt;
&lt;li&gt;Testing Under Linux&lt;/li&gt;
&lt;li&gt;AntiMicroX Profiles&lt;/li&gt;
&lt;li&gt;Support&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  ❗Looking for a new maintainer❗
&lt;/h2&gt;

&lt;p&gt;Due to lack of time and shifting focus of its developer AntiMicroX is looking for a new maintainer willing to continue development.&lt;br&gt;&lt;br&gt;
For now, this app will have only limited support and will not get any new features (unless coded by external contributors).&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/AntiMicroX/antimicrox/discussions/1171" rel="noopener noreferrer"&gt;Link to discussion&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Description
&lt;/h2&gt;

&lt;p&gt;AntiMicroX is a graphical program used to map gamepad keys to keyboard, mouse, scripts and macros. You can use this program to control any desktop application with a gamepad on Linux🐧 and Windows 🪟.&lt;br&gt;&lt;br&gt;
It can be also used for generating SDL2 configuration (useful for mapping atypical gamepads to generic ones like xbox360).&lt;/p&gt;

&lt;p&gt;We support X.org and Wayland.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mapping of gamepads/joystick buttons to:

&lt;ul&gt;
&lt;li&gt;keyboard buttons&lt;/li&gt;
&lt;li&gt;mouse buttons and moves&lt;/li&gt;
&lt;li&gt;scripts and executables&lt;/li&gt;
&lt;li&gt;macros consisting of elements mentioned above&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Assigning multiple switchable sets of mappings to gamepad.&lt;/li&gt;
&lt;li&gt;Auto profiles - assign profile to active application window (not in Wayland &lt;a href="https://github.com/AntiMicroX/antimicrox/issues/303" rel="noopener noreferrer"&gt;note&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This program is currently supported under various Linux&lt;br&gt;
distributions.&lt;/p&gt;

&lt;p&gt;This application is continuation of project called &lt;code&gt;AntiMicro&lt;/code&gt;, which was later abandoned and revived by juliagoda.&lt;/p&gt;

&lt;p&gt;Legacy repositories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First AntiMicroX repository: &lt;a href="https://github.com/juliagoda/antimicroX" rel="noopener noreferrer"&gt;https://github.com/juliagoda/antimicroX&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Second, maintained by organization: &lt;a href="https://github.com/AntiMicro/antimicro" rel="noopener noreferrer"&gt;https://github.com/AntiMicro/antimicro&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;First, original AntiMicro repository: &lt;a href="https://github.com/Ryochan7/antimicro" rel="noopener noreferrer"&gt;https://github.com/Ryochan7/antimicro&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Screenshots:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Disclaimer: Theme may depend on your system configuration.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/.%2Fother%2Fappdata%2Fscreenshots%2Fapp_light.png" alt="Main Window" width="800" height="400"&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/.%2Fother%2Fappdata%2Fscreenshots%2Fcontrollermapping.png" alt="Mapping" width="800" height="400"&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/.%2Fother%2Fappdata%2Fscreenshots%2Fcalibration.png" alt="Calibration" width="800" height="400"&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/.%2Fother%2Fappdata%2Fscreenshots%2Fadvanced.png" alt="Advanced settings" width="800" height="400"&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;This program is licensed under the GPL v.3. Please read the LICENSE text document&lt;br&gt;
included with the source code if you would like to read the terms of the license.&lt;br&gt;
The license can also be found online at&lt;br&gt;
&lt;a href="http://www.gnu.org/licenses/gpl.txt" rel="noopener noreferrer"&gt;http://www.gnu.org/licenses/gpl.txt&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;

&lt;p&gt;Just download &lt;code&gt;antimicrox-X.X.X-AMD64.exe&lt;/code&gt; from &lt;a href="https://github.com/AntiMicroX/antimicrox/releases/latest" rel="noopener noreferrer"&gt;Release site&lt;/a&gt; and install it.&lt;/p&gt;
&lt;h3&gt;
  
  
  Flatpak
&lt;/h3&gt;

&lt;p&gt;The flatpak version is distributed on Flathub, and runs on most major Linux distributions. See instructions here: &lt;a href="https://flathub.org/apps/details/io.github.antimicrox.antimicrox" rel="noopener noreferrer"&gt;Flathub application page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have Flathub &lt;a href="https://flatpak.org/setup/" rel="noopener noreferrer"&gt;set up&lt;/a&gt; already:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flatpak &lt;span class="nb"&gt;install &lt;/span&gt;flathub io.github.antimicrox.antimicrox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;❕ Flatpak package may not work correctly with wayland &lt;a href="https://github.com/AntiMicroX/antimicrox/wiki/Open-uinput-error" rel="noopener noreferrer"&gt;(Fix available here)&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AppImage
&lt;/h3&gt;

&lt;p&gt;Download from the &lt;a href="https://github.com/AntiMicroX/antimicrox/releases" rel="noopener noreferrer"&gt;release site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is recommended to use &lt;a href="https://github.com/TheAssassin/AppImageLauncher" rel="noopener noreferrer"&gt;AppImageLauncher&lt;/a&gt; with this package.&lt;/p&gt;

&lt;h3&gt;
  
  
  Debian/Ubuntu-based distributions
&lt;/h3&gt;

&lt;p&gt;Download from the &lt;a href="https://github.com/AntiMicroX/antimicrox/releases" rel="noopener noreferrer"&gt;release site&lt;/a&gt; and install &lt;code&gt;.deb&lt;/code&gt; package.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fedora
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dnf install antimicrox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  openSUSE
&lt;/h3&gt;

&lt;p&gt;A &lt;a href="https://software.opensuse.org/package/antimicrox" rel="noopener noreferrer"&gt;package&lt;/a&gt; is available.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;zypper install antimicrox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Arch Linux or Arch Linux based distributions:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;trizen -S antimicrox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;or&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;pre-built version can de downloaded from unofficial repository called &lt;a href="https://lonewolf.pedrohlc.com/chaotic-aur/" rel="noopener noreferrer"&gt;chaotic-aur&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Append (one of listed mirrors) to &lt;code&gt;/etc/pacman.conf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Brazil&lt;/span&gt;
Server &lt;span class="o"&gt;=&lt;/span&gt; http://lonewolf-builder.duckdns.org/&lt;span class="nv"&gt;$repo&lt;/span&gt;/&lt;span class="nv"&gt;$arch&lt;/span&gt;
&lt;span class="c"&gt;# Germany&lt;/span&gt;
Server &lt;span class="o"&gt;=&lt;/span&gt; http://chaotic.bangl.de/&lt;span class="nv"&gt;$repo&lt;/span&gt;/&lt;span class="nv"&gt;$arch&lt;/span&gt;
&lt;span class="c"&gt;# USA (Cloudflare cached)&lt;/span&gt;
Server &lt;span class="o"&gt;=&lt;/span&gt; https://repo.kitsuna.net/&lt;span class="nv"&gt;$arch&lt;/span&gt;
&lt;span class="c"&gt;# Netherlands&lt;/span&gt;
Server &lt;span class="o"&gt;=&lt;/span&gt; https://chaotic.tn.dedyn.io/&lt;span class="nv"&gt;$arch&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To check signature, add keys:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman-key &lt;span class="nt"&gt;--keyserver&lt;/span&gt; hkp://keyserver.ubuntu.com &lt;span class="nt"&gt;-r&lt;/span&gt; 3056513887B78AEB 8A9E14A07010F7E3
&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman-key &lt;span class="nt"&gt;--lsign-key&lt;/span&gt; 3056513887B78AEB
&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman-key &lt;span class="nt"&gt;--lsign-key&lt;/span&gt; 8A9E14A07010F7E3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install package&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pacman &lt;span class="nt"&gt;-S&lt;/span&gt; antimicrox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Building Yourself
&lt;/h3&gt;

&lt;p&gt;List of required dependencies and build instructions can be found &lt;a href="//./BUILDING.md"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Packages status
&lt;/h3&gt;

&lt;p&gt;Status of package &lt;code&gt;antimicrox&lt;/code&gt;:&lt;br&gt;&lt;br&gt;
&lt;a href="https://repology.org/project/antimicrox/versions" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frepology.org%2Fbadge%2Fvertical-allrepos%2Fantimicrox.svg%3Fcolumns%3D3%26minversion%3D3.1" alt="Packaging status" width="580" height="285"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Command Line
&lt;/h2&gt;

&lt;p&gt;Run &lt;code&gt;antimicrox --help&lt;/code&gt; or read &lt;code&gt;man antimicrox&lt;/code&gt; for command-line parameters.&lt;/p&gt;


  Commandline for flatpak
  In case of flatpak package AntiMicroX can be launched with command:
  &lt;br&gt;
  &lt;code&gt;flatpak run io.github.antimicrox.antimicrox&lt;/code&gt; instead of just &lt;code&gt;antimicrox&lt;/code&gt;
  &lt;br&gt;
  In some cases it may be good to add alias
  &lt;br&gt;
  &lt;code&gt;alias antimicrox='flatpak run io.github.antimicrox.antimicrox'&lt;/code&gt;&lt;br&gt;
  fo file &lt;code&gt;~/.bashrc&lt;/code&gt;

&lt;h2&gt;
  
  
  D-Bus
&lt;/h2&gt;

&lt;p&gt;AntiMicroX provides a D-Bus service, io.github.antimicrox. You can control some&lt;br&gt;
aspects of AntiMicroX using D-Bus, such as selecting the current control set.&lt;/p&gt;

&lt;p&gt;For example, to select set 0 for input device 0 with dbus-send:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dbus-send --print-reply --dest=io.github.antimicrox /InputDevice/0 io.github.antimicrox.InputDevice.setActiveSetNumber int32:0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Objects
&lt;/h3&gt;

&lt;p&gt;AntiMicroX provides InputDevice objects with paths &lt;code&gt;/InputDevice/&amp;lt;N&amp;gt;&lt;/code&gt;, where&lt;br&gt;
&lt;code&gt;&amp;lt;N&amp;gt;&lt;/code&gt; is the device index.&lt;/p&gt;

&lt;p&gt;To find a device of interest, enumerate those objects and use &lt;code&gt;getSDLName&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;getDescription&lt;/code&gt; to identify the device.&lt;/p&gt;
&lt;h3&gt;
  
  
  Interfaces
&lt;/h3&gt;

&lt;p&gt;InputDevice objects support the &lt;a href="//other/io.github.antimicrox.inputdevice.xml"&gt;io.github.antimicrox.InputDevice&lt;/a&gt; interface.&lt;/p&gt;
&lt;h4&gt;
  
  
  Method: io.github.antimicrox.InputDevice.getSDLName()
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;getSDLName()&lt;/code&gt; provides the human-readable name of the device, such as "Microsoft Xbox 360 Controller" or "HORIPAD FPS for Nintendo Switch".&lt;/p&gt;
&lt;h4&gt;
  
  
  Method: io.github.antimicrox.InputDevice.getDescription()
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;getDescription()&lt;/code&gt; provides a detailed description of the device:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Index:            1
  UniqueID:         030081b85e0400008e020000100100001118654
  GUID:             030081b85e0400008e02000010010000
  VendorID:         1118
  ProductID:        654
  Serial:
  Product Version:  272
  Name:             Xbox 360 Controller
  Game Controller: Yes
  # of RawAxes:    6
  # of Axes:       6
  # of RawButtons: 21
  # of Buttons:    21
  # of Hats:       0
  Accelerometer:   0
  Gyroscope:       0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The controller's &lt;code&gt;UniqueID&lt;/code&gt; assigned by AntiMicroX&lt;/li&gt;
&lt;li&gt;The controller's &lt;code&gt;GUID&lt;/code&gt; assigned by SDL&lt;/li&gt;
&lt;li&gt;The controller's USB &lt;code&gt;VendorID&lt;/code&gt;, &lt;code&gt;ProductID&lt;/code&gt;, &lt;code&gt;Serial&lt;/code&gt;, &lt;code&gt;ProductVersion&lt;/code&gt;, and
&lt;code&gt;Name&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Whether the device is a &lt;code&gt;Game Controller&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The controller's input features: &lt;code&gt;# of RawAxes&lt;/code&gt;, &lt;code&gt;# of Axes&lt;/code&gt;,
&lt;code&gt;# of RawButtons&lt;/code&gt;, &lt;code&gt;# of Buttons&lt;/code&gt;, &lt;code&gt;# of Hats&lt;/code&gt;, &lt;code&gt;Accelerometer&lt;/code&gt;, and
&lt;code&gt;Gysroscope&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Method: io.github.antimicrox.InputDevice.getActiveSetNumber()
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;getActiveSetNumber()&lt;/code&gt; returns the current set number for this device.&lt;/p&gt;

&lt;p&gt;API set indices are 0-based, but they are displayed in the UI with 1-based&lt;br&gt;
labels.&lt;/p&gt;

&lt;h4&gt;
  
  
  Method: io.github.antimicrox.InputDevice.getActiveSetName()
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;getActiveSetName()&lt;/code&gt; returns the name of the current set for this device.&lt;/p&gt;

&lt;p&gt;This is empty if the set was not given a name.  In that case, AntiMicroX&lt;br&gt;
displays a default name: &lt;code&gt;Set &amp;lt;N&amp;gt;&lt;/code&gt; with a 1-based index.&lt;/p&gt;

&lt;h4&gt;
  
  
  Method: io.github.antimicrox.InputDevice.setActiveSetNumber()
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;setActiveSetNumber()&lt;/code&gt; changes the active set for this device to the set&lt;br&gt;
specified, as a 0-based index.&lt;/p&gt;

&lt;h3&gt;
  
  
  Test
&lt;/h3&gt;

&lt;p&gt;Use &lt;a href="https://gitlab.gnome.org/GNOME/d-spy" rel="noopener noreferrer"&gt;D-Spy&lt;/a&gt; to inspect and test the D-Bus&lt;br&gt;
interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wiki
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/AntiMicroX/antimicrox/wiki" rel="noopener noreferrer"&gt;Look here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing Under Linux
&lt;/h2&gt;

&lt;p&gt;If you are having problems with antimicrox detecting a controller or&lt;br&gt;
detecting all axes and buttons, you should test the controller outside of&lt;br&gt;
antimicrox to check if the problem is with antimicrox or not. The two endorsed&lt;br&gt;
programs for testing gamepads outside of antimicrox are &lt;strong&gt;sdl-jstest&lt;/strong&gt;&lt;br&gt;
(&lt;strong&gt;sdl2-jstest&lt;/strong&gt;) and &lt;strong&gt;evtest&lt;/strong&gt;. SDL2 utilizes evdev on Linux so performing&lt;br&gt;
testing with older programs that use joydev won't be as helpful since some&lt;br&gt;
devices behave a bit differently between the two systems. Another method also exists, &lt;br&gt;
which can be found &lt;a href="https://github.com/juliagoda/SDL_JoystickButtonNames" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  AntiMicroX Profiles
&lt;/h2&gt;

&lt;p&gt;If you would like to send the profile you are using for your application or find something &lt;br&gt;
for yourself, &lt;a href="https://github.com/AntiMicroX/antimicrox-profiles" rel="noopener noreferrer"&gt;here&lt;/a&gt; is the forked repository. If you want to report a bug, ask &lt;br&gt;
a question or share a suggestion, you can do that on the antimicrox page or on the&lt;br&gt;
&lt;a href="https://github.com/AntiMicroX/antimicrox-profiles" rel="noopener noreferrer"&gt;antimicrox-profiles&lt;/a&gt; page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Support
&lt;/h2&gt;

&lt;p&gt;There are several ways to get help with AntiMicroX. The easiest way is to upvote (with 👍) issues you thing are the most important ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contributing
&lt;/h3&gt;

&lt;p&gt;Any contributions into codebase are welcome. You can find contribution guide &lt;a href="//./CONTRIBUTING.md"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;
Some issues are may have bounties which are meant to attract contributors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Translation
&lt;/h3&gt;

&lt;p&gt;Translation process is handled via &lt;a href="https://weblate.org/" rel="noopener noreferrer"&gt;Weblate&lt;/a&gt;. If you want to help just click this &lt;a href="https://hosted.weblate.org/engage/antimicrox" rel="noopener noreferrer"&gt;link&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Translation status&lt;/p&gt;

&lt;p&gt;&lt;a href="https://hosted.weblate.org/engage/antimicrox/" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhosted.weblate.org%2Fwidgets%2Fantimicrox%2F-%2Fgui%2Fmulti-auto.svg" alt="Translation status" width="400" height="465"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More information about translating can be found &lt;a href="https://github.com/AntiMicroX/antimicrox/wiki/Translating-AntiMicroX" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>antimicro</category>
    </item>
    <item>
      <title>terminals 4</title>
      <dc:creator>classccai</dc:creator>
      <pubDate>Fri, 24 Apr 2026 07:08:29 +0000</pubDate>
      <link>https://dev.to/classccai/terminals-4-5dl2</link>
      <guid>https://dev.to/classccai/terminals-4-5dl2</guid>
      <description>&lt;h1&gt;
  
  
  Terminals Project
&lt;/h1&gt;

&lt;p&gt;Terminals is a secure, multi tab terminal services/remote desktop client. RDP, VNC, VMRC, SSH, Telnet, RAS, ICA Citrix, HTTP and HTTPs based protocols are integrated. It uses Terminal Services ActiveX Client (mstscax.dll). The project started from the need of controlling multiple connections simultaneously. It is a complete replacement for the mstsc.exe (Terminal Services) client. This is official source moved from Codeplex. See &lt;a href="///Docs/Features-and-Screen-shots.md"&gt;features list&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Downloads
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Terminals-Origin/Terminals/releases/tag/4.0.1" rel="noopener noreferrer"&gt;Terminals Version 4.0.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://chocolatey.org/packages/terminals" rel="noopener noreferrer"&gt;Chocolatey package&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  News
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;October 2022&lt;/strong&gt; &lt;strong&gt;NOTE:&lt;/strong&gt; Project RESURECTED, but we are still searching for maintainers!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;February 2019&lt;/strong&gt; - Project is no longer under active development, we are searching for maintainers!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;June 26, 2017&lt;/strong&gt; - New release version 4.0.1&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;May 17, 2017&lt;/strong&gt; - New record 40k downloads of version 4.0&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;April 5, 2017&lt;/strong&gt; - &lt;a href="///Docs/Road-map.md"&gt;Road map&lt;/a&gt; for next features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;April 2, 2017&lt;/strong&gt; - Version 4.0.0 release published
New Options to disable protocol plugins&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;December 16,2016&lt;/strong&gt; - New Official &lt;a href="https://chocolatey.org/packages/terminals" rel="noopener noreferrer"&gt;Chocolatey package&lt;/a&gt;
We are happy to announce that Chocolatey terminals package is now maintained by our team. &lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Donate
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Keep the project Alive!&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;amp;hosted_button_id=X28G9FEYUN6CJ" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FDonate-PayPal-green.svg" alt="$25" width="96" height="20"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Documentation
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="///Docs/User-documentation.md"&gt;User documentation&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Installation

&lt;ul&gt;
&lt;li&gt;&lt;a href="///Docs/System-Requirements.md"&gt;System requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="///Docs/Upgrade-to-version-3.0.md"&gt;Upgrade to version 3.0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;a href="///Docs/Features-and-Screen-shots.md"&gt;Features and Screen shots&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;

&lt;a href="///Docs/Developer-guide.md"&gt;Developer guide&lt;/a&gt; (How to contribute)&lt;/li&gt;

&lt;li&gt;&lt;a href="///Docs/Road-map.md"&gt;Road map&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="///Docs/Powershell-script-to-create-import-file.md"&gt;Powershell script to create import file&lt;/a&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;a href="//LICENSE.md"&gt;License&lt;/a&gt;
&lt;/h1&gt;

</description>
      <category>terminals</category>
    </item>
    <item>
      <title>fooocus</title>
      <dc:creator>classccai</dc:creator>
      <pubDate>Fri, 24 Apr 2026 06:54:37 +0000</pubDate>
      <link>https://dev.to/classccai/fooocus-4odc</link>
      <guid>https://dev.to/classccai/fooocus-4odc</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Flllyasviel%2FFooocus%2Fassets%2F19834515%2F483fb86d-c9a2-4c20-997c-46dafc124f25" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Flllyasviel%2FFooocus%2Fassets%2F19834515%2F483fb86d-c9a2-4c20-997c-46dafc124f25" width="760" height="768"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Fooocus
&lt;/h1&gt;

&lt;p&gt;&amp;gt;&amp;gt;&amp;gt; Click Here to Install Fooocus &amp;lt;&amp;lt;&amp;lt;&lt;/p&gt;

&lt;p&gt;Fooocus is an image generating software (based on &lt;a href="https://www.gradio.app/" rel="noopener noreferrer"&gt;Gradio&lt;/a&gt; &lt;a href="https://github.com/gradio-app/gradio" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fgithub%2Fstars%2Fgradio-app%2Fgradio" width="88" height="20"&gt;&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Fooocus presents a rethinking of image generator designs. The software is offline, open source, and free, while at the same time, similar to many online image generators like Midjourney, the manual tweaking is not needed, and users only need to focus on the prompts and images. Fooocus has also simplified the installation: between pressing "download" and generating the first image, the number of needed mouse clicks is strictly limited to less than 3. Minimal GPU memory requirement is 4GB (Nvidia).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recently many fake websites exist on Google when you search “fooocus”. Do not trust those – here is the only official source of Fooocus.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Project Status: Limited Long-Term Support (LTS) with Bug Fixes Only
&lt;/h1&gt;

&lt;p&gt;The Fooocus project, built entirely on the &lt;strong&gt;Stable Diffusion XL&lt;/strong&gt; architecture, is now in a state of limited long-term support (LTS) with bug fixes only. As the existing functionalities are considered as nearly free of programmartic issues (Thanks to &lt;a href="https://github.com/mashb1t" rel="noopener noreferrer"&gt;mashb1t&lt;/a&gt;'s huge efforts), future updates will focus exclusively on addressing any bugs that may arise. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There are no current plans to migrate to or incorporate newer model architectures.&lt;/strong&gt; However, this may change during time with the development of open-source community. For example, if the community converge to one single dominant method for image generation (which may really happen in half or one years given the current status), Fooocus may also migrate to that exact method.&lt;/p&gt;

&lt;p&gt;For those interested in utilizing newer models such as &lt;strong&gt;Flux&lt;/strong&gt;, we recommend exploring alternative platforms such as &lt;a href="https://github.com/lllyasviel/stable-diffusion-webui-forge" rel="noopener noreferrer"&gt;WebUI Forge&lt;/a&gt; (also from us), &lt;a href="https://github.com/comfyanonymous/ComfyUI" rel="noopener noreferrer"&gt;ComfyUI/SwarmUI&lt;/a&gt;. Additionally, several &lt;a href="https://github.com/lllyasviel/Fooocus?tab=readme-ov-file#forks" rel="noopener noreferrer"&gt;excellent forks of Fooocus&lt;/a&gt; are available for experimentation.&lt;/p&gt;

&lt;p&gt;Again, recently many fake websites exist on Google when you search “fooocus”. Do &lt;strong&gt;NOT&lt;/strong&gt; get Fooocus from those websites – this page is the only official source of Fooocus. We never have any website like such as “fooocus.com”, “fooocus.net”, “fooocus.co”, “fooocus.ai”, “fooocus.org”, “fooocus.pro”, “fooocus.one”. Those websites are ALL FAKE. &lt;strong&gt;They have ABSOLUTLY no relationship to us. Fooocus is a 100% non-commercial offline open-source software.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Features
&lt;/h1&gt;

&lt;p&gt;Below is a quick list using Midjourney's examples:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Midjourney&lt;/th&gt;
&lt;th&gt;Fooocus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;High-quality text-to-image without needing much prompt engineering or parameter tuning. &lt;br&gt; (Unknown method)&lt;/td&gt;
&lt;td&gt;High-quality text-to-image without needing much prompt engineering or parameter tuning. &lt;br&gt; (Fooocus has an offline GPT-2 based prompt processing engine and lots of sampling improvements so that results are always beautiful, no matter if your prompt is as short as “house in garden” or as long as 1000 words)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;V1 V2 V3 V4&lt;/td&gt;
&lt;td&gt;Input Image -&amp;gt; Upscale or Variation -&amp;gt; Vary (Subtle) / Vary (Strong)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;U1 U2 U3 U4&lt;/td&gt;
&lt;td&gt;Input Image -&amp;gt; Upscale or Variation -&amp;gt; Upscale (1.5x) / Upscale (2x)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inpaint / Up / Down / Left / Right (Pan)&lt;/td&gt;
&lt;td&gt;Input Image -&amp;gt; Inpaint or Outpaint -&amp;gt; Inpaint / Up / Down / Left / Right &lt;br&gt; (Fooocus uses its own inpaint algorithm and inpaint models so that results are more satisfying than all other software that uses standard SDXL inpaint method/model)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image Prompt&lt;/td&gt;
&lt;td&gt;Input Image -&amp;gt; Image Prompt &lt;br&gt; (Fooocus uses its own image prompt algorithm so that result quality and prompt understanding are more satisfying than all other software that uses standard SDXL methods like standard IP-Adapters or Revisions)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--style&lt;/td&gt;
&lt;td&gt;Advanced -&amp;gt; Style&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--stylize&lt;/td&gt;
&lt;td&gt;Advanced -&amp;gt; Advanced -&amp;gt; Guidance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--niji&lt;/td&gt;
&lt;td&gt;
&lt;a href="https://github.com/lllyasviel/Fooocus/discussions/679" rel="noopener noreferrer"&gt;Multiple launchers: "run.bat", "run_anime.bat", and "run_realistic.bat".&lt;/a&gt; &lt;br&gt; Fooocus support SDXL models on Civitai &lt;br&gt; (You can google search “Civitai” if you do not know about it)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--quality&lt;/td&gt;
&lt;td&gt;Advanced -&amp;gt; Quality&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--repeat&lt;/td&gt;
&lt;td&gt;Advanced -&amp;gt; Image Number&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi Prompts (::)&lt;/td&gt;
&lt;td&gt;Just use multiple lines of prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Prompt Weights&lt;/td&gt;
&lt;td&gt;You can use " I am (happy:1.5)". &lt;br&gt; Fooocus uses A1111's reweighting algorithm so that results are better than ComfyUI if users directly copy prompts from Civitai. (Because if prompts are written in ComfyUI's reweighting, users are less likely to copy prompt texts as they prefer dragging files) &lt;br&gt; To use embedding, you can use "(embedding:file_name:1.1)"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--no&lt;/td&gt;
&lt;td&gt;Advanced -&amp;gt; Negative Prompt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;--ar&lt;/td&gt;
&lt;td&gt;Advanced -&amp;gt; Aspect Ratios&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;InsightFace&lt;/td&gt;
&lt;td&gt;Input Image -&amp;gt; Image Prompt -&amp;gt; Advanced -&amp;gt; FaceSwap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Describe&lt;/td&gt;
&lt;td&gt;Input Image -&amp;gt; Describe&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Below is a quick list using LeonardoAI's examples:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;LeonardoAI&lt;/th&gt;
&lt;th&gt;Fooocus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Prompt Magic&lt;/td&gt;
&lt;td&gt;Advanced -&amp;gt; Style -&amp;gt; Fooocus V2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advanced Sampler Parameters (like Contrast/Sharpness/etc)&lt;/td&gt;
&lt;td&gt;Advanced -&amp;gt; Advanced -&amp;gt; Sampling Sharpness / etc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User-friendly ControlNets&lt;/td&gt;
&lt;td&gt;Input Image -&amp;gt; Image Prompt -&amp;gt; Advanced&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Also, &lt;a href="https://github.com/lllyasviel/Fooocus/discussions/117" rel="noopener noreferrer"&gt;click here to browse the advanced features.&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Download
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Windows
&lt;/h3&gt;

&lt;p&gt;You can directly download Fooocus with:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/lllyasviel/Fooocus/releases/download/v2.5.0/Fooocus_win64_2-5-0.7z" rel="noopener noreferrer"&gt;&amp;gt;&amp;gt;&amp;gt; Click here to download &amp;lt;&amp;lt;&amp;lt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After you download the file, please uncompress it and then run the "run.bat".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo1bbxhcm0i29kew7vtwj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo1bbxhcm0i29kew7vtwj.png" alt="image" width="580" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first time you launch the software, it will automatically download models:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It will download default models to the folder "Fooocus\models\checkpoints" given different presets. You can download them in advance if you do not want automatic download.&lt;/li&gt;
&lt;li&gt;Note that if you use inpaint, at the first time you inpaint an image, it will download &lt;a href="https://huggingface.co/lllyasviel/fooocus_inpaint/resolve/main/inpaint_v26.fooocus.patch" rel="noopener noreferrer"&gt;Fooocus's own inpaint control model from here&lt;/a&gt; as the file "Fooocus\models\inpaint\inpaint_v26.fooocus.patch" (the size of this file is 1.28GB).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After Fooocus 2.1.60, you will also have &lt;code&gt;run_anime.bat&lt;/code&gt; and &lt;code&gt;run_realistic.bat&lt;/code&gt;. They are different model presets (and require different models, but they will be automatically downloaded). &lt;a href="https://github.com/lllyasviel/Fooocus/discussions/679" rel="noopener noreferrer"&gt;Check here for more details&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After Fooocus 2.3.0 you can also switch presets directly in the browser. Keep in mind to add these arguments if you want to change the default behavior:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;--disable-preset-selection&lt;/code&gt; to disable preset selection in the browser.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;--always-download-new-model&lt;/code&gt; to download missing models on preset switch. Default is fallback to &lt;code&gt;previous_default_models&lt;/code&gt; defined in the corresponding preset, also see terminal output.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwaw4ea8vprajwadq7sxy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwaw4ea8vprajwadq7sxy.png" alt="image" width="576" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you already have these files, you can copy them to the above locations to speed up installation.&lt;/p&gt;

&lt;p&gt;Note that if you see &lt;strong&gt;"MetadataIncompleteBuffer" or "PytorchStreamReader"&lt;/strong&gt;, then your model files are corrupted. Please download models again.&lt;/p&gt;

&lt;p&gt;Below is a test on a relatively low-end laptop with &lt;strong&gt;16GB System RAM&lt;/strong&gt; and &lt;strong&gt;6GB VRAM&lt;/strong&gt; (Nvidia 3060 laptop). The speed on this machine is about 1.35 seconds per iteration. Pretty impressive – nowadays laptops with 3060 are usually at very acceptable price.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fftkmm6ps4dzooivbrcto.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fftkmm6ps4dzooivbrcto.png" alt="image" width="800" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Besides, recently many other software report that Nvidia driver above 532 is sometimes 10x slower than Nvidia driver 531. If your generation time is very long, consider download &lt;a href="https://www.nvidia.com/download/driverResults.aspx/199991/en-us/" rel="noopener noreferrer"&gt;Nvidia Driver 531 Laptop&lt;/a&gt; or &lt;a href="https://www.nvidia.com/download/driverResults.aspx/199990/en-us/" rel="noopener noreferrer"&gt;Nvidia Driver 531 Desktop&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Note that the minimal requirement is &lt;strong&gt;4GB Nvidia GPU memory (4GB VRAM)&lt;/strong&gt; and &lt;strong&gt;8GB system memory (8GB RAM)&lt;/strong&gt;. This requires using Microsoft’s Virtual Swap technique, which is automatically enabled by your Windows installation in most cases, so you often do not need to do anything about it. However, if you are not sure, or if you manually turned it off (would anyone really do that?), or &lt;strong&gt;if you see any "RuntimeError: CPUAllocator"&lt;/strong&gt;, you can enable it here:&lt;/p&gt;

&lt;p&gt;Click here to see the image instructions. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhi26vctxiw71c2ads49r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhi26vctxiw71c2ads49r.png" alt="image" width="800" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And make sure that you have at least 40GB free space on each drive if you still see "RuntimeError: CPUAllocator" !&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Please open an issue if you use similar devices but still cannot achieve acceptable performances.&lt;/p&gt;

&lt;p&gt;Note that the minimal requirement for different platforms is different.&lt;/p&gt;

&lt;p&gt;See also the common problems and troubleshoots &lt;a href="//troubleshoot.md"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Colab
&lt;/h3&gt;

&lt;p&gt;(Last tested - 2024 Aug 12 by &lt;a href="https://github.com/mashb1t" rel="noopener noreferrer"&gt;mashb1t&lt;/a&gt;)&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Colab&lt;/th&gt;
&lt;th&gt;Info&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://colab.research.google.com/github/lllyasviel/Fooocus/blob/main/fooocus_colab.ipynb" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcolab.research.google.com%2Fassets%2Fcolab-badge.svg" alt="Open In Colab" width="117" height="20"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fooocus Official&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In Colab, you can modify the last line to &lt;code&gt;!python entry_with_update.py --share --always-high-vram&lt;/code&gt; or &lt;code&gt;!python entry_with_update.py --share --always-high-vram --preset anime&lt;/code&gt; or &lt;code&gt;!python entry_with_update.py --share --always-high-vram --preset realistic&lt;/code&gt; for Fooocus Default/Anime/Realistic Edition.&lt;/p&gt;

&lt;p&gt;You can also change the preset in the UI. Please be aware that this may lead to timeouts after 60 seconds. If this is the case, please wait until the download has finished, change the preset to initial and back to the one you've selected or reload the page.&lt;/p&gt;

&lt;p&gt;Note that this Colab will disable refiner by default because Colab free's resources are relatively limited (and some "big" features like image prompt may cause free-tier Colab to disconnect). We make sure that basic text-to-image is always working on free-tier Colab.&lt;/p&gt;

&lt;p&gt;Using &lt;code&gt;--always-high-vram&lt;/code&gt; shifts resource allocation from RAM to VRAM and achieves the overall best balance between performance, flexibility and stability on the default T4 instance. Please find more information &lt;a href="https://github.com/lllyasviel/Fooocus/pull/1710#issuecomment-1989185346" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks to &lt;a href="https://github.com/camenduru" rel="noopener noreferrer"&gt;camenduru&lt;/a&gt; for the template!&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux (Using Anaconda)
&lt;/h3&gt;

&lt;p&gt;If you want to use Anaconda/Miniconda, you can&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/lllyasviel/Fooocus.git
cd Fooocus
conda env create -f environment.yaml
conda activate fooocus
pip install -r requirements_versions.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Then download the models: download default models to the folder "Fooocus\models\checkpoints". &lt;strong&gt;Or let Fooocus automatically download the models&lt;/strong&gt; using the launcher:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conda activate fooocus
python entry_with_update.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Or, if you want to open a remote port, use&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conda activate fooocus
python entry_with_update.py --listen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Use &lt;code&gt;python entry_with_update.py --preset anime&lt;/code&gt; or &lt;code&gt;python entry_with_update.py --preset realistic&lt;/code&gt; for Fooocus Anime/Realistic Edition.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux (Using Python Venv)
&lt;/h3&gt;

&lt;p&gt;Your Linux needs to have &lt;strong&gt;Python 3.10&lt;/strong&gt; installed, and let's say your Python can be called with the command &lt;strong&gt;python3&lt;/strong&gt; with your venv system working; you can&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/lllyasviel/Fooocus.git
cd Fooocus
python3 -m venv fooocus_env
source fooocus_env/bin/activate
pip install -r requirements_versions.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;See the above sections for model downloads. You can launch the software with:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source fooocus_env/bin/activate
python entry_with_update.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Or, if you want to open a remote port, use&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source fooocus_env/bin/activate
python entry_with_update.py --listen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Use &lt;code&gt;python entry_with_update.py --preset anime&lt;/code&gt; or &lt;code&gt;python entry_with_update.py --preset realistic&lt;/code&gt; for Fooocus Anime/Realistic Edition.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux (Using native system Python)
&lt;/h3&gt;

&lt;p&gt;If you know what you are doing, and your Linux already has &lt;strong&gt;Python 3.10&lt;/strong&gt; installed, and your Python can be called with the command &lt;strong&gt;python3&lt;/strong&gt; (and Pip with &lt;strong&gt;pip3&lt;/strong&gt;), you can&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/lllyasviel/Fooocus.git
cd Fooocus
pip3 install -r requirements_versions.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;See the above sections for model downloads. You can launch the software with:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 entry_with_update.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Or, if you want to open a remote port, use&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python3 entry_with_update.py --listen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Use &lt;code&gt;python entry_with_update.py --preset anime&lt;/code&gt; or &lt;code&gt;python entry_with_update.py --preset realistic&lt;/code&gt; for Fooocus Anime/Realistic Edition.&lt;/p&gt;

&lt;h3&gt;
  
  
  Linux (AMD GPUs)
&lt;/h3&gt;

&lt;p&gt;Note that the minimal requirement for different platforms is different.&lt;/p&gt;

&lt;p&gt;Same with the above instructions. You need to change torch to the AMD version&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip uninstall torch torchvision torchaudio torchtext functorch xformers 
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;AMD is not intensively tested, however. The AMD support is in beta.&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;python entry_with_update.py --preset anime&lt;/code&gt; or &lt;code&gt;python entry_with_update.py --preset realistic&lt;/code&gt; for Fooocus Anime/Realistic Edition.&lt;/p&gt;

&lt;h3&gt;
  
  
  Windows (AMD GPUs)
&lt;/h3&gt;

&lt;p&gt;Note that the minimal requirement for different platforms is different.&lt;/p&gt;

&lt;p&gt;Same with Windows. Download the software and edit the content of &lt;code&gt;run.bat&lt;/code&gt; as:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.\python_embeded\python.exe -m pip uninstall torch torchvision torchaudio torchtext functorch xformers -y
.\python_embeded\python.exe -m pip install torch-directml
.\python_embeded\python.exe -s Fooocus\entry_with_update.py --directml
pause
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Then run the &lt;code&gt;run.bat&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;AMD is not intensively tested, however. The AMD support is in beta.&lt;/p&gt;

&lt;p&gt;For AMD, use &lt;code&gt;.\python_embeded\python.exe Fooocus\entry_with_update.py --directml --preset anime&lt;/code&gt; or &lt;code&gt;.\python_embeded\python.exe Fooocus\entry_with_update.py --directml --preset realistic&lt;/code&gt; for Fooocus Anime/Realistic Edition.&lt;/p&gt;

&lt;h3&gt;
  
  
  Mac
&lt;/h3&gt;

&lt;p&gt;Note that the minimal requirement for different platforms is different.&lt;/p&gt;

&lt;p&gt;Mac is not intensively tested. Below is an unofficial guideline for using Mac. You can discuss problems &lt;a href="https://github.com/lllyasviel/Fooocus/pull/129" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can install Fooocus on Apple Mac silicon (M1 or M2) with macOS 'Catalina' or a newer version. Fooocus runs on Apple silicon computers via &lt;a href="https://pytorch.org/get-started/locally/" rel="noopener noreferrer"&gt;PyTorch&lt;/a&gt; MPS device acceleration. Mac Silicon computers don't come with a dedicated graphics card, resulting in significantly longer image processing times compared to computers with dedicated graphics cards.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the conda package manager and pytorch nightly. Read the &lt;a href="https://developer.apple.com/metal/pytorch/" rel="noopener noreferrer"&gt;Accelerated PyTorch training on Mac&lt;/a&gt; Apple Developer guide for instructions. Make sure pytorch recognizes your MPS device.&lt;/li&gt;
&lt;li&gt;Open the macOS Terminal app and clone this repository with &lt;code&gt;git clone https://github.com/lllyasviel/Fooocus.git&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Change to the new Fooocus directory, &lt;code&gt;cd Fooocus&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create a new conda environment, &lt;code&gt;conda env create -f environment.yaml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Activate your new conda environment, &lt;code&gt;conda activate fooocus&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Install the packages required by Fooocus, &lt;code&gt;pip install -r requirements_versions.txt&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Launch Fooocus by running &lt;code&gt;python entry_with_update.py&lt;/code&gt;. (Some Mac M2 users may need &lt;code&gt;python entry_with_update.py --disable-offload-from-vram&lt;/code&gt; to speed up model loading/unloading.) The first time you run Fooocus, it will automatically download the Stable Diffusion SDXL models and will take a significant amount of time, depending on your internet connection.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use &lt;code&gt;python entry_with_update.py --preset anime&lt;/code&gt; or &lt;code&gt;python entry_with_update.py --preset realistic&lt;/code&gt; for Fooocus Anime/Realistic Edition.&lt;/p&gt;

&lt;h3&gt;
  
  
  Docker
&lt;/h3&gt;

&lt;p&gt;See &lt;a href="//docker.md"&gt;docker.md&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Download Previous Version
&lt;/h3&gt;

&lt;p&gt;See the guidelines &lt;a href="https://github.com/lllyasviel/Fooocus/discussions/1405" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Minimal Requirement
&lt;/h2&gt;

&lt;p&gt;Below is the minimal requirement for running Fooocus locally. If your device capability is lower than this spec, you may not be able to use Fooocus locally. (Please let us know, in any case, if your device capability is lower but Fooocus still works.)&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operating System&lt;/th&gt;
&lt;th&gt;GPU&lt;/th&gt;
&lt;th&gt;Minimal GPU Memory&lt;/th&gt;
&lt;th&gt;Minimal System Memory&lt;/th&gt;
&lt;th&gt;&lt;a href="//troubleshoot.md"&gt;System Swap&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Windows/Linux&lt;/td&gt;
&lt;td&gt;Nvidia RTX 4XXX&lt;/td&gt;
&lt;td&gt;4GB&lt;/td&gt;
&lt;td&gt;8GB&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;fastest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows/Linux&lt;/td&gt;
&lt;td&gt;Nvidia RTX 3XXX&lt;/td&gt;
&lt;td&gt;4GB&lt;/td&gt;
&lt;td&gt;8GB&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;usually faster than RTX 2XXX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows/Linux&lt;/td&gt;
&lt;td&gt;Nvidia RTX 2XXX&lt;/td&gt;
&lt;td&gt;4GB&lt;/td&gt;
&lt;td&gt;8GB&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;usually faster than GTX 1XXX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows/Linux&lt;/td&gt;
&lt;td&gt;Nvidia GTX 1XXX&lt;/td&gt;
&lt;td&gt;8GB (&amp;amp;ast; 6GB uncertain)&lt;/td&gt;
&lt;td&gt;8GB&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;only marginally faster than CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows/Linux&lt;/td&gt;
&lt;td&gt;Nvidia GTX 9XX&lt;/td&gt;
&lt;td&gt;8GB&lt;/td&gt;
&lt;td&gt;8GB&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;faster or slower than CPU&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows/Linux&lt;/td&gt;
&lt;td&gt;Nvidia GTX &amp;lt; 9XX&lt;/td&gt;
&lt;td&gt;Not supported&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;td&gt;/&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;AMD GPU&lt;/td&gt;
&lt;td&gt;8GB    (updated 2023 Dec 30)&lt;/td&gt;
&lt;td&gt;8GB&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;via DirectML (&amp;amp;ast; ROCm is on hold), about 3x slower than Nvidia RTX 3XXX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;AMD GPU&lt;/td&gt;
&lt;td&gt;8GB&lt;/td&gt;
&lt;td&gt;8GB&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;via ROCm, about 1.5x slower than Nvidia RTX 3XXX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mac&lt;/td&gt;
&lt;td&gt;M1/M2 MPS&lt;/td&gt;
&lt;td&gt;Shared&lt;/td&gt;
&lt;td&gt;Shared&lt;/td&gt;
&lt;td&gt;Shared&lt;/td&gt;
&lt;td&gt;about 9x slower than Nvidia RTX 3XXX&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows/Linux/Mac&lt;/td&gt;
&lt;td&gt;only use CPU&lt;/td&gt;
&lt;td&gt;0GB&lt;/td&gt;
&lt;td&gt;32GB&lt;/td&gt;
&lt;td&gt;Required&lt;/td&gt;
&lt;td&gt;about 17x slower than Nvidia RTX 3XXX&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&amp;amp;ast; AMD GPU ROCm (on hold): The AMD is still working on supporting ROCm on Windows.&lt;/p&gt;

&lt;p&gt;&amp;amp;ast; Nvidia GTX 1XXX 6GB uncertain: Some people report 6GB success on GTX 10XX, but some other people report failure cases.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note that Fooocus is only for extremely high quality image generating. We will not support smaller models to reduce the requirement and sacrifice result quality.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshoot
&lt;/h2&gt;

&lt;p&gt;See the common problems &lt;a href="//troubleshoot.md"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Default Models
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Given different goals, the default models and configs of Fooocus are different:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Windows&lt;/th&gt;
&lt;th&gt;Linux args&lt;/th&gt;
&lt;th&gt;Main Model&lt;/th&gt;
&lt;th&gt;Refiner&lt;/th&gt;
&lt;th&gt;Config&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;General&lt;/td&gt;
&lt;td&gt;run.bat&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;juggernautXL_v8Rundiffusion&lt;/td&gt;
&lt;td&gt;not used&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/lllyasviel/Fooocus/blob/main/presets/default.json" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Realistic&lt;/td&gt;
&lt;td&gt;run_realistic.bat&lt;/td&gt;
&lt;td&gt;--preset realistic&lt;/td&gt;
&lt;td&gt;realisticStockPhoto_v20&lt;/td&gt;
&lt;td&gt;not used&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/lllyasviel/Fooocus/blob/main/presets/realistic.json" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anime&lt;/td&gt;
&lt;td&gt;run_anime.bat&lt;/td&gt;
&lt;td&gt;--preset anime&lt;/td&gt;
&lt;td&gt;animaPencilXL_v500&lt;/td&gt;
&lt;td&gt;not used&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/lllyasviel/Fooocus/blob/main/presets/anime.json" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Note that the download is &lt;strong&gt;automatic&lt;/strong&gt; - you do not need to do anything if the internet connection is okay. However, you can download them manually if you (or move them from somewhere else) have your own preparation.&lt;/p&gt;

&lt;h2&gt;
  
  
  UI Access and Authentication
&lt;/h2&gt;

&lt;p&gt;In addition to running on localhost, Fooocus can also expose its UI in two ways: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Local UI listener: use &lt;code&gt;--listen&lt;/code&gt; (specify port e.g. with &lt;code&gt;--port 8888&lt;/code&gt;). &lt;/li&gt;
&lt;li&gt;API access: use &lt;code&gt;--share&lt;/code&gt; (registers an endpoint at &lt;code&gt;.gradio.live&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In both ways the access is unauthenticated by default. You can add basic authentication by creating a file called &lt;code&gt;auth.json&lt;/code&gt; in the main directory, which contains a list of JSON objects with the keys &lt;code&gt;user&lt;/code&gt; and &lt;code&gt;pass&lt;/code&gt; (see example in &lt;a href="//./auth-example.json"&gt;auth-example.json&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  List of "Hidden" Tricks
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click to see a list of tricks. Those are based on SDXL and are not very up-to-date with latest models.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;GPT2-based &lt;a href="https://github.com/lllyasviel/Fooocus/discussions/117#raw" rel="noopener noreferrer"&gt;prompt expansion as a dynamic style "Fooocus V2".&lt;/a&gt; (similar to Midjourney's hidden pre-processing and "raw" mode, or the LeonardoAI's Prompt Magic).&lt;/li&gt;
&lt;li&gt;Native refiner swap inside one single k-sampler. The advantage is that the refiner model can now reuse the base model's momentum (or ODE's history parameters) collected from k-sampling to achieve more coherent sampling. In Automatic1111's high-res fix and ComfyUI's node system, the base model and refiner use two independent k-samplers, which means the momentum is largely wasted, and the sampling continuity is broken. Fooocus uses its own advanced k-diffusion sampling that ensures seamless, native, and continuous swap in a refiner setup. (Update Aug 13: Actually, I discussed this with Automatic1111 several days ago, and it seems that the “native refiner swap inside one single k-sampler” is &lt;a href="https://github.com/AUTOMATIC1111/stable-diffusion-webui/pull/12371" rel="noopener noreferrer"&gt;merged&lt;/a&gt; into the dev branch of webui. Great!)&lt;/li&gt;
&lt;li&gt;Negative ADM guidance. Because the highest resolution level of XL Base does not have cross attentions, the positive and negative signals for XL's highest resolution level cannot receive enough contrasts during the CFG sampling, causing the results to look a bit plastic or overly smooth in certain cases. Fortunately, since the XL's highest resolution level is still conditioned on image aspect ratios (ADM), we can modify the adm on the positive/negative side to compensate for the lack of CFG contrast in the highest resolution level. (Update Aug 16, the IOS App &lt;a href="https://apps.apple.com/us/app/draw-things-ai-generation/id6444050820" rel="noopener noreferrer"&gt;Draw Things&lt;/a&gt; will support Negative ADM Guidance. Great!)&lt;/li&gt;
&lt;li&gt;We implemented a carefully tuned variation of Section 5.1 of &lt;a href="https://arxiv.org/pdf/2210.00939.pdf" rel="noopener noreferrer"&gt;"Improving Sample Quality of Diffusion Models Using Self-Attention Guidance"&lt;/a&gt;. The weight is set to very low, but this is Fooocus's final guarantee to make sure that the XL will never yield an overly smooth or plastic appearance (examples &lt;a href="https://github.com/lllyasviel/Fooocus/discussions/117#sharpness" rel="noopener noreferrer"&gt;here&lt;/a&gt;). This can almost eliminate all cases for which XL still occasionally produces overly smooth results, even with negative ADM guidance. (Update 2023 Aug 18, the Gaussian kernel of SAG is changed to an anisotropic kernel for better structure preservation and fewer artifacts.)&lt;/li&gt;
&lt;li&gt;We modified the style templates a bit and added the "cinematic-default".&lt;/li&gt;
&lt;li&gt;We tested the "sd_xl_offset_example-lora_1.0.safetensors" and it seems that when the lora weight is below 0.5, the results are always better than XL without lora.&lt;/li&gt;
&lt;li&gt;The parameters of samplers are carefully tuned.&lt;/li&gt;
&lt;li&gt;Because XL uses positional encoding for generation resolution, images generated by several fixed resolutions look a bit better than those from arbitrary resolutions (because the positional encoding is not very good at handling int numbers that are unseen during training). This suggests that the resolutions in UI may be hard coded for best results.&lt;/li&gt;
&lt;li&gt;Separated prompts for two different text encoders seem unnecessary. Separated prompts for the base model and refiner may work, but the effects are random, and we refrain from implementing this.&lt;/li&gt;
&lt;li&gt;The DPM family seems well-suited for XL since XL sometimes generates overly smooth texture, but the DPM family sometimes generates overly dense detail in texture. Their joint effect looks neutral and appealing to human perception.&lt;/li&gt;
&lt;li&gt;A carefully designed system for balancing multiple styles as well as prompt expansion.&lt;/li&gt;
&lt;li&gt;Using automatic1111's method to normalize prompt emphasizing. This significantly improves results when users directly copy prompts from civitai.&lt;/li&gt;
&lt;li&gt;The joint swap system of the refiner now also supports img2img and upscale in a seamless way.&lt;/li&gt;
&lt;li&gt;CFG Scale and TSNR correction (tuned for SDXL) when CFG is bigger than 10.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Customization
&lt;/h2&gt;

&lt;p&gt;After the first time you run Fooocus, a config file will be generated at &lt;code&gt;Fooocus\config.txt&lt;/code&gt;. This file can be edited to change the model path or default parameters.&lt;/p&gt;

&lt;p&gt;For example, an edited &lt;code&gt;Fooocus\config.txt&lt;/code&gt; (this file will be generated after the first launch) may look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"path_checkpoints"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Fooocus&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;models&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;checkpoints"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"path_loras"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Fooocus&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;models&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;loras"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"path_embeddings"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Fooocus&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;models&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;embeddings"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"path_vae_approx"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Fooocus&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;models&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;vae_approx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"path_upscale_models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Fooocus&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;models&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;upscale_models"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"path_inpaint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Fooocus&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;models&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;inpaint"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"path_controlnet"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Fooocus&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;models&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;controlnet"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"path_clip_vision"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Fooocus&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;models&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;clip_vision"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"path_fooocus_expansion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Fooocus&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;models&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;prompt_expansion&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;fooocus_expansion"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"path_outputs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"D:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Fooocus&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;outputs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"default_model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"realisticStockPhoto_v10.safetensors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"default_refiner"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"default_loras"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="s2"&gt;"lora_filename_1.safetensors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"lora_filename_2.safetensors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"default_cfg_scale"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"default_sampler"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dpmpp_2m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"default_scheduler"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"karras"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"default_negative_prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"low quality"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"default_positive_prompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"default_styles"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"Fooocus V2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"Fooocus Photograph"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"Fooocus Negative"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Many other keys, formats, and examples are in &lt;code&gt;Fooocus\config_modification_tutorial.txt&lt;/code&gt; (this file will be generated after the first launch).&lt;/p&gt;

&lt;p&gt;Consider twice before you really change the config. If you find yourself breaking things, just delete &lt;code&gt;Fooocus\config.txt&lt;/code&gt;. Fooocus will go back to default.&lt;/p&gt;

&lt;p&gt;A safer way is just to try "run_anime.bat" or "run_realistic.bat" - they should already be good enough for different tasks.&lt;/p&gt;

&lt;p&gt;~Note that &lt;code&gt;user_path_config.txt&lt;/code&gt; is deprecated and will be removed soon.~ (Edit: it is already removed.)&lt;/p&gt;

&lt;h3&gt;
  
  
  All CMD Flags
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;entry_with_update.py  [-h] [--listen [IP]] [--port PORT]
                      [--disable-header-check [ORIGIN]]
                      [--web-upload-size WEB_UPLOAD_SIZE]
                      [--hf-mirror HF_MIRROR]
                      [--external-working-path PATH [PATH ...]]
                      [--output-path OUTPUT_PATH]
                      [--temp-path TEMP_PATH] [--cache-path CACHE_PATH]
                      [--in-browser] [--disable-in-browser]
                      [--gpu-device-id DEVICE_ID]
                      [--async-cuda-allocation | --disable-async-cuda-allocation]
                      [--disable-attention-upcast]
                      [--all-in-fp32 | --all-in-fp16]
                      [--unet-in-bf16 | --unet-in-fp16 | --unet-in-fp8-e4m3fn | --unet-in-fp8-e5m2]
                      [--vae-in-fp16 | --vae-in-fp32 | --vae-in-bf16]
                      [--vae-in-cpu]
                      [--clip-in-fp8-e4m3fn | --clip-in-fp8-e5m2 | --clip-in-fp16 | --clip-in-fp32]
                      [--directml [DIRECTML_DEVICE]]
                      [--disable-ipex-hijack]
                      [--preview-option [none,auto,fast,taesd]]
                      [--attention-split | --attention-quad | --attention-pytorch]
                      [--disable-xformers]
                      [--always-gpu | --always-high-vram | --always-normal-vram | --always-low-vram | --always-no-vram | --always-cpu [CPU_NUM_THREADS]]
                      [--always-offload-from-vram]
                      [--pytorch-deterministic] [--disable-server-log]
                      [--debug-mode] [--is-windows-embedded-python]
                      [--disable-server-info] [--multi-user] [--share]
                      [--preset PRESET] [--disable-preset-selection]
                      [--language LANGUAGE]
                      [--disable-offload-from-vram] [--theme THEME]
                      [--disable-image-log] [--disable-analytics]
                      [--disable-metadata] [--disable-preset-download]
                      [--disable-enhance-output-sorting]
                      [--enable-auto-describe-image]
                      [--always-download-new-model]
                      [--rebuild-hash-cache [CPU_NUM_THREADS]]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Inline Prompt Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Wildcards
&lt;/h3&gt;

&lt;p&gt;Example prompt: &lt;code&gt;__color__ flower&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Processed for positive and negative prompt.&lt;/p&gt;

&lt;p&gt;Selects a random wildcard from a predefined list of options, in this case the &lt;code&gt;wildcards/color.txt&lt;/code&gt; file. &lt;br&gt;
The wildcard will be replaced with a random color (randomness based on seed). &lt;br&gt;
You can also disable randomness and process a wildcard file from top to bottom by enabling the checkbox &lt;code&gt;Read wildcards in order&lt;/code&gt; in Developer Debug Mode.&lt;/p&gt;

&lt;p&gt;Wildcards can be nested and combined, and multiple wildcards can be used in the same prompt (example see &lt;code&gt;wildcards/color_flower.txt&lt;/code&gt;).&lt;/p&gt;
&lt;h3&gt;
  
  
  Array Processing
&lt;/h3&gt;

&lt;p&gt;Example prompt: &lt;code&gt;[[red, green, blue]] flower&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Processed only for positive prompt.&lt;/p&gt;

&lt;p&gt;Processes the array from left to right, generating a separate image for each element in the array. In this case 3 images would be generated, one for each color.&lt;br&gt;
Increase the image number to 3 to generate all 3 variants.&lt;/p&gt;

&lt;p&gt;Arrays can not be nested, but multiple arrays can be used in the same prompt.&lt;br&gt;
Does support inline LoRAs as array elements!&lt;/p&gt;
&lt;h3&gt;
  
  
  Inline LoRAs
&lt;/h3&gt;

&lt;p&gt;Example prompt: &lt;code&gt;flower &amp;lt;lora:sunflowers:1.2&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Processed only for positive prompt.&lt;/p&gt;

&lt;p&gt;Applies a LoRA to the prompt. The LoRA file must be located in the &lt;code&gt;models/loras&lt;/code&gt; directory.&lt;/p&gt;
&lt;h2&gt;
  
  
  Advanced Features
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/lllyasviel/Fooocus/discussions/117" rel="noopener noreferrer"&gt;Click here to browse the advanced features.&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Forks
&lt;/h2&gt;

&lt;p&gt;Below are some Forks to Fooocus:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fooocus' forks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;a href="https://github.com/fenneishi/Fooocus-Control" rel="noopener noreferrer"&gt;fenneishi/Fooocus-Control&lt;/a&gt; &lt;a href="https://github.com/runew0lf/RuinedFooocus" rel="noopener noreferrer"&gt;runew0lf/RuinedFooocus&lt;/a&gt;  &lt;a href="https://github.com/MoonRide303/Fooocus-MRE" rel="noopener noreferrer"&gt;MoonRide303/Fooocus-MRE&lt;/a&gt;  &lt;a href="https://github.com/mashb1t/Fooocus" rel="noopener noreferrer"&gt;mashb1t/Fooocus&lt;/a&gt;  and so on ...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  Thanks
&lt;/h2&gt;

&lt;p&gt;Many thanks to &lt;a href="https://github.com/twri" rel="noopener noreferrer"&gt;twri&lt;/a&gt; and &lt;a href="https://github.com/3Diva" rel="noopener noreferrer"&gt;3Diva&lt;/a&gt; and &lt;a href="https://github.com/K3nt3L" rel="noopener noreferrer"&gt;Marc K3nt3L&lt;/a&gt; for creating additional SDXL styles available in Fooocus. &lt;/p&gt;

&lt;p&gt;The project starts from a mixture of &lt;a href="https://github.com/AUTOMATIC1111/stable-diffusion-webui" rel="noopener noreferrer"&gt;Stable Diffusion WebUI&lt;/a&gt; and &lt;a href="https://github.com/comfyanonymous/ComfyUI" rel="noopener noreferrer"&gt;ComfyUI&lt;/a&gt; codebases.&lt;/p&gt;

&lt;p&gt;Also, thanks &lt;a href="https://github.com/daswer123" rel="noopener noreferrer"&gt;daswer123&lt;/a&gt; for contributing the Canvas Zoom!&lt;/p&gt;
&lt;h2&gt;
  
  
  Update Log
&lt;/h2&gt;

&lt;p&gt;The log is &lt;a href="//update_log.md"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Localization/Translation/I18N
&lt;/h2&gt;

&lt;p&gt;You can put json files in the &lt;code&gt;language&lt;/code&gt; folder to translate the user interface.&lt;/p&gt;

&lt;p&gt;For example, below is the content of &lt;code&gt;Fooocus/language/example.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Generate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"生成"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Input Image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"入力画像"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Advanced"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"고급"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"SAI 3D Model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SAI 3D Modèle"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you add &lt;code&gt;--language example&lt;/code&gt; arg, Fooocus will read &lt;code&gt;Fooocus/language/example.json&lt;/code&gt; to translate the UI.&lt;/p&gt;

&lt;p&gt;For example, you can edit the ending line of Windows &lt;code&gt;run.bat&lt;/code&gt; as&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.\python_embeded\python.exe -s Fooocus\entry_with_update.py --language example
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Or &lt;code&gt;run_anime.bat&lt;/code&gt; as&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.\python_embeded\python.exe -s Fooocus\entry_with_update.py --language example --preset anime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Or &lt;code&gt;run_realistic.bat&lt;/code&gt; as&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.\python_embeded\python.exe -s Fooocus\entry_with_update.py --language example --preset realistic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;For practical translation, you may create your own file like &lt;code&gt;Fooocus/language/jp.json&lt;/code&gt; or &lt;code&gt;Fooocus/language/cn.json&lt;/code&gt; and then use flag &lt;code&gt;--language jp&lt;/code&gt; or &lt;code&gt;--language cn&lt;/code&gt;. Apparently, these files do not exist now. &lt;strong&gt;We need your help to create these files!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Note that if no &lt;code&gt;--language&lt;/code&gt; is given and at the same time &lt;code&gt;Fooocus/language/default.json&lt;/code&gt; exists, Fooocus will always load &lt;code&gt;Fooocus/language/default.json&lt;/code&gt; for translation. By default, the file &lt;code&gt;Fooocus/language/default.json&lt;/code&gt; does not exist.&lt;/p&gt;

</description>
      <category>fooocus</category>
    </item>
    <item>
      <title>waf-fle</title>
      <dc:creator>classccai</dc:creator>
      <pubDate>Fri, 24 Apr 2026 06:52:30 +0000</pubDate>
      <link>https://dev.to/classccai/waf-fle-4ba8</link>
      <guid>https://dev.to/classccai/waf-fle-4ba8</guid>
      <description>&lt;h1&gt;
  
  
  WAF-FLE - Readme
&lt;/h1&gt;

&lt;p&gt;Web Application Firewall: Fast Log and Event Console&lt;/p&gt;

&lt;p&gt;Copyright (C) 2011 - 2014  Klaubert Herr &lt;br&gt;
   For new (released) versions, check at &lt;a href="http://waf-fle.org" rel="noopener noreferrer"&gt;http://waf-fle.org&lt;/a&gt;&lt;br&gt;
   WAF-FLE is relased under GPL v2 License&lt;/p&gt;

&lt;h2&gt;
  
  
  SUMMARY:
&lt;/h2&gt;

&lt;p&gt;WAF-FLE is a OpenSource ModSecurity Console, allows modsecurity admin&lt;br&gt;
to store, view and search events sent by sensors using a graphical &lt;br&gt;
dashboard to drill-down and find quickly the most relevant events. It&lt;br&gt;
is designed to be fast and flexible, while keeping a powerful and easy&lt;br&gt;
to use filter, with almost all fields clickable to use on filter.&lt;/p&gt;

&lt;p&gt;Features&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Central event console&lt;/li&gt;
&lt;li&gt;Support Modsecurity in “traditional” and “Anomaly Scoring”&lt;/li&gt;
&lt;li&gt;Brings mlog2waffle as a replacement to mlogc&lt;/li&gt;
&lt;li&gt;Receive events using mlog2waffle or mlogc

&lt;ul&gt;
&lt;li&gt;mlog2waffle: in real-time, following log tail, or batch scheduled in crontab&lt;/li&gt;
&lt;li&gt;mlogc: in real-time, piped with ModSecurity log, in batch scheduled in crontab&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;No sensor limit&lt;/li&gt;

&lt;li&gt;Drill down of events with filter&lt;/li&gt;

&lt;li&gt;Dashboard with recent events information&lt;/li&gt;

&lt;li&gt;Almost every event data and charts are “clickable” deepening the drill down filter&lt;/li&gt;

&lt;li&gt;Inverted filter (to filter for “all but this item”)&lt;/li&gt;

&lt;li&gt;Filter for network (in CIDR format, x.x.x.x/22)&lt;/li&gt;

&lt;li&gt;Original format (Raw) to event download&lt;/li&gt;

&lt;li&gt;Use Mysql as database&lt;/li&gt;

&lt;li&gt;Wizard to help configure log feed between ModSecurity sensors and WAF-FLE&lt;/li&gt;

&lt;li&gt;Open Source released under GPL v2&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>waf</category>
      <category>fle</category>
    </item>
    <item>
      <title>gh ost</title>
      <dc:creator>classccai</dc:creator>
      <pubDate>Fri, 24 Apr 2026 06:41:17 +0000</pubDate>
      <link>https://dev.to/classccai/gh-ost-49d0</link>
      <guid>https://dev.to/classccai/gh-ost-49d0</guid>
      <description>&lt;p&gt;&lt;code&gt;gh-ost&lt;/code&gt; is a triggerless online schema migration solution for MySQL. It is testable and provides pausability, dynamic control/reconfiguration, auditing, and many operational perks.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gh-ost&lt;/code&gt; produces a light workload on the master throughout the migration, decoupled from the existing workload on the migrated table.&lt;/p&gt;

&lt;p&gt;It has been designed based on years of experience with existing solutions, and changes the paradigm of table migrations.&lt;/p&gt;

&lt;h2&gt;
  
  
  How?
&lt;/h2&gt;

&lt;p&gt;All existing online-schema-change tools operate in similar manner: they create a &lt;em&gt;ghost&lt;/em&gt; table in the likeness of your original table, migrate that table while empty, slowly and incrementally copy data from your original table to the &lt;em&gt;ghost&lt;/em&gt; table, meanwhile propagating ongoing changes (any &lt;code&gt;INSERT&lt;/code&gt;, &lt;code&gt;DELETE&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt; applied to your table) to the &lt;em&gt;ghost&lt;/em&gt; table. Finally, at the right time, they replace your original table with the &lt;em&gt;ghost&lt;/em&gt; table.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gh-ost&lt;/code&gt; uses the same pattern. However it differs from all existing tools by not using triggers. We have recognized the triggers to be the source of &lt;a href="//doc/why-triggerless.md"&gt;many limitations and risks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Instead, &lt;code&gt;gh-ost&lt;/code&gt; &lt;a href="//doc/triggerless-design.md"&gt;uses the binary log stream&lt;/a&gt; to capture table changes, and asynchronously applies them onto the &lt;em&gt;ghost&lt;/em&gt; table. &lt;code&gt;gh-ost&lt;/code&gt; takes upon itself some tasks that other tools leave for the database to perform. As result, &lt;code&gt;gh-ost&lt;/code&gt; has greater control over the migration process; can truly suspend it; can truly decouple the migration's write load from the master's workload.&lt;/p&gt;

&lt;p&gt;In addition, it offers many &lt;a href="//doc/perks.md"&gt;operational perks&lt;/a&gt; that make it safer, trustworthy and fun to use.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/doc%2Fimages%2Fgh-ost-general-flow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/doc%2Fimages%2Fgh-ost-general-flow.png" alt="gh-ost general flow" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Highlights
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Build your trust in &lt;code&gt;gh-ost&lt;/code&gt; by testing it on replicas. &lt;code&gt;gh-ost&lt;/code&gt; will issue same flow as it would have on the master, to migrate a table on a replica, without actually replacing the original table, leaving the replica with two tables you can then compare and satisfy yourself that the tool operates correctly. This is how we continuously test &lt;code&gt;gh-ost&lt;/code&gt; in production.&lt;/li&gt;
&lt;li&gt;True pause: when &lt;code&gt;gh-ost&lt;/code&gt; &lt;a href="//doc/throttle.md"&gt;throttles&lt;/a&gt;, it truly ceases writes on master: no row copies and no ongoing events processing. By throttling, you return your master to its original workload&lt;/li&gt;
&lt;li&gt;Dynamic control: you can &lt;a href="//doc/interactive-commands.md"&gt;interactively&lt;/a&gt; reconfigure &lt;code&gt;gh-ost&lt;/code&gt;, even as migration still runs. You may forcibly initiate throttling.&lt;/li&gt;
&lt;li&gt;Auditing: you may query &lt;code&gt;gh-ost&lt;/code&gt; for status. &lt;code&gt;gh-ost&lt;/code&gt; listens on unix socket or TCP.&lt;/li&gt;
&lt;li&gt;Control over cut-over phase: &lt;code&gt;gh-ost&lt;/code&gt; can be instructed to postpone what is probably the most critical step: the swap of tables, until such time that you're comfortably available. No need to worry about ETA being outside office hours.&lt;/li&gt;
&lt;li&gt;External &lt;a href="//doc/hooks.md"&gt;hooks&lt;/a&gt; can couple &lt;code&gt;gh-ost&lt;/code&gt; with your particular environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please refer to the &lt;a href="https://dev.todoc"&gt;docs&lt;/a&gt; for more information. No, really, read the &lt;a href="https://dev.todoc"&gt;docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="//doc/cheatsheet.md"&gt;cheatsheet&lt;/a&gt; has it all. You may be interested in invoking &lt;code&gt;gh-ost&lt;/code&gt; in various modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a &lt;em&gt;noop&lt;/em&gt; migration (merely testing that the migration is valid and good to go)&lt;/li&gt;
&lt;li&gt;a real migration, utilizing a replica (the migration runs on the master; &lt;code&gt;gh-ost&lt;/code&gt; figures out identities of servers involved. Required mode if your master uses Statement Based Replication)&lt;/li&gt;
&lt;li&gt;a real migration, run directly on the master (but &lt;code&gt;gh-ost&lt;/code&gt; prefers the former)&lt;/li&gt;
&lt;li&gt;a real migration on a replica (master untouched)&lt;/li&gt;
&lt;li&gt;a test migration on a replica, the way for you to build trust with &lt;code&gt;gh-ost&lt;/code&gt;'s operation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="//doc/testing-on-replica.md"&gt;Testing above all&lt;/a&gt;, try out &lt;code&gt;--test-on-replica&lt;/code&gt; first few times. Better yet, make it continuous. We have multiple replicas where we iterate our entire fleet of production tables, migrating them one by one, checksumming the results, verifying migration is good.&lt;/li&gt;
&lt;li&gt;For each master migration, first issue a &lt;em&gt;noop&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Then issue the real thing via &lt;code&gt;--execute&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;--exact-rowcount&lt;/code&gt; for accurate progress indication&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;--postpone-cut-over-flag-file&lt;/code&gt; to gain control over cut-over timing&lt;/li&gt;
&lt;li&gt;Get familiar with the &lt;a href="//doc/interactive-commands.md"&gt;interactive commands&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="//doc/requirements-and-limitations.md"&gt;requirements and limitations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//doc/questions.md"&gt;common questions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//doc/what-if.md"&gt;what if?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//doc/the-fine-print.md"&gt;the fine print&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/github/gh-ost/issues?q=label%3Aquestion" rel="noopener noreferrer"&gt;Community questions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//doc/rds.md"&gt;Using &lt;code&gt;gh-ost&lt;/code&gt; on AWS RDS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="//doc/azure.md"&gt;Using &lt;code&gt;gh-ost&lt;/code&gt; on Azure Database for MySQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's in a name?
&lt;/h2&gt;

&lt;p&gt;Originally this was named &lt;code&gt;gh-osc&lt;/code&gt;: GitHub Online Schema Change, in the likes of &lt;a href="https://www.facebook.com/notes/mysql-at-facebook/online-schema-change-for-mysql/430801045932/" rel="noopener noreferrer"&gt;Facebook online schema change&lt;/a&gt; and &lt;a href="https://www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html" rel="noopener noreferrer"&gt;pt-online-schema-change&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But then a rare genetic mutation happened, and the &lt;code&gt;c&lt;/code&gt; transformed into &lt;code&gt;t&lt;/code&gt;. And that sent us down the path of trying to figure out a new acronym. &lt;code&gt;gh-ost&lt;/code&gt; (pronounce: &lt;em&gt;Ghost&lt;/em&gt;), stands for GitHub's Online Schema Transmogrifier/Translator/Transformer/Transfigurator&lt;/p&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;gh-ost&lt;/code&gt; is licensed under the &lt;a href="https://github.com/github/gh-ost/blob/master/LICENSE" rel="noopener noreferrer"&gt;MIT license&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gh-ost&lt;/code&gt; uses 3rd party libraries, each with their own license. These are found &lt;a href="https://github.com/github/gh-ost/tree/master/vendor" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;gh-ost&lt;/code&gt; is released at a stable state, but with mileage to go. We are &lt;a href="https://github.com/github/gh-ost/blob/master/.github/CONTRIBUTING.md" rel="noopener noreferrer"&gt;open to pull requests&lt;/a&gt;. Please first discuss your intentions via &lt;a href="https://github.com/github/gh-ost/issues" rel="noopener noreferrer"&gt;Issues&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We develop &lt;code&gt;gh-ost&lt;/code&gt; at GitHub and for the community. We may have different priorities than others. From time to time we may suggest a contribution that is not on our immediate roadmap but which may appeal to others.&lt;/p&gt;

&lt;p&gt;Please see &lt;a href="//doc/coding-ghost.md"&gt;Coding gh-ost&lt;/a&gt; for a guide to getting started developing with gh-ost.&lt;/p&gt;

&lt;h2&gt;
  
  
  Download/binaries/source
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;gh-ost&lt;/code&gt; is now GA and stable.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gh-ost&lt;/code&gt; is available in binary format for Linux and Mac OS/X&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/github/gh-ost/releases/latest" rel="noopener noreferrer"&gt;Download latest release here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gh-ost&lt;/code&gt; is a Go project; it is built with Go &lt;code&gt;1.15&lt;/code&gt; and above. To build on your own, use either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/github/gh-ost/blob/master/script/build" rel="noopener noreferrer"&gt;script/build&lt;/a&gt; - this is the same build script used by CI hence the authoritative; artifact is &lt;code&gt;./bin/gh-ost&lt;/code&gt; binary.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/github/gh-ost/blob/master/build.sh" rel="noopener noreferrer"&gt;build.sh&lt;/a&gt; for building &lt;code&gt;tar.gz&lt;/code&gt; artifacts in &lt;code&gt;/tmp/gh-ost-release&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Generally speaking, &lt;code&gt;master&lt;/code&gt; branch is stable, but only &lt;a href="https://github.com/github/gh-ost/releases" rel="noopener noreferrer"&gt;releases&lt;/a&gt; are to be used in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Authors
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;gh-ost&lt;/code&gt; is designed, authored, reviewed and tested by the database infrastructure team at GitHub:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/jonahberquist" rel="noopener noreferrer"&gt;@jonahberquist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/ggunson" rel="noopener noreferrer"&gt;@ggunson&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tomkrouper" rel="noopener noreferrer"&gt;@tomkrouper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/shlomi-noach" rel="noopener noreferrer"&gt;@shlomi-noach&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jessbreckenridge" rel="noopener noreferrer"&gt;@jessbreckenridge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/gtowey" rel="noopener noreferrer"&gt;@gtowey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/timvaillancourt" rel="noopener noreferrer"&gt;@timvaillancourt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gh</category>
      <category>ost</category>
    </item>
    <item>
      <title>openstock</title>
      <dc:creator>classccai</dc:creator>
      <pubDate>Fri, 24 Apr 2026 06:40:09 +0000</pubDate>
      <link>https://dev.to/classccai/openstock-2mn3</link>
      <guid>https://dev.to/classccai/openstock-2mn3</guid>
      <description>&lt;p&gt;OpenStock is an open-source alternative to expensive market platforms. Track real-time prices, set personalized alerts, and explore detailed company insights — built openly, for everyone, forever free.&lt;/p&gt;

&lt;p&gt;Note: OpenStock is community-built and not a brokerage. Market data may be delayed based on provider rules and your configuration. Nothing here is financial advice.&lt;/p&gt;

&lt;h2&gt;
  
  
  📋 Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;✨ Introduction
&lt;/li&gt;
&lt;li&gt;🌍 Open Dev Society Manifesto
&lt;/li&gt;
&lt;li&gt;⚙️ Tech Stack
&lt;/li&gt;
&lt;li&gt;🔋 Features
&lt;/li&gt;
&lt;li&gt;🤸 Quick Start
&lt;/li&gt;
&lt;li&gt;🐳 Docker Setup
&lt;/li&gt;
&lt;li&gt;🔐 Environment Variables
&lt;/li&gt;
&lt;li&gt;🧱 Project Structure
&lt;/li&gt;
&lt;li&gt;📡 Data &amp;amp; Integrations
&lt;/li&gt;
&lt;li&gt;🧪 Scripts &amp;amp; Tooling
&lt;/li&gt;
&lt;li&gt;🤝 Contributing
&lt;/li&gt;
&lt;li&gt;🛡️ Security
&lt;/li&gt;
&lt;li&gt;📜 License
&lt;/li&gt;
&lt;li&gt;🙏 Acknowledgements
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  ✨ Introduction &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;OpenStock is a modern stock market app powered by Next.js (App Router), shadcn/ui and Tailwind CSS, Better Auth for authentication, MongoDB for persistence, Finnhub for market data, and TradingView widgets for charts and market views.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌍 Open Dev Society Manifesto &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;We live in a world where knowledge is hidden behind paywalls. Where tools are locked in subscriptions. Where information is twisted by bias. Where newcomers are told they’re not “good enough” to build.&lt;/p&gt;

&lt;p&gt;We believe there’s a better way.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Our Belief: Technology should belong to everyone. Knowledge should be open, free, and accessible. Communities should welcome newcomers with trust, not gatekeeping.&lt;/li&gt;
&lt;li&gt;Our Mission: Build free, open-source projects that make a real difference:

&lt;ul&gt;
&lt;li&gt;Tools that professionals and students can use without barriers.&lt;/li&gt;
&lt;li&gt;Knowledge platforms where learning is free, forever.&lt;/li&gt;
&lt;li&gt;Communities where every beginner is guided, not judged.&lt;/li&gt;
&lt;li&gt;Resources that run on trust, not profit.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Our Promise: We will never lock knowledge. We will never charge for access. We will never trade trust for money. We run on transparency, donations, and the strength of our community.&lt;/li&gt;

&lt;li&gt;Our Call: If you’ve ever felt you didn’t belong, struggled to find free resources, or wanted to build something meaningful — you belong here.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Because the future belongs to those who build it openly.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚙️ Tech Stack &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Core&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js 15 (App Router), React 19&lt;/li&gt;
&lt;li&gt;TypeScript&lt;/li&gt;
&lt;li&gt;Tailwind CSS v4 (via &lt;a class="mentioned-user" href="https://dev.to/tailwindcss"&gt;@tailwindcss&lt;/a&gt;/postcss)&lt;/li&gt;
&lt;li&gt;shadcn/ui + Radix UI primitives&lt;/li&gt;
&lt;li&gt;Lucide icons&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Auth &amp;amp; Data&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better Auth (email/password) with MongoDB adapter&lt;/li&gt;
&lt;li&gt;MongoDB + Mongoose&lt;/li&gt;
&lt;li&gt;Finnhub API for symbols, profiles, and market news&lt;/li&gt;
&lt;li&gt;TradingView embeddable widgets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Automation &amp;amp; Comms&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inngest (events, cron, AI inference via Gemini)&lt;/li&gt;
&lt;li&gt;Nodemailer (Gmail transport)&lt;/li&gt;
&lt;li&gt;next-themes, cmdk (command palette), react-hook-form&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Language composition&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript (~93.4%), CSS (~6%), JavaScript (~0.6%)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔋 Features &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Authentication

&lt;ul&gt;
&lt;li&gt;Email/password auth with Better Auth + MongoDB adapter&lt;/li&gt;
&lt;li&gt;Protected routes enforced via Next.js middleware&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Global search and Command + K palette

&lt;ul&gt;
&lt;li&gt;Fast stock search backed by Finnhub&lt;/li&gt;
&lt;li&gt;Popular stocks when idle; debounced querying&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Watchlist

&lt;ul&gt;
&lt;li&gt;Per-user watchlist stored in MongoDB (unique symbol per user)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Stock details

&lt;ul&gt;
&lt;li&gt;TradingView symbol info, candlestick/advanced charts, baseline, technicals&lt;/li&gt;
&lt;li&gt;Company profile and financials widgets&lt;/li&gt;
&lt;li&gt;Optional cross-source sentiment insights for Reddit, X.com, news, and Polymarket&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Market overview

&lt;ul&gt;
&lt;li&gt;Heatmap, quotes, and top stories (TradingView widgets)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Personalized onboarding

&lt;ul&gt;
&lt;li&gt;Collects country, investment goals, risk tolerance, preferred industry&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Email &amp;amp; automation

&lt;ul&gt;
&lt;li&gt;AI-personalized welcome email (Gemini via Inngest)&lt;/li&gt;
&lt;li&gt;Daily news summary emails (cron) personalized using user watchlists&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Polished UI

&lt;ul&gt;
&lt;li&gt;shadcn/ui components, Radix primitives, Tailwind v4 design tokens&lt;/li&gt;
&lt;li&gt;Dark theme by default&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Keyboard shortcut

&lt;ul&gt;
&lt;li&gt;Cmd/Ctrl + K for quick actions/search&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  🤸 Quick Start &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Prerequisites&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js 20+ and pnpm or npm&lt;/li&gt;
&lt;li&gt;MongoDB connection string (MongoDB Atlas or local via Docker Compose)&lt;/li&gt;
&lt;li&gt;Finnhub API key (free tier supported; real-time may require paid)&lt;/li&gt;
&lt;li&gt;Gmail account for email (or update Nodemailer transport)&lt;/li&gt;
&lt;li&gt;Optional: Google Gemini API key (for AI-generated welcome intros)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clone and install&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/Open-Dev-Society/OpenStock.git
&lt;span class="nb"&gt;cd &lt;/span&gt;OpenStock

&lt;span class="c"&gt;# choose one:&lt;/span&gt;
pnpm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="c"&gt;# or&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure environment&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a &lt;code&gt;.env&lt;/code&gt; file (see Environment Variables).&lt;/li&gt;
&lt;li&gt;Verify DB connectivity:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm &lt;span class="nb"&gt;test&lt;/span&gt;:db
&lt;span class="c"&gt;# or&lt;/span&gt;
npm run &lt;span class="nb"&gt;test&lt;/span&gt;:db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run development&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Next.js dev (Turbopack)&lt;/span&gt;
pnpm dev
&lt;span class="c"&gt;# or&lt;/span&gt;
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run Inngest locally (workflows, cron, AI)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx inngest-cli@latest dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Build &amp;amp; start (production)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pnpm build &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pnpm start
&lt;span class="c"&gt;# or&lt;/span&gt;
npm run build &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt; to view the app.&lt;/p&gt;

&lt;h2&gt;
  
  
  🐳 Docker Setup &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;You can run OpenStock and MongoDB easily with Docker Compose.&lt;/p&gt;

&lt;p&gt;1) Ensure Docker and Docker Compose are installed.&lt;/p&gt;

&lt;p&gt;2) docker-compose.yml includes two services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;openstock (this app)&lt;/li&gt;
&lt;li&gt;mongodb (MongoDB database with a persistent volume)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3) Create your &lt;code&gt;.env&lt;/code&gt; (see examples below). For the Docker setup, use a local connection string like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MONGODB_URI=mongodb://root:example@mongodb:27017/openstock?authSource=admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4) Start the stack:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# from the repository root&lt;/span&gt;
docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt; mongodb &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker compose up &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--build&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;5) Access the app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App: &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MongoDB is available inside the Docker network at host mongodb:27017&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Notes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The app service depends_on the mongodb service.&lt;/li&gt;
&lt;li&gt;Credentials are defined in Compose for the MongoDB root user; authSource=admin is required on the connection string for root.&lt;/li&gt;
&lt;li&gt;Data persists across restarts via the docker volume.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Optional: Example MongoDB service definition used in this project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mongodb&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mongo:7&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mongodb&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;MONGO_INITDB_ROOT_USERNAME&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;root&lt;/span&gt;
      &lt;span class="na"&gt;MONGO_INITDB_ROOT_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;example&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;27017:27017"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;mongo-data:/data/db&lt;/span&gt;
    &lt;span class="na"&gt;healthcheck&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CMD"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mongosh"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--eval"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;db.adminCommand('ping')"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10s&lt;/span&gt;
      &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;5s&lt;/span&gt;
      &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;

&lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;mongo-data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔐 Environment Variables &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Create &lt;code&gt;.env&lt;/code&gt; at the project root. Choose either a hosted MongoDB (Atlas) URI or the local Docker URI.&lt;/p&gt;

&lt;p&gt;Hosted (MongoDB Atlas):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Core
NODE_ENV=development

# Database (Atlas)
MONGODB_URI=mongodb+srv://&amp;lt;user&amp;gt;:&amp;lt;pass&amp;gt;@&amp;lt;cluster&amp;gt;/&amp;lt;db&amp;gt;?retryWrites=true&amp;amp;w=majority

# Better Auth
BETTER_AUTH_SECRET=your_better_auth_secret
BETTER_AUTH_URL=http://localhost:3000

# Finnhub
# Note: NEXT_PUBLIC_FINNHUB_API_KEY is required for Vercel deployment
NEXT_PUBLIC_FINNHUB_API_KEY=your_finnhub_key
FINNHUB_BASE_URL=https://finnhub.io/api/v1

# Sentiment insights (optional)
ADANOS_API_KEY=your_adanos_api_key
# ADANOS_API_BASE_URL=https://api.adanos.org

# AI Provider (optional, default: "gemini")
# Supported: "gemini", "minimax", "siray"
# AI_PROVIDER=gemini

# Gemini
GEMINI_API_KEY=your_gemini_api_key

# MiniMax (optional, used when AI_PROVIDER=minimax or as fallback)
# Get your key at https://platform.minimaxi.com
# MINIMAX_API_KEY=your_minimax_api_key

# Inngest Signing Key (required for Vercel deployment)
# Get this from your Inngest dashboard: https://app.inngest.com/env/settings/keys
INNGEST_SIGNING_KEY=your_inngest_signing_key

# Email (Nodemailer via Gmail; consider App Passwords if 2FA)
NODEMAILER_EMAIL=youraddress@gmail.com
NODEMAILER_PASSWORD=your_gmail_app_password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Local (Docker Compose) MongoDB:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Core
NODE_ENV=development

# Database (Docker)
MONGODB_URI=mongodb://root:example@mongodb:27017/openstock?authSource=admin

# Better Auth
BETTER_AUTH_SECRET=your_better_auth_secret
BETTER_AUTH_URL=http://localhost:3000

# Finnhub
# Note: NEXT_PUBLIC_FINNHUB_API_KEY is required for Vercel deployment
NEXT_PUBLIC_FINNHUB_API_KEY=your_finnhub_key
FINNHUB_BASE_URL=https://finnhub.io/api/v1

# Sentiment insights (optional)
ADANOS_API_KEY=your_adanos_api_key
# ADANOS_API_BASE_URL=https://api.adanos.org

# AI Provider (optional, default: "gemini")
# Supported: "gemini", "minimax", "siray"
# AI_PROVIDER=gemini

# Gemini
GEMINI_API_KEY=your_gemini_api_key

# MiniMax (optional, used when AI_PROVIDER=minimax or as fallback)
# Get your key at https://platform.minimaxi.com
# MINIMAX_API_KEY=your_minimax_api_key

# Inngest Signing Key (required for Vercel deployment)
# Get this from your Inngest dashboard: https://app.inngest.com/env/settings/keys
INNGEST_SIGNING_KEY=your_inngest_signing_key

# Email (Nodemailer via Gmail; consider App Passwords if 2FA)
NODEMAILER_EMAIL=youraddress@gmail.com
NODEMAILER_PASSWORD=your_gmail_app_password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep private keys server-side whenever possible.&lt;/li&gt;
&lt;li&gt;If using &lt;code&gt;NEXT_PUBLIC_&lt;/code&gt; variables, remember they are exposed to the browser.&lt;/li&gt;
&lt;li&gt;In production, prefer a dedicated SMTP provider over a personal Gmail.&lt;/li&gt;
&lt;li&gt;Do not hardcode secrets in the Dockerfile; use &lt;code&gt;.env&lt;/code&gt; and Compose.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧱 Project Structure &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;app/
  (auth)/
    layout.tsx
    sign-in/page.tsx
    sign-up/page.tsx
  (root)/
    layout.tsx
    page.tsx
    help/page.tsx
    stocks/[symbol]/page.tsx
  api/inngest/route.ts
  globals.css
  layout.tsx
components/
  ui/…          # shadcn/radix primitives (button, dialog, command, input, etc.)
  forms/…       # InputField, SelectField, CountrySelectField, FooterLink
  Header.tsx, Footer.tsx, SearchCommand.tsx, WatchlistButton.tsx, …
database/
  models/watchlist.model.ts
  mongoose.ts
lib/
  actions/…     # server actions (auth, finnhub, user, watchlist)
  better-auth/…
  inngest/…     # client, functions, prompts
  nodemailer/…  # transporter, email templates
  constants.ts, utils.ts
scripts/
  test-db.mjs
types/
  global.d.ts
next.config.ts          # i.ibb.co image domain allowlist
postcss.config.mjs      # Tailwind v4 postcss setup
components.json         # shadcn config
public/assets/images/   # logos and screenshots
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📡 Data &amp;amp; Integrations &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Finnhub&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stock search, company profiles, and market news.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;NEXT_PUBLIC_FINNHUB_API_KEY&lt;/code&gt; and &lt;code&gt;FINNHUB_BASE_URL&lt;/code&gt; (default: &lt;a href="https://finnhub.io/api/v1" rel="noopener noreferrer"&gt;https://finnhub.io/api/v1&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Free tiers may return delayed quotes; respect rate limits and terms.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Adanos sentiment insights (optional)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Structured stock sentiment snapshots across Reddit, X.com, news, and Polymarket.&lt;/li&gt;
&lt;li&gt;Set &lt;code&gt;ADANOS_API_KEY&lt;/code&gt;; optionally override the API host with &lt;code&gt;ADANOS_API_BASE_URL&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Used only for the stock detail sentiment card and does not replace Finnhub or TradingView.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;TradingView&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Embeddable widgets used for charts, heatmap, quotes, and timelines.&lt;/li&gt;
&lt;li&gt;External images from &lt;code&gt;i.ibb.co&lt;/code&gt; are allowlisted in &lt;code&gt;next.config.ts&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Better Auth + MongoDB&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email/password with MongoDB adapter.&lt;/li&gt;
&lt;li&gt;Session validation via middleware; most routes are protected, with public exceptions for &lt;code&gt;sign-in&lt;/code&gt;, &lt;code&gt;sign-up&lt;/code&gt;, assets and Next internals.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Inngest&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Workflows:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;app/user.created&lt;/code&gt; → AI-personalized Welcome Email&lt;/li&gt;
&lt;li&gt;Cron &lt;code&gt;0 12 * * *&lt;/code&gt; → Daily News Summary per user&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Local dev: &lt;code&gt;npx inngest-cli@latest dev&lt;/code&gt;.&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Email (Nodemailer)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gmail transport. Update credentials or switch to your SMTP provider.&lt;/li&gt;
&lt;li&gt;Templates for welcome and news summary emails.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧪 Scripts &amp;amp; Tooling &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Package scripts&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;dev&lt;/code&gt;: Next.js dev server with Turbopack&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;build&lt;/code&gt;: Production build (Turbopack)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;start&lt;/code&gt;: Run production server&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lint&lt;/code&gt;: ESLint&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;test:db&lt;/code&gt;: Validate DB connectivity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developer experience&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TypeScript strict mode&lt;/li&gt;
&lt;li&gt;Tailwind CSS v4 (no separate tailwind.config needed)&lt;/li&gt;
&lt;li&gt;shadcn/ui components with Radix primitives&lt;/li&gt;
&lt;li&gt;cmdk command palette, next-themes, lucide-react icons&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🤝 Contributing &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;You belong here. Whether you’re a student, a self-taught dev, or a seasoned engineer — contributions are welcome.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open an issue to discuss ideas and bugs&lt;/li&gt;
&lt;li&gt;Look for “good first issue” or “help wanted”&lt;/li&gt;
&lt;li&gt;Keep PRs focused; add screenshots for UI changes&lt;/li&gt;
&lt;li&gt;Be kind, guide beginners, no gatekeeping — that’s the ODS way&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛡️ Security &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;If you discover a vulnerability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do not open a public issue&lt;/li&gt;
&lt;li&gt;Email: &lt;a href="mailto:opendevsociety@cc.cc"&gt;&lt;/a&gt;&lt;a href="mailto:opendevsociety@cc.cc"&gt;opendevsociety@cc.cc&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;We'll coordinate responsible disclosure and patch swiftly&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📜 License &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;OpenStock is and will remain free and open for everyone. This project is licensed under the AGPL-3.0 License - see the LICENSE file for details.&lt;/p&gt;

&lt;h2&gt;
  
  
  🙏 Acknowledgements &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Finnhub for accessible market data&lt;/li&gt;
&lt;li&gt;TradingView for embeddable market widgets&lt;/li&gt;
&lt;li&gt;shadcn/ui, Radix UI, Tailwind CSS, Next.js community&lt;/li&gt;
&lt;li&gt;Inngest for dependable background jobs and workflows&lt;/li&gt;
&lt;li&gt;Better Auth for simple and secure authentication&lt;/li&gt;
&lt;li&gt;All contributors who make open tools possible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;— Built openly, for everyone, forever free. Open Dev Society.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;© Open Dev Society. This project is licensed under AGPL-3.0; if you modify, redistribute, or deploy it (including as a web service), you must release your source code under the same license and credit the original authors.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Our Honourable Contributors
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ravixalgorithm" rel="noopener noreferrer"&gt;ravixalgorithm&lt;/a&gt; - Developed the entire application from the ground up, including authentication, UI design, API and AI integration, and deployment.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Priyanshuu00007" rel="noopener noreferrer"&gt;Priyanshuu00007&lt;/a&gt; - Created the official OpenStock logo and contributed to the project’s visual identity.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/chinnsenn" rel="noopener noreferrer"&gt;chinnsenn&lt;/a&gt; - Set up Docker configuration for the repository, ensuring a smooth development and deployment process.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/koevoet1221" rel="noopener noreferrer"&gt;koevoet1221&lt;/a&gt; - Resolved MongoDB Docker build issues, improving the project’s overall stability and reliability.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ettoreciolli1" rel="noopener noreferrer"&gt;ettoreciolli1&lt;/a&gt; - updated Readme&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ❤️ Partners &amp;amp; Backers
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.siray.ai/" rel="noopener noreferrer"&gt;&lt;br&gt;
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/public%2Fassets%2Ficons%2Fsiray.svg" alt="Siray.ai Logo" width="100"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.siray.ai/" rel="noopener noreferrer"&gt;Siray.ai&lt;/a&gt;&lt;/strong&gt; — The robust AI infrastructure backing OpenStock. Siray.ai ensures our market insights never sleep.&lt;/p&gt;

&lt;h2&gt;
  
  
  Special thanks
&lt;/h2&gt;

&lt;p&gt;Huge thanks to &lt;a href="https://github.com/adrianhajdin" rel="noopener noreferrer"&gt;Adrian Hajdin (JavaScript Mastery)&lt;/a&gt; — his excellent Stock Market App tutorial was instrumental in building OpenStock for the open-source community under the Open Dev Society.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/adrianhajdin" rel="noopener noreferrer"&gt;adrianhajdin&lt;/a&gt;&lt;br&gt;
YouTube tutorial: &lt;a href="https://www.youtube.com/watch?v=gu4pafNCXng" rel="noopener noreferrer"&gt;Stock Market App Tutorial&lt;/a&gt;&lt;br&gt;
YouTube channel: &lt;a href="https://www.youtube.com/@javascriptmastery" rel="noopener noreferrer"&gt;JavaScript Mastery&lt;/a&gt;&lt;/p&gt;

</description>
      <category>openstock</category>
    </item>
    <item>
      <title>gl go go-gl</title>
      <dc:creator>classccai</dc:creator>
      <pubDate>Fri, 24 Apr 2026 06:21:28 +0000</pubDate>
      <link>https://dev.to/classccai/gl-go-go-gl-jm6</link>
      <guid>https://dev.to/classccai/gl-go-go-gl-jm6</guid>
      <description>&lt;h1&gt;
  
  
  gl &lt;a href="https://github.com/go-gl/gl/actions/workflows/main.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/go-gl/gl/actions/workflows/main.yml/badge.svg" alt="Build Status"&gt;&lt;/a&gt; &lt;a href="https://pkg.go.dev/github.com/go-gl/gl" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpkg.go.dev%2Fbadge%2Fgithub.com%2Fgo-gl%2Fgl.svg" alt="Go Reference"&gt;&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;This repository holds Go bindings to various OpenGL versions. They are auto-generated using &lt;a href="https://github.com/go-gl/glow" rel="noopener noreferrer"&gt;Glow&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go functions that mirror the C specification using Go types.&lt;/li&gt;
&lt;li&gt;Support for multiple OpenGL APIs (GL/GLES/EGL/WGL/GLX/EGL), versions, and profiles.&lt;/li&gt;
&lt;li&gt;Support for extensions (including debug callbacks).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A cgo compiler (typically gcc).&lt;/li&gt;
&lt;li&gt;On Ubuntu/Debian-based systems, the &lt;code&gt;libgl1-mesa-dev&lt;/code&gt; package.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;Use &lt;code&gt;go get -u&lt;/code&gt; to download and install the prebuilt packages. The prebuilt packages support OpenGL versions 2.1, 3.1, 3.2, 3.3, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6 across both the core and compatibility profiles and include all extensions. Pick whichever one(s) you need:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go get -u github.com/go-gl/gl/v{3.2,3.3,4.1,4.2,4.3,4.4,4.5,4.6}-{core,compatibility}/gl
go get -u github.com/go-gl/gl/v3.1/gles2
go get -u github.com/go-gl/gl/v2.1/gl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Once the bindings are installed you can use them with the appropriate import statements.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"github.com/go-gl/gl/v3.3-core/gl"&lt;/span&gt;

&lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;window&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="c"&gt;// Open a window.&lt;/span&gt;
    &lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MakeContextCurrent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c"&gt;// Important! Call gl.Init only under the presence of an active OpenGL context,&lt;/span&gt;
    &lt;span class="c"&gt;// i.e., after MakeContextCurrent.&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;gl&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="n"&gt;err&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Fatalln&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;gl&lt;/code&gt; package contains the OpenGL functions and enumeration values for the imported version. It also contains helper functions for working with the API. Of note is &lt;code&gt;gl.Ptr&lt;/code&gt; which takes a Go array or slice or pointer and returns a corresponding &lt;code&gt;uintptr&lt;/code&gt; to use with functions expecting data pointers. Also of note is &lt;code&gt;gl.Str&lt;/code&gt; which takes a null-terminated Go string and returns a corresponding &lt;code&gt;*int8&lt;/code&gt; to use with functions expecting character pointers.&lt;/p&gt;

&lt;p&gt;A note about threading and goroutines. The bindings do not expose a mechanism to make an OpenGL context current on a different thread so you must restrict your usage to the thread on which you called &lt;code&gt;gl.Init()&lt;/code&gt;. To do so you should use &lt;a href="https://code.google.com/p/go-wiki/wiki/LockOSThread" rel="noopener noreferrer"&gt;LockOSThread&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;p&gt;Examples illustrating how to use the bindings are available in the &lt;a href="https://github.com/go-gl/example" rel="noopener noreferrer"&gt;example&lt;/a&gt; repo. There are examples for &lt;a href="https://github.com/go-gl/example/tree/master/gl41core-cube" rel="noopener noreferrer"&gt;OpenGL 4.1 core&lt;/a&gt; and &lt;a href="https://github.com/go-gl/example/tree/master/gl21-cube" rel="noopener noreferrer"&gt;OpenGL 2.1&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Function Loading
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;procaddr&lt;/code&gt; package contains platform-specific functions for &lt;a href="https://www.opengl.org/wiki/Load_OpenGL_Functions" rel="noopener noreferrer"&gt;loading OpenGL functions&lt;/a&gt;. Calling &lt;code&gt;gl.Init()&lt;/code&gt; uses the &lt;code&gt;auto&lt;/code&gt; subpackage to automatically select an appropriate implementation based on the build environment. If you want to select a specific implementation you can use the &lt;code&gt;noauto&lt;/code&gt; build tag and the &lt;code&gt;gl.InitWithProcAddrFunc&lt;/code&gt; initialization function.&lt;/p&gt;

&lt;h2&gt;
  
  
  Go &amp;gt;=1.14 and &lt;code&gt;checkptr&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;In version 1.14 of Go, the race detector added &lt;code&gt;checkptr&lt;/code&gt; instrumentation. This compilation option ensures that programs follow &lt;code&gt;unsafe.Pointer&lt;/code&gt; safety rules. See here for details: &lt;a href="https://golang.org/doc/go1.14#compiler" rel="noopener noreferrer"&gt;https://golang.org/doc/go1.14#compiler&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If enabled, there is a high chance that it will cause program termination when calling specific OpenGL functions, with a message like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fatal error: checkptr: pointer arithmetic computed bad pointer value
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The reported call stack will point to a function like &lt;code&gt;gl.VertexAttribPointer()&lt;/code&gt; that receives an &lt;code&gt;unsafe.Pointer&lt;/code&gt; as parameter.&lt;br&gt;
In case such function requires an "offset" passed in as a pointer (in the low-level API), a different signature needs to be used in order to satisfy the detector.&lt;/p&gt;

&lt;p&gt;For this purpose &lt;code&gt;glow&lt;/code&gt; generates "override" functions which have a different signature, taking &lt;code&gt;uintptr&lt;/code&gt; instead. These functions have the suffix &lt;code&gt;WithOffset&lt;/code&gt; (or similar) in their name.&lt;br&gt;
For the previous example, it would be &lt;code&gt;gl.VertexAttribPointerWithOffset()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Not all such functions have an appropriate override! In case you stumble over such an error, and the override is missing, you have the following options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disable the detector by building your program with &lt;code&gt;-gcflags=all=-d=checkptr=0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Report the missing function(s) as &lt;a href="https://github.com/go-gl/glow/issues" rel="noopener noreferrer"&gt;issue for &lt;code&gt;glow&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Possibly even create a pull-request for &lt;code&gt;glow&lt;/code&gt; with the missing override yourself, and re-generate the &lt;code&gt;gl&lt;/code&gt; bindings.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Generating
&lt;/h2&gt;

&lt;p&gt;These gl bindings are generated using the &lt;a href="https://github.com/go-gl/glow" rel="noopener noreferrer"&gt;Glow&lt;/a&gt; generator. Only developers of this repository need to do this step.&lt;/p&gt;

&lt;p&gt;It is required to have &lt;code&gt;glow&lt;/code&gt; source in a sibling directory to &lt;code&gt;go-gl/gl&lt;/code&gt; since relative paths are used for generation (see &lt;code&gt;generate.go&lt;/code&gt;).&lt;br&gt;
For non-module-aware cases, this means &lt;code&gt;glow&lt;/code&gt; needs to be in the same Go workspace as &lt;code&gt;go-gl/gl&lt;/code&gt;.&lt;br&gt;
For module-aware cases, &lt;code&gt;go-gl/glow&lt;/code&gt; needs to be checked out parallel to &lt;code&gt;go-gl/gl&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Perform generation with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;path/to/go-gl/gl
go generate &lt;span class="nt"&gt;-tags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gen &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;More information about these bindings can be found in the &lt;a href="https://github.com/go-gl/glow" rel="noopener noreferrer"&gt;Glow repository&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>gl</category>
      <category>go</category>
    </item>
    <item>
      <title>bython</title>
      <dc:creator>classccai</dc:creator>
      <pubDate>Fri, 24 Apr 2026 06:20:06 +0000</pubDate>
      <link>https://dev.to/classccai/bython-2567</link>
      <guid>https://dev.to/classccai/bython-2567</guid>
      <description>&lt;h1&gt;
  
  
  Bython
&lt;/h1&gt;

&lt;p&gt;Python with braces. Because Python is awesome, but whitespace is awful.&lt;/p&gt;

&lt;p&gt;Bython is a Python preprosessor which translates curly brackets into indentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Content of README:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Key features&lt;/li&gt;
&lt;li&gt;Code example&lt;/li&gt;
&lt;li&gt;Installation&lt;/li&gt;
&lt;li&gt;Quick intro&lt;/li&gt;
&lt;li&gt;Structure of the repository&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;"Forget" about indentaition. You should still write beautiful code, but if you mess up with tabs/spaces, or copy one piece of code to another that uses a different indentation style, it won't break.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uses Python for interpretation, that means that all of your existing modules, like NumPy and Matplotlib still works.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Code example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;print_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num_of_times&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num_of_times&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bython is awesome!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;print_message&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;You can install Bython directly from PyPI using pip (with or without &lt;code&gt;sudo -H&lt;/code&gt;, depending on your Python installation):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; pip3 &lt;span class="nb"&gt;install &lt;/span&gt;bython
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you for some reason want to install it from the git repository you can use &lt;code&gt;git clone&lt;/code&gt; and do a local install instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git clone https://github.com/mathialo/bython.git
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;bython
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; pip3 &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The git version is sometimes a tiny bit ahead of the PyPI version, but not significantly.&lt;/p&gt;

&lt;p&gt;To uninstall, simply run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;pip3 uninstall bython
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;which will undo all the changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick intro
&lt;/h2&gt;

&lt;p&gt;Bython works by first translating Bython-files (suggested file ending: .by) into Python-files, and then using Python to run them. You therefore need a working installation of Python for Bython to work.&lt;/p&gt;

&lt;p&gt;To run a Bython program, simply type&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;bython source.by arg1 arg2 ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to run &lt;code&gt;source.by&lt;/code&gt; with arg1, arg2, ... as command line arguments. If you want more details on how to run Bython files (flags, etc), type&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;bython &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to print the built-in help page. You can also consult the man page by typing&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;man bython
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bython also includes a translator from Python to Bython. This is found via the &lt;code&gt;py2by&lt;/code&gt; command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;py2by test.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will create a Bython file called &lt;code&gt;test.by&lt;/code&gt;. A full explanation of &lt;code&gt;py2by&lt;/code&gt;, is found by typing&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;py2by &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or by consulting the man page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;man py2by
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a more in-depth intro, consult the &lt;a href="//INTRODUCTION.md"&gt;bython introduction&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Structure of the repository
&lt;/h2&gt;

&lt;p&gt;At the moment, Bython is written in Python. The git repository is structured into 4 directories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;bython&lt;/code&gt; contains a Python package containing the parser and other utilities used by the main script&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;etc&lt;/code&gt; contains manual pages and other auxillary files&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;scripts&lt;/code&gt; contains the runnable Python scripts, ie the ones run from the shell&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;testcases&lt;/code&gt; contains a couple of sample *.by and *.py files intended for testing the implementation&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>bython</category>
    </item>
    <item>
      <title>catime</title>
      <dc:creator>classccai</dc:creator>
      <pubDate>Fri, 24 Apr 2026 06:12:59 +0000</pubDate>
      <link>https://dev.to/classccai/catime-5cne</link>
      <guid>https://dev.to/classccai/catime-5cne</guid>
      <description>&lt;h2&gt;
  
  
  🎨 Powerful Tray Animations
&lt;/h2&gt;

&lt;p&gt;Your tray icon can now come alive! Catime brings powerful custom animation features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom Animations&lt;/strong&gt;: Use &lt;strong&gt;GIF&lt;/strong&gt;, &lt;strong&gt;WebP&lt;/strong&gt;, and static images like &lt;strong&gt;PNG&lt;/strong&gt; &amp;amp; &lt;strong&gt;JPG&lt;/strong&gt; as your tray icon.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System Status:&lt;/strong&gt; Supports real-time display of &lt;strong&gt;CPU %&lt;/strong&gt;, &lt;strong&gt;Memory %&lt;/strong&gt;, &lt;strong&gt;Battery %&lt;/strong&gt;, and &lt;strong&gt;Caps Lock&lt;/strong&gt; status.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F0354b85b-0f96-4978-98e8-df4c0a7ec740" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F0354b85b-0f96-4978-98e8-df4c0a7ec740" width="427" height="122" alt="tray_animation"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;br&gt;
Looking for more fun animations? Check out our companion project, &lt;a href="https://github.com/MemeTray/MemeTray" rel="noopener noreferrer"&gt;MemeTray&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  💫&lt;a href="https://github.com/vladelaina/Catime-Plugins" rel="noopener noreferrer"&gt;Plugins&lt;/a&gt;
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Plugins write to &lt;strong&gt;output.txt&lt;/strong&gt;, Catime displays it — that simple.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F734037a7-997c-48dd-b93f-513d1696ac54" class="article-body-image-wrapper"&gt;&lt;img width="1105" height="481" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F734037a7-997c-48dd-b93f-513d1696ac54"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F1ca3e4a4-c6b0-4c42-ac40-152330cec07a" class="article-body-image-wrapper"&gt;&lt;img width="800" height="375" alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F1ca3e4a4-c6b0-4c42-ac40-152330cec07a"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;br&gt;
Looking for more useful Plugins? Check out our companion project, &lt;a href="https://github.com/vladelaina/Catime-Plugins" rel="noopener noreferrer"&gt;Catime-Plugins&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ❤️‍🔥Staying tuned with us
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Star us&lt;/strong&gt; and witness how this pure C-crafted minimalist time tool continues to evolve - don't miss any exciting updates!&lt;br&gt;
&lt;a href="https://github.com/vladelaina/Catime" rel="noopener noreferrer"&gt;&lt;br&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F50cfc9d4-3d3f-4370-b233-89d76f78977e" width="1631" height="443"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Sponsors
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.dkdun.cn/aff/SCEYKYCH" rel="noopener noreferrer"&gt;&lt;br&gt;
    &lt;img width="732" height="246" alt="dk" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F6d06ac2a-ae1d-4b3f-b828-65b653f6e189"&gt;&lt;br&gt;
  &lt;/a&gt;&lt;/p&gt;




&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;br&gt;
    &lt;tr&gt;
&lt;br&gt;
      &lt;td&gt;
&lt;br&gt;
        &lt;img alt="SignPath" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsignpath.org%2Fassets%2Ffavicon-50x50.png" width="50" height="50"&gt;&lt;br&gt;
      &lt;/td&gt;
&lt;br&gt;
      &lt;td&gt;
&lt;br&gt;
        Free code signing on Windows provided by&lt;br&gt;
        &lt;a href="https://signpath.io" rel="noopener noreferrer"&gt;SignPath.io&lt;/a&gt;, certificate by&lt;br&gt;
        &lt;a href="https://signpath.org/" rel="noopener noreferrer"&gt;SignPath Foundation&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
&lt;br&gt;
    &lt;/tr&gt;
&lt;br&gt;
  &lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  📥 Download
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Releases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Download the latest release from &lt;a href="https://github.com/vladelaina/Catime/releases/latest" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Winget&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;winget install --id VladElaina.Catime
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://vladelaina.github.io/Catime/guide" rel="noopener noreferrer"&gt;📑User Guide&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Left-click tray icon&lt;/strong&gt;: Set &lt;strong&gt;time&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Right-click tray icon&lt;/strong&gt;: Set &lt;strong&gt;menu&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edit mode&lt;/strong&gt;: Drag to adjust position, scroll wheel to resize, 🖱️ right-click to exit edit mode&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Configuration file saved at &lt;code&gt;%LOCALAPPDATA%\Catime\config.ini&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ⚡&lt;a href="https://vladelaina.github.io/Catime/tools/font-tool/" rel="noopener noreferrer"&gt;Font Optimization&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Reduce custom font file size by &lt;strong&gt;90%+&lt;/strong&gt; with the official &lt;a href="https://vladelaina.github.io/Catime/tools/font-tool" rel="noopener noreferrer"&gt;Font Simplification Tool&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Since Catime only displays numbers and symbols (&lt;code&gt;0-9&lt;/code&gt;, &lt;code&gt;:&lt;/code&gt;, &lt;code&gt;.&lt;/code&gt;), most font characters are unnecessary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommendation&lt;/strong&gt;: Keep your original font files as backups. Future software updates may require additional characters beyond the current set.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🛠️ Development
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;: MinGW and CMake are required to build Catime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/vladelaina/Catime.git
&lt;span class="nb"&gt;cd &lt;/span&gt;Catime

&lt;span class="c"&gt;# INSTALL DEPENDENCIES&lt;/span&gt;
&lt;span class="c"&gt;# Ubuntu/Debian&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; mingw-w64 cmake

&lt;span class="c"&gt;# Arch Linux  &lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;pacman &lt;span class="nt"&gt;-Syu&lt;/span&gt; &lt;span class="nt"&gt;--noconfirm&lt;/span&gt; mingw-w64 cmake

&lt;span class="c"&gt;# Windows - See setup instructions below&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📋 Windows Setup Instructions&lt;/p&gt;
&lt;h3&gt;
  
  
  📦 Required Tools
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Recommended Version Format&lt;/th&gt;
&lt;th&gt;Download Link&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MinGW&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GCC Compiler&lt;/td&gt;
&lt;td&gt;&lt;code&gt;x86_64--release-win32-seh-ucrt-rtv-rev.7z&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/niXman/mingw-builds-binaries/releases/latest" rel="noopener noreferrer"&gt;MinGW Build&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CMake&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Build Tool&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cmake--windows-x86_64.msi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cmake.org/download/" rel="noopener noreferrer"&gt;CMake&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  🔧 Installation Steps
&lt;/h3&gt;
&lt;h4&gt;
  
  
  1. Install MinGW
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Download &lt;code&gt;x86_64--release-win32-seh-ucrt-rtv-rev.7z&lt;/code&gt; from &lt;a href="https://github.com/niXman/mingw-builds-binaries/releases/latest" rel="noopener noreferrer"&gt;MinGW Build&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Extract to &lt;code&gt;C:\mingw64&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;C:\mingw64\bin&lt;/code&gt; to your PATH environment variable:

&lt;ul&gt;
&lt;li&gt;Open: &lt;code&gt;Control Panel → System → Advanced System Settings → Environment Variables&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Find &lt;code&gt;Path&lt;/code&gt; in &lt;strong&gt;System variables&lt;/strong&gt;, click "Edit"&lt;/li&gt;
&lt;li&gt;Add: &lt;code&gt;C:\mingw64\bin&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  2. Install CMake
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Download and run &lt;code&gt;cmake--windows-x86_64.msi&lt;/code&gt; from &lt;a href="https://cmake.org/download/" rel="noopener noreferrer"&gt;CMake&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;During installation, select "Add CMake to the system PATH"&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  3. Verify Installation
&lt;/h4&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gcc &lt;span class="nt"&gt;--version&lt;/span&gt;
cmake &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Building
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x build.sh &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./build.sh   &lt;span class="c"&gt;# Linux&lt;/span&gt;
build.bat                         &lt;span class="c"&gt;# Windows&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  🎁 &lt;a href="https://vladelaina.github.io/Catime/support.html" rel="noopener noreferrer"&gt;Support&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://vladelaina.github.io/Catime/support.html" rel="noopener noreferrer"&gt;&lt;br&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FSupport_Catime-EA4AAA%3Fstyle%3Dfor-the-badge%26logo%3Dgithubsponsors%26logoColor%3Dwhite" alt="Support Catime" width="161" height="28"&gt;&lt;br&gt;
  &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vladelaina.github.io/Catime/support.html" rel="noopener noreferrer"&gt;&lt;br&gt;
  &lt;img&gt;
    src="https://github.com/user-attachments/assets/49035b18-e803-4ee8-9ea5-2e3f32f099de"&lt;br&gt;
    width="1889"&lt;br&gt;
    height="872"&lt;br&gt;
    alt="image"&lt;br&gt;
  /&amp;gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Status
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frepobeats.axiom.co%2Fapi%2Fembed%2Ff56dabe2c1b84ded2408ffb7d800f5c23bddb708.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frepobeats.axiom.co%2Fapi%2Fembed%2Ff56dabe2c1b84ded2408ffb7d800f5c23bddb708.svg" title="Repobeats analytics image" alt="Catime" width="814" height="318"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🌟Star History
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.star-history.com/#vladelaina/Catime&amp;amp;Date" rel="noopener noreferrer"&gt;&lt;br&gt;
 &lt;br&gt;
   &lt;br&gt;
   &lt;br&gt;
   &lt;img alt="Star History Chart" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapi.star-history.com%2Fsvg%3Frepos%3Dvladelaina%2FCatime%26type%3DDate" width="800" height="533"&gt;&lt;br&gt;
 &lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://vladelaina.github.io/Catime/#thanks" rel="noopener noreferrer"&gt;✨Acknowledgements&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;With special appreciation to &lt;a href="https://space.bilibili.com/26087398" rel="noopener noreferrer"&gt;猫屋敷梨梨Official&lt;/a&gt; for the beautiful icon design.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Special thanks to the following contributors(chronological order):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/MadMaxChow" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FMAX%25C2%25B0%25E5%25AD%259F%25E5%2585%2586.webp" width="460" alt="MAX°孟兆" height="460"&gt;&lt;br&gt;&lt;b&gt;MAX°孟兆&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/sumruler" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FXuJilong.webp" width="460" alt="XuJilong" height="460"&gt;&lt;br&gt;&lt;b&gt;XuJilong&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://www.diandiapp.com/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E7%2582%25B9%25E6%25BB%25B4%25E8%25BF%259B%25E5%25BA%25A6%25E4%25BD%259C%25E8%2580%2585.webp" width="800" alt="点滴进度作者" height="800"&gt;&lt;br&gt;&lt;b&gt;点滴进度作者&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/ZGGSONG" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2Fzggsong.webp" width="460" alt="zggsong" height="460"&gt;&lt;br&gt;&lt;b&gt;zggsong&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/26087398" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E7%258C%25AB%25E5%25B1%258B%25E6%2595%25B7%25E6%25A2%25A8%25E6%25A2%25A8Official.webp" width="240" alt="猫屋敷梨梨Official" height="240"&gt;&lt;br&gt;&lt;b&gt;猫屋敷梨梨Official&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/6189012" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FMOJI%25E3%2582%2582%25E3%2582%2589.webp" width="500" alt="MOJIもら" height="500"&gt;&lt;br&gt;&lt;b&gt;MOJIもら&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/475437261" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E6%259D%258E%25E5%25BA%25B7.webp" width="202" alt="李康" height="202"&gt;&lt;br&gt;&lt;b&gt;李康&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/1708573954" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E6%2588%2591%25E6%2598%25AF%25E6%2597%25A0%25E5%2590%258D%25E5%2590%2596.webp" width="240" alt="我是无名吖" height="240"&gt;&lt;br&gt;&lt;b&gt;我是无名吖&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/flying-hilichurl" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E9%2587%2591%25E9%25BA%259F.webp" width="640" alt="金麟" height="640"&gt;&lt;br&gt;&lt;b&gt;金麟&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/161061562" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E5%258F%258C%25E8%2584%259A%25E7%258C%25AB.webp" width="240" alt="双脚猫" height="240"&gt;&lt;br&gt;&lt;b&gt;双脚猫&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/rsyqvthv" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2Frsyqvthv.webp" width="420" alt="rsyqvthv" height="420"&gt;&lt;br&gt;&lt;b&gt;rsyqvthv&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/297146893" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E5%2590%259B%25E5%25BD%25B1.webp" width="800" alt="君影" height="800"&gt;&lt;br&gt;&lt;b&gt;君影&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/3546380188519387" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E5%25AD%25A6%25E4%25B9%25A0%25E9%25A9%25AC%25E6%25A5%25BC.webp" width="240" alt="学习马楼" height="240"&gt;&lt;br&gt;&lt;b&gt;学习马楼&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/8010065" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E7%259D%25A1%25E7%259D%2580%25E7%259A%2584%25E7%2581%25AB%25E5%25B1%25B1.webp" width="240" alt="睡着的火山" height="240"&gt;&lt;br&gt;&lt;b&gt;睡着的火山&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/5549978" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E6%2598%259F%25E7%25A9%25BA%25E4%25B8%258B%25E6%2595%25B0%25E7%25BE%258A.webp" width="180" alt="星空下数羊" height="180"&gt;&lt;br&gt;&lt;b&gt;星空下数羊&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/13129221" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E9%259D%2592%25E9%2598%25B3%25E5%25BF%2598%25E5%25B7%259D.webp" width="128" alt="青阳忘川" height="128"&gt;&lt;br&gt;&lt;b&gt;青阳忘川&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/llfWilliam" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FWilliam.webp" width="460" alt="William" height="460"&gt;&lt;br&gt;&lt;b&gt;William&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/wangye99" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E7%258E%258B%25E9%2587%258E.webp" width="460" alt="王野" height="460"&gt;&lt;br&gt;&lt;b&gt;王野&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/572042200" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E7%2585%25AE%25E9%2585%2592%25E8%25AE%25BA%25E7%25A7%2591%25E6%258A%2580.webp" width="128" alt="煮酒论科技" height="128"&gt;&lt;br&gt;&lt;b&gt;煮酒论科技&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/470931145" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E9%25A3%258E%25E5%25A2%259E.webp" width="128" alt="风增" height="128"&gt;&lt;br&gt;&lt;b&gt;风增&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/266931550" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E7%2594%25B0%25E6%2598%25A5.webp" width="800" alt="田春" height="800"&gt;&lt;br&gt;&lt;b&gt;田春&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/behappy425" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2Fbehappy425.webp" width="420" alt="behappy425" height="420"&gt;&lt;br&gt;&lt;b&gt;behappy425&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/xxtui-main/xxtui" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2Fxj.webp" width="460" alt="x.j" height="460"&gt;&lt;br&gt;&lt;b&gt;x.j&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/kissholic" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2Fkissholic.webp" width="420" alt="kissholic" height="420"&gt;&lt;br&gt;&lt;b&gt;kissholic&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href=""&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FAlnilam.webp" width="64" alt="Alnilam" height="64"&gt;&lt;br&gt;&lt;b&gt;Alnilam&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/pyqmlp" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E6%259F%2592.webp" width="800" alt="柒" height="800"&gt;&lt;br&gt;&lt;b&gt;柒&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/Mapaler" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E6%259E%25AB%25E8%25B0%25B7%25E5%2589%2591%25E4%25BB%2599.webp" width="460" alt="枫谷剑仙" height="460"&gt;&lt;br&gt;&lt;b&gt;枫谷剑仙&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/Crazy-A2" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FMarial.webp" width="460" alt="Marial" height="460"&gt;&lt;br&gt;&lt;b&gt;Marial&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/507572706" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E5%258D%2593%25E8%25B6%258A%25E6%2596%25B9%25E8%25BE%25BE.webp" width="301" alt="卓越方达" height="301"&gt;&lt;br&gt;&lt;b&gt;卓越方达&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/choyy" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2Fchoyy.webp" width="420" alt="choyy" height="420"&gt;&lt;br&gt;&lt;b&gt;choyy&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/378034263?spm_id_from=333.1007.0.0" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E7%259B%258A%25E6%25B8%258AYyuan.webp" width="128" alt="益渊Yyuan" height="128"&gt;&lt;br&gt;&lt;b&gt;益渊Yyuan&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/xiaodao0036" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E4%25B8%258A%25E6%259D%25A1%25E6%2595%2599%25E4%25B8%25BB.webp" width="420" alt="上条教主" height="420"&gt;&lt;br&gt;&lt;b&gt;上条教主&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/jin-gubang" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2Fjin-gubang.webp" width="420" alt="jin-gubang" height="420"&gt;&lt;br&gt;&lt;b&gt;jin-gubang&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/xlr134" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2Fxlr134.webp" width="420" alt="xlr134" height="420"&gt;&lt;br&gt;&lt;b&gt;xlr134&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/leisure365" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E8%258E%25AB%25E9%25A2%259C.webp" width="140" alt="莫颜" height="140"&gt;&lt;br&gt;&lt;b&gt;莫颜&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/LuSrackhall" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FLuSrackhall.webp" width="460" alt="LuSrackhall" height="460"&gt;&lt;br&gt;&lt;b&gt;LuSrackhall&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/sakuraxy2004" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E6%2598%25AF%25E7%258E%2584%25E5%25A4%259C%25E4%25B8%258D%25E6%2598%25AF%25E7%258E%2584%25E6%259C%2588.webp" width="800" alt="是玄夜不是玄月" height="800"&gt;&lt;br&gt;&lt;b&gt;是玄夜不是玄月&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/YangCangShu" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FYangCangShu.webp" width="420" alt="YangCangShu" height="420"&gt;&lt;br&gt;&lt;b&gt;YangCangShu&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://meta.appinn.net/u/valuex/summary" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2Fvaluex.webp" width="144" alt="valuex" height="144"&gt;&lt;br&gt;&lt;b&gt;valuex&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://meta.appinn.net/u/lxzrjyff/summary" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2Flxzrjyff.webp" width="144" alt="lxzrjyff" height="144"&gt;&lt;br&gt;&lt;b&gt;lxzrjyff&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/darkmatter2048" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FDaYe.webp" width="460" alt="DaYe" height="460"&gt;&lt;br&gt;&lt;b&gt;DaYe&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/zct4257" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2Fzct4257.webp" width="460" alt="zct4257" height="460"&gt;&lt;br&gt;&lt;b&gt;zct4257&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href=""&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E5%25B0%258F%25E8%25B4%25A5%25E5%258F%25B6.webp" width="800" alt="小败叶" height="800"&gt;&lt;br&gt;&lt;b&gt;小败叶&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/25249757" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E9%2597%25B2%25E4%25BA%25BA%25E4%25B8%258D%25E6%25A2%25A6%25E5%2590%259BQ.webp" width="128" alt="闲人不梦君Q" height="128"&gt;&lt;br&gt;&lt;b&gt;闲人不梦君Q&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://space.bilibili.com/1191321078" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E6%259D%258E%25E8%2589%25AF.webp" width="800" alt="李良" height="801"&gt;&lt;br&gt;&lt;b&gt;李良&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/imxhe" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2Fiweek.webp" width="420" alt="imxhe" height="420"&gt;&lt;br&gt;&lt;b&gt;imxhe&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/haeob" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2Fmua.webp" width="460" alt="mua" height="460"&gt;&lt;br&gt;&lt;b&gt;mua&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://b23.tv/iRKb7Ua" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E6%259E%2590%25E6%259C%25A8.webp" width="800" alt="析木" height="800"&gt;&lt;br&gt;&lt;b&gt;析木&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href=""&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E6%25BA%259C%25E6%25BA%259C%25E5%25A4%25A7%25E7%25A5%259E%25E6%25A0%25A1%25E9%2595%25BF%25E6%259D%25A5%25E4%25BA%2586.webp" width="800" alt="溜溜大神校长来了" height="800"&gt;&lt;br&gt;&lt;b&gt;溜溜大神校长来了&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/Seredo" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FSeredo.webp" width="460" alt="Seredo" height="460"&gt;&lt;br&gt;&lt;b&gt;Seredo&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://b23.tv/HVVVykm" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2F%25E7%25BA%25A2%25E6%25A0%2591%25E6%259E%2597.webp" width="574" alt="红树林" height="573"&gt;&lt;br&gt;&lt;b&gt;红树林&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/Snow-kal" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FSnow-kal.webp" width="460" alt="Snow-kal" height="460"&gt;&lt;br&gt;&lt;b&gt;Snow-kal&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/mayjay-wei" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FTCWei.webp" width="460" alt="TCWei" height="460"&gt;&lt;br&gt;&lt;b&gt;TCWei&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://github.com/YuYinLC" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FYuYinLC.webp" width="420" alt="YuYinLC" height="420"&gt;&lt;br&gt;&lt;b&gt;YuYinLC&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
      &lt;td width="14.28%"&gt;
        &lt;a href="https://meta.appinn.net/u/fireman" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fvladelaina.github.io%2FCatime%2Fassets%2FContributors%2FFireman.webp" width="144" alt="Fireman" height="144"&gt;&lt;br&gt;&lt;b&gt;Fireman&lt;/b&gt;&lt;/a&gt;&lt;br&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🗝️Copyright Notice
&lt;/h2&gt;

&lt;p&gt;This project is released under the Apache License 2.0 open source license.&lt;/p&gt;

&lt;p&gt;Icon copyright notice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The software icon was created by &lt;a href="https://space.bilibili.com/26087398" rel="noopener noreferrer"&gt;猫屋敷梨梨Official&lt;/a&gt; who reserves all rights. Without explicit authorization from the original creator, it may not be used for any commercial purposes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Font licenses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MIT: 

&lt;ul&gt;
&lt;li&gt;ProFontWindows Essence.ttf&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;SIL Open Font License: 

&lt;ul&gt;
&lt;li&gt;DaddyTimeMono Essence.otf, DepartureMono Essence.otf,
Rec Mono Casual Essence.ttf, Terminess Nerd Font Essence.ttf&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;OFL (Open Font License):

&lt;ul&gt;
&lt;li&gt;Jacquard 12 Essence.ttf, Jacquarda Bastarda 9 Essence.ttf,
Pixelify Sans Essence.ttf, Rubik Burned Essence.ttf,
Rubik Glitch Essence.ttf, Rubik Marker Hatch Essence.ttf,
Rubik Puddles Essence.ttf, Wallpoet Essence.ttf&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Wallpaper:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Author: &lt;a href="https://space.bilibili.com/26087398" rel="noopener noreferrer"&gt;猫屋敷梨梨Official&lt;/a&gt;
&lt;h2&gt;
  
  
  - Dynamic wallpaper link: &lt;a href="https://steamcommunity.com/sharedfiles/filedetails/?id=3171487185" rel="noopener noreferrer"&gt;猫屋敷梨梨「星之所在」曲绘夜晚版&lt;/a&gt; &amp;amp; &lt;a href="https://steamcommunity.com/sharedfiles/filedetails/?id=3171483657" rel="noopener noreferrer"&gt;猫屋敷梨梨-「星之所在」曲绘黄昏版&lt;/a&gt;
&lt;/h2&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Copyright © 2025-2026 - &lt;strong&gt;Catime&lt;/strong&gt;\&lt;br&gt;
By vladelaina\&lt;br&gt;
Made with ❤️ &amp;amp; ⌨️&lt;/p&gt;

</description>
      <category>catime</category>
    </item>
    <item>
      <title>frins</title>
      <dc:creator>classccai</dc:creator>
      <pubDate>Fri, 24 Apr 2026 06:11:38 +0000</pubDate>
      <link>https://dev.to/classccai/frins-26le</link>
      <guid>https://dev.to/classccai/frins-26le</guid>
      <description>&lt;h1&gt;
  
  
  Frins
&lt;/h1&gt;

&lt;p&gt;Frins is a practical unit-of-measure calculator DSL for Scala.&lt;/p&gt;

&lt;p&gt;Key features;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tracks units of measure through all calculations allowing you to mix units of measure transparently&lt;/li&gt;
&lt;li&gt;Comes with a &lt;strong&gt;huge&lt;/strong&gt; database of units and conversion factors&lt;/li&gt;
&lt;li&gt;Inspired by the &lt;a href="http://futureboy.us/frinkdocs/" rel="noopener noreferrer"&gt;Frink project&lt;/a&gt; and &lt;a href="https://github.com/martintrojer/frinj" rel="noopener noreferrer"&gt;Frinj&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Tries to combine Frink's fluent calculation style with idiomatic Scala&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Artifacts
&lt;/h2&gt;

&lt;p&gt;Add the following lines to your build.sbt&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scala"&gt;&lt;code&gt;&lt;span class="n"&gt;resolvers&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s"&gt;"Sonatype snapshots"&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="s"&gt;"http://oss.sonatype.org/content/repositories/snapshots/"&lt;/span&gt;

&lt;span class="n"&gt;libraryDependencies&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s"&gt;"io.github.martintrojer"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="s"&gt;"frins_2.10"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="s"&gt;"0.1-SNAPSHOT"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;Turn your sbt console into an (even more) powerful calculator;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scala"&gt;&lt;code&gt;&lt;span class="n"&gt;$&lt;/span&gt; &lt;span class="n"&gt;sbt&lt;/span&gt; &lt;span class="n"&gt;console&lt;/span&gt;
&lt;span class="n"&gt;scala&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;frins._&lt;/span&gt;
&lt;span class="n"&gt;scala&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;initDatabases&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You are now ready to go! Frins keeps it's values in instances of the &lt;a href="https://github.com/martintrojer/frins/blob/master/src/main/scala/frins/Number.scala" rel="noopener noreferrer"&gt;Number&lt;/a&gt; class, which contains a Double value and a Map of Units. Once you have a Number object you can use it in calculations as you would normally use Doubles.&lt;/p&gt;

&lt;p&gt;There are convenience Frins Number builders using the form &lt;code&gt;N(value, 'unit, 'unit, ...)&lt;/code&gt; (value can be omitted) and implicits conversions from other number types and scala symbols (denoting the unit) to Frins Numbers.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scala"&gt;&lt;code&gt;&lt;span class="n"&gt;scala&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="ss"&gt;'teaspoon&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="ss"&gt;'water&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;'c&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;res0&lt;/span&gt;&lt;span class="k"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;frins.Number&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;Double&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="k"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;4.429893807970541E14&lt;/span&gt; &lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="o"&gt;^&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;kg&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;^-&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;energy&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the energy contained in one teaspoon of water (using &lt;code&gt;E=mc^2&lt;/code&gt;). Wow, big number, how much is that "in real money"?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scala"&gt;&lt;code&gt;&lt;span class="n"&gt;scala&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;res0&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="ss"&gt;'gallons&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="ss"&gt;'gasoline&lt;/span&gt;
&lt;span class="n"&gt;res1&lt;/span&gt;&lt;span class="k"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;frins.NumberT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;3164209.8628361006&lt;/span&gt;  &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;dimensionless&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There you have it, the energy in one teaspoon of water (according to Einstein) is equivalent to burning 3 million (!) gallons of gasoline.&lt;/p&gt;

&lt;p&gt;For more examples and explanations of the Number builders (and more!) see the example calculations below.&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;See &lt;a href="https://github.com/martintrojer/frins/blob/master/src/main/scala/frins/ExampleCalculations.scala" rel="noopener noreferrer"&gt;example calculations&lt;/a&gt; for ideas (and some laughs)...&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="http://skillsmatter.com/podcast/home/frinj-having-fun-with-units-3861" rel="noopener noreferrer"&gt;Video of a Frinj talk&lt;/a&gt; (Frinj is Frins' sibling project)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, check the &lt;a href="https://github.com/martintrojer/frins/wiki" rel="noopener noreferrer"&gt;wiki&lt;/a&gt; for more information.&lt;/p&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;Copyright (C) 2013 Martin Trojer&lt;/p&gt;

&lt;p&gt;Distributed under the Eclipse Public License.&lt;/p&gt;

</description>
      <category>frins</category>
    </item>
    <item>
      <title>minian</title>
      <dc:creator>classccai</dc:creator>
      <pubDate>Fri, 24 Apr 2026 05:58:40 +0000</pubDate>
      <link>https://dev.to/classccai/minian-39l7</link>
      <guid>https://dev.to/classccai/minian-39l7</guid>
      <description>&lt;h1&gt;
  
  
  MiniAn
&lt;/h1&gt;

&lt;p&gt;MiniAn is an analysis pipeline and visualization tool inspired by both &lt;a href="https://github.com/flatironinstitute/CaImAn" rel="noopener noreferrer"&gt;CaImAn&lt;/a&gt; and &lt;a href="https://github.com/JinghaoLu/MIN1PIPE" rel="noopener noreferrer"&gt;MIN1PIPE&lt;/a&gt; package specifically for &lt;a href="http://miniscope.org/index.php/Main_Page" rel="noopener noreferrer"&gt;Miniscope&lt;/a&gt; data.&lt;/p&gt;

&lt;h1&gt;
  
  
  Quick Start Guide
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Create a new conda env: &lt;code&gt;conda create -y --name minian&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Activate the environment: &lt;code&gt;conda activate minian&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Install MiniAn: &lt;code&gt;conda install -y -c conda-forge minian&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Install the pipeline notebooks: &lt;code&gt;minian-install --notebooks&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Optional install the demo movies: &lt;code&gt;minian-install --demo&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Fire up jupyter: &lt;code&gt;jupyter notebook&lt;/code&gt; and open the notebook "pipeline.ipynb"&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Documentation
&lt;/h1&gt;

&lt;p&gt;MiniAn documentation is hosted on ReadtheDocs at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://minian.readthedocs.io/" rel="noopener noreferrer"&gt;https://minian.readthedocs.io/&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Contributing to MiniAn
&lt;/h1&gt;

&lt;p&gt;We would love feedback and contribution from the community!&lt;br&gt;
See &lt;a href="https://minian.readthedocs.io/en/latest/start_guide/contribute.html" rel="noopener noreferrer"&gt;the contribution page&lt;/a&gt; for more detail!&lt;/p&gt;

&lt;h1&gt;
  
  
  License
&lt;/h1&gt;

&lt;p&gt;This project is licensed under GNU GPLv3.&lt;/p&gt;

</description>
      <category>minian</category>
    </item>
  </channel>
</rss>
