# Installation and Configuration Guide

Step-by-step instructions for installing and configuring the Jellyfin Family WHMCS module: WHMCS deployment, connecting your Jellyfin server, creating the product and configuring the access policy.

# WHMCS setup (install/update)

### Jellyfin Family module **[WHMCS](https://puqcloud.com/link.php?id=77)**
#####  [Order now](https://puqcloud.com/whmcs-module-jellyfin-family.php) | [Download](https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/) | [Community](https://community.puqcloud.com/)

## Technical requirements

The **PUQ Jellyfin Family** module is encoded with **ionCube Loader v13** (or newer) and is published as a separate build for each supported PHP major version. Installation and updates follow the same procedure.

| PHP version | WHMCS version   | Module build |
|-------------|-----------------|--------------|
| PHP 7.4 | 8.11.0 -        | `php74` |
| PHP 8.1 | 8.11.0 +        | `php81` |
| PHP 8.2 (or newer) | 8.11.0 + and 9+ | `php82` |

> Pick the build that matches the **PHP runtime of your WHMCS server**, not the WHMCS version — PHP 8.2 and any newer PHP always use `php82`. Not sure which PHP version your WHMCS runs on? Check **Utilities → System → PHP Info** in the WHMCS admin area.

A reachable **Jellyfin server, version 10.11.10 or newer**, with an administrator account and an API key, is also required.

---

## Download

A separate build is published for each PHP major version. All versions and historical builds are available in the index:

- [https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/](https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/)

### Direct "latest" downloads

#### PHP 8.2

```bash
wget https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/php82/PUQ_WHMCS-Jellyfin-Family-latest.zip
```

#### PHP 8.1

```bash
wget https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/php81/PUQ_WHMCS-Jellyfin-Family-latest.zip
```

#### PHP 7.4

```bash
wget https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/php74/PUQ_WHMCS-Jellyfin-Family-latest.zip
```

---

## Installation

### Step 1: Extract the archive

On your WHMCS server (or locally, before uploading):

```bash
unzip PUQ_WHMCS-Jellyfin-Family-latest.zip
```

### Step 2: Deploy the module

Copy and replace the `puqJellyfinFamily` folder into the WHMCS servers module directory, so the module lives at `WHMCS_WEB_DIR/modules/servers/puqJellyfinFamily/`:

```
puqJellyfinFamily  →  WHMCS_WEB_DIR/modules/servers/puqJellyfinFamily/
```

Example:

```bash
cp -r puqJellyfinFamily /var/www/html/whmcs/modules/servers/
```

Make sure **ionCube Loader v13+** is enabled for the PHP version WHMCS runs on. On first load the module self-creates its database tables (`puq_license` and `puqJellyfinFamily_media_account`) — there is no SQL to run manually.

### Step 3: Next steps

1. [Add a Jellyfin server in WHMCS](02-create-new-server.md) — connect WHMCS to your Jellyfin server.
2. [Product configuration](03-product-configuration.md) — create the **PUQ Jellyfin Family** product, enter the license key and configure the access policy.

---

## Update

Installation and updates follow the same procedure. To update an existing installation:

1. Back up the WHMCS database and the `modules/servers/puqJellyfinFamily/` directory.
2. Download the new build that matches the current PHP version and overwrite all files in `modules/servers/puqJellyfinFamily/`.
3. Open any WHMCS admin page once — the module verifies and creates any missing database tables automatically.

> Upgrading from **v2.x**: no reconfiguration is required. The module reads existing product settings from the legacy `configoption2`–`configoption8` slots (including *Media Accounts Configuration* in `configoption2`) until you save the product once through the new form, at which point they are consolidated into `configoption24`.

> **Tip:** always back up your WHMCS installation before performing an update.


<!-- sync:a353a9c2c88ec6b4 -->

# Add a Jellyfin server in WHMCS

### Jellyfin Family module **[WHMCS](https://puqcloud.com/link.php?id=77)**
#####  [Order now](https://puqcloud.com/whmcs-module-jellyfin-family.php) | [Download](https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/) | [Community](https://community.puqcloud.com/)

Configure the connection to your Jellyfin server under **System Settings → Servers → Add New Server**.

| Field | Value |
|-------|-------|
| **Name** | A label for the server. |
| **Hostname / IP Address** | The Jellyfin server hostname or IP. |
| **Module** | `PUQ Jellyfin Family`. |
| **Username** | A Jellyfin **administrator** username. |
| **Password** | That administrator's password. |
| **Access Hash** | A Jellyfin **API key** (Jellyfin Dashboard → API Keys). |
| **Secure (SSL)** | Enable if Jellyfin is served over HTTPS. |
| **Port** | Jellyfin port (default `8096`, or `443` when SSL is enabled). |

