Windows Installation

Before installing Pulsar Server, ensure your system meets the following requirements:
1. A compatible NVIDIA GPU (with CUDA 12.1+ support) or AMD GPU (with ROCm 6.1+ support)
2. At least 8GB of RAM (16GB or more recommended)
3. At least 50GB of free disk space
4. Internet connection for downloading dependencies and models
5. Windows 10 64-bit: Pro, Enterprise, or Education (Build 16299 or later)

If you already have a Pulsar Server, simply activate it and/or connect to it through Pulsar UI. You can simply download only Pulsar UI here.

UI Installation (Beta)

Download Pulsar Windows Installer (beta)

Follow the prompts in the installer. It will:
  - Check for a compatible GPU
  - Install Docker and Docker Compose if needed
  - Set up the necessary Docker Compose configuration
  - Create and configure the .env file
  - Start the Pulsar AI services

Once the installation is complete, you will find the Pulsar Server and Pulsar UI desktop applications. Open the Pulsar Server (double-click), and once it is ready, open Pulsar UI (double-click).
You can access it locally at http://localhost:40000.

If you encounter any problems with installatio, Please try the following steps:
a. Restart your PC.
b. If the issue persists, manually check GPU driver and in case reinstall your GPU driver.
c. If you're still experiencing problems, please open an issue on
GitHub or contact us Info

Manual Installation (Recommended)

1. Download Docker Desktop on Windows and Install it from Docker Desktop for Windows - x86_64
2. Enabling Docker support in WSL 2 distros
3. Open Docker Desktop and click on Search images to run.
4. Base on your GPU search and pull the following image: marcoastramind/pulsar-nvidia
or marcoastramind/pulsar-amd.
5. Also search and Pull postgres image.

During installation, you will be asked to enter your Hugging face and ngrok tokens to fully use the pulsar application; if you do not have one, you can generate one by following the instructions below:

PULSAR_HF_TOKEN (HuggingFace Token)This token is crucial for accessing HuggingFace's model repository. Without it, you won't be able to download and use many of the AI models that power Pulsar's functionality.
To obtain your token:
Go to
HuggingFace and create an account if you don't have one.
Navigate to your profile settings and find the "Access Tokens" section.
Create a new token and copy it into your .env file.
Setting this token allows Pulsar to access a wide range of powerful AI models, significantly enhancing its capabilities.

PULSAR_SHOULD_SEND_PRIVATE_TOKEN: Setting this to true is highly recommended. It allows Pulsar to use your HuggingFace token to access private or gated models. This can unlock advanced features and improve Pulsar's performance. While you can set it to false for privacy reasons, doing so may limit Pulsar's functionality.

PULSAR_NGROK_TOKEN (Ngrok Token)Ngrok is a tool that creates secure tunnels to localhost, allowing you to expose Pulsar to the internet securely. This is particularly useful if you want to access Pulsar remotely or collaborate with others.
To obtain your Ngrok token:
Sign up for an account at
Ngrok.
In your dashboard, you'll find your authtoken.
Copy this token into your .env file.

6. Next step: Open PowerShell as administrator and follow the steps below to set up the database:
If you prefer you can follow: Installation Guide on Github
1. Open PowerShell as an administrator
2. Copy and paste the following script into your PowerShell window:
The script will prompt you for a database password, HuggingFace token, Ngrok token and favourite use of the Pulsar application. Enter these when prompted.
# Function to detect GPU type
function Detect-GPUType {
    $gpuInfo = Get-WmiObject Win32_VideoController | Where-Object { $_.AdapterCompatibility -match "NVIDIA|Advanced Micro Devices" }
    if ($gpuInfo.AdapterCompatibility -match "NVIDIA") {
        return "nvidia"
    } elseif ($gpuInfo.AdapterCompatibility -match "Advanced Micro Devices") {
        return "amd"
    } else {
        Write-Host "No compatible NVIDIA or AMD GPU detected. Exiting."
        exit 1
    }
}

# Detect GPU type
$gpuType = Detect-GPUType

# Set environment variables based on GPU type
$env:DOCKER_IMAGE = if ($gpuType -eq "nvidia") { "marcoastramind/pulsar-nvidia" } else { "marcoastramind/pulsar-amd" }
$env:GPU_RUNTIME = $gpuType

# Create necessary directories
$pulsarDir = "$env:USERPROFILE\pulsar"
$hfCacheDir = "$env:USERPROFILE\.cache\huggingface"
$dirs = @(
    "$pulsarDir\configs",
    "$pulsarDir\static",
    "$pulsarDir\db_revision",
    $hfCacheDir
)
foreach ($dir in $dirs) {
    if (!(Test-Path $dir)) {
        New-Item -ItemType Directory -Path $dir -Force | Out-Null
        Write-Host "Created directory: $dir"
    } else {
        Write-Host "Directory already exists: $dir"
    }
}
Set-Location -Path $pulsarDir

# Create .env file
$envFile = "$pulsarDir\.env"
if (!(Test-Path $envFile)) {
    $securePassword = Read-Host "Enter a secure password for the database" -AsSecureString
    $password = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($securePassword))
    $primaryUse = Read-Host "Enter your expected use type (1:general, 2:roleplay, 3:roleplay 18+)"
    $hfToken = Read-Host "Enter your HuggingFace token (press Enter to skip)"
    $shouldSendTokenOnline = Read-Host "Allow sending your read token to your online profile? This is mandatory for adding private and gated models/loras (y/n)"
    $ngrokToken = Read-Host "Enter your Ngrok token (press Enter to skip)"
    $isAdultContent = if ($primaryUse -eq "3") { "true" } else { "false" }
    $shouldSendOnline = if ($shouldSendTokenOnline -ieq "y") {"true"} else {"false"}
    $primaryUseText = switch ($primaryUse) {
        "1" { "general" }
        "2" { "roleplay" }
        "3" { "roleplay" }
        default { "general" }
    }

    $envContent = @"
PULSAR_DB_PASSWORD=$password
PULSAR_HF_TOKEN=$hfToken
PULSAR_SHOULD_SEND_PRIVATE_TOKEN=$shouldSendOnline
PULSAR_NGROK_TOKEN=$ngrokToken
PULSAR_DB_USER=astramind
POSTGRES_DB_NAME=pulsar
PULSAR_DB_NAME=postgres:5432/pulsar
PRIMARY_USE=$primaryUseText
IS_ADULT_CONTENT=$isAdultContent
DOCKER_IMAGE=$env:DOCKER_IMAGE
GPU_RUNTIME=$env:GPU_RUNTIME
GPU_DEVICES=
GPU_GROUPS=
"@
    $envContent | Out-File -FilePath $envFile -Encoding utf8
    Write-Host "Created .env file: $envFile"
} else {
    Write-Host ".env file already exists: $envFile"
}

# Create docker-compose.yml file
$composeFile = "$pulsarDir\docker-compose.yml"
$composeContent = @"
version: '3'
services:
  postgres:
    ports:
      - "5432:5432"
    image: postgres:latest
    environment:
      POSTGRES_DB: `${PULSAR_DB_NAME}
      POSTGRES_USER: `${PULSAR_DB_USER}
      POSTGRES_PASSWORD: `${PULSAR_DB_PASSWORD}
    volumes:
      - pgdata:/var/lib/postgresql/data
      - ./init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U astramind -d pulsar" ]
      interval: 10s
      timeout: 5s
      retries: 5
  pulsar:
    ports:
      - "40000:40000"
    image: `${DOCKER_IMAGE}
    volumes:
      - `${USERPROFILE}\pulsar\configs:/home/user/Pulsar/configs:rw
      - `${USERPROFILE}\pulsar\static:/home/user/Pulsar/static/item_images:rw
      - `${USERPROFILE}\pulsar\.env:/home/user/Pulsar/.env:rw
      - `${USERPROFILE}\.cache\huggingface:/home/user/.cache/huggingface:rw
      - `${USERPROFILE}\pulsar\db_revision:/home/user/Pulsar/app/db/migration/alembic_/versions:rw
    depends_on:
      postgres:
        condition: service_healthy
    deploy:
      resources:
        reservations:
          devices:
            - driver: `${GPU_RUNTIME}
              count: all
              capabilities: [gpu]
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:40000/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 120s          
"@

if ($gpuType -eq "amd") {
    $composeContent += @"

    devices:
      - /dev/kfd
      - /dev/dri
    group_add:
      - video
"@
}