In the **Server Details** section select **Module → PUQ Jellyfin Family**, fill in the **Username**, **Password** and **Access Hash** (API key), tick **Secure** for SSL and set the **Port**.

![Server Details — PUQ Jellyfin Family module + Test Connection](https://doc.puq.info/uploads/images/gallery/2026-07/embedded-image-zxvp0q8o.png)

Use **Test Connection** to confirm WHMCS can reach Jellyfin and authenticate. The module authenticates with the username / password + API key to obtain an access token, then calls `System/Info` to verify connectivity. On success some fields are auto-filled and the status shows **Connection successful**.

Finally, assign the server (or a server group that contains it) to your Jellyfin Family product under the product's **Module Settings**.


<!-- sync:5ad26040a29b5eda -->

# Product configuration

### Jellyfin Family module **[WHMCS](https://puqcloud.com/link.php?id=77)**
#####  [Order now](https://puqcloud.com/whmcs-module-jellyfin-family.php) | [Download](https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/) | [Community](https://community.puqcloud.com/)

Create a product of type **PUQ Jellyfin Family** (Setup → Products/Services), assign the Jellyfin server on the **Module Settings** tab, then configure the access policy in the injected configuration panel.

![Product configuration](https://doc.puq.info/uploads/images/gallery/2026-07/embedded-image-estg1row.png)

## Media Accounts Configuration
- **Count of media accounts** — how many additional **media accounts** (sub-users) the client may create under their main account. Leave empty or set to `0` to disable the feature for this product. When set to a positive number, a *Media Accounts* card appears in the client area where the client can add up to that many sub-users.

> Each media account is a separate Jellyfin user named `mainusername-name`. It inherits the product's playback / transcoding / Live TV / SyncPlay / session settings, but its library access is limited to a subset of the main account's libraries (chosen per media account). Setting the count to `0` removes all existing media accounts on the next *Change package*.

![Media Accounts Configuration](https://doc.puq.info/uploads/images/gallery/2026-07/embedded-image-dv9kerc2.png)

## Libraries Configuration
- **Use all libraries** — grant access to every library on the server (overrides the selection below).
- **Libraries** — the list of libraries is loaded live from the Jellyfin server assigned to the product's Server Group. Tick the libraries this product grants; use **Select all** to toggle everything, or **Reload** to refresh the list. Leaving everything unticked grants no library. If the server cannot be reached, a manual text box appears as a fallback (one library name per line). Ignored when "Use all libraries" is ON.

> The dynamic list requires the product to be saved with a Server Group that contains a reachable Jellyfin server. Until then the panel shows a hint to select and save a Server Group.

![Libraries — dynamic checkbox picker](https://doc.puq.info/uploads/images/gallery/2026-07/embedded-image-xwc3mppg.png)

## User Configuration
- **Streaming bitrate limit** — 1–60 Mbps (empty = unlimited).
- **SyncPlay access** — create & join groups / join groups / disabled.
- **Remote control of shared devices**, **Media downloads** — on/off.
- **Max user sessions** — `0` disables the limit.
- **Failed login attempts** — lockout threshold; `-1` disables it.
- **Username prefix / suffix** — wrap the generated username.

![User Configuration](https://doc.puq.info/uploads/images/gallery/2026-07/embedded-image-lsdo1uxq.png)

## Allow Playback
Toggle media playback, audio transcoding, video transcoding and video conversion without re-encoding.

![Allow Playback](https://doc.puq.info/uploads/images/gallery/2026-07/embedded-image-hdjx3ngt.png)

## Feature Access
Live TV access, Live TV recording management, and force transcoding of remote media sources.

![Feature Access](https://doc.puq.info/uploads/images/gallery/2026-07/embedded-image-uduhzwie.png)

## Links
- **Instruction / manual URL** — shown as the *User manual* link in the client area.

![Links](https://doc.puq.info/uploads/images/gallery/2026-07/embedded-image-65flmplt.png)

## Client Area
- **Show password** — show button / plain text / hidden.
- **Password generation** — `length:characters`, e.g. `8:23456789abcdABCD`.
- **Username format** — `standard` (`prefix<client_id>-<service_id>suffix`) or `custom`.
- **Custom username** — macro template: `{user_id}`, `{service_id}`, `{random_digit_x}`, `{random_letter_x}`, `{unixtime}`, `{year}`, `{month}`, `{day}`, `{hour}`, `{minute}`, `{second}`.

![Client Area settings](https://doc.puq.info/uploads/images/gallery/2026-07/embedded-image-akbuufrc.png)

Settings are stored as a single JSON document in `configoption24`. After saving, **Create/Change** actions push the resulting policy to Jellyfin.


<!-- sync:b5af15548622563e -->