$composeContent += @"

volumes:
  pgdata:
"@

$composeContent | Out-File -FilePath $composeFile -Encoding utf8
Write-Host "Created docker-compose.yml file: $composeFile"

# Create init-db.sql file
$initDbFile = "$pulsarDir\init-db.sql"
$initDbContent = @"
-- Create user if not exists
DO
$$
BEGIN
  IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'astramind') THEN
    CREATE USER astramind WITH PASSWORD '`${PULSAR_DB_PASSWORD}';
  END IF;
END
$$;
-- Create database if not exists
SELECT 'CREATE DATABASE pulsar'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'pulsar');
-- Grant privileges
GRANT ALL PRIVILEGES ON DATABASE pulsar TO astramind;
"@
$initDbContent | Out-File -FilePath $initDbFile -Encoding utf8
Write-Host "Created init-db.sql file: $initDbFile"

Write-Host "Setup complete. To start Pulsar AI, run 'docker-compose up -d' in the $pulsarDir directory."
3. Running Pulsar
1. Ensure Docker Desktop is running and GPU support is enabled:
. Open Docker Desktop
. Go to Settings > General
. Make sure "Use GPU for compute" is checked (for NVIDIA GPUs)
2. For AMD GPUs, you may need to install additional software:Install the ROCm for Windows package. Follow the instructions to set up the necessary environment variables
3. In PowerShell, navigate to the Pulsar directory:
cd $env:USERPROFILE\pulsar
4. Start Pulsar Server
docker-compose up -d
5. Check the logs to ensure everything is running correctly
docker-compose logs -f
To ensure that everything is working correctly, open a terminal or command prompt and run: docker ps
The status of the Pulsar server should show as healthy.
NOTE:
Every time you restart your PC, you must run the docker compose command to start the Pulsar server. Once the server status shows as healthy, doubleclick the Pulsar UI application to access the interface. To stop the Pulsar server, execute the following command:
docker-compose down

If you have any problems please contact us to Info AstraMind , or open an issues to Github

Next Download Pulsar Client (Pulsar App)

After you’ve installed Pulsar Server, download and install the Pulsar Client to obtain the Pulsar UI.

Download the Pulsar Client (Pulsar UI):

You can find different tutorials on how to use pular at: Tutorial

3. Start chatting!

How Pulsar Works:

Install
Pulsar Server

Sets Up Pulsar: It initializes all the necessary parts that Pulsar needs to function properly;
Fetches Essential Models: It downloads the models that power the app's features, enabling everything from basic functions to advanced capabilities;
Protects Your Data: All your conversation histories are stored directly on your device. This means your chats are private and secure, as they aren't saved online;
Supports Pulsar Client: Pulsar Server acts as the backbone for Pulsar Client. It allows the client application to connect and interact smoothly with the Pulsar App;
Key Features:Local Storage: Both the models and your chat histories are kept on your device. This ensures that your information stays private and under your control without needing an internet connection;
Compatibility: Currently, Pulsar Server works on Windows and Linux operating systems.
Pulsar Server is a crucial application needed to run the Pulsar App (Pulsar Client).

Install
Pulsar Client

After downloading and installing Pulsar Server and creating an account, proceed to download Pulsar Client. Pulsar Client is the application that all users, including you, will use to access Pulsar App through your account on the Pulsar Server. Here’s how it works:

Start Pulsar Server: Once the server is up and running, anyone with the necessary credentials can connect;
Download and Install Pulsar Client: Available for Windows, Linux;
Create Your Personal Account: Using Pulsar Client, you can create your own internal account, allowing you to interact privately and independently from other users.

In summary, Pulsar Client enables you to use Pulsar App easily and securely, ensuring a personalized and private experience.

Share with
Friends and Family
and Start Chatting

Share your account with friends and family while maintaining privacy and personalization for each user.
Shared Server Name: All connected users will use the same server name.
Individual User Profiles: Each person can create their own unique user profile. Customize and design your own characters to reflect your personal style. Personalized Experience: Personalize your interface and settings to suit your preferences.Keep your chats private, ensuring that your conversations remain confidential.
Local Data Management: All user data is managed locally on the server computer.No data is ever sent or stored online, guaranteeing complete privacy and security.