Desktop app
Describes DousenDesktop: how to sign in, what the main window shows, how to launch your DCCs, and how to configure and update the app.
DousenDesktop is a system-tray app that runs on every artist machine. It shows your Jira tasks, opens and submits their Perforce changelists, and launches your DCCs with the Dousen addon loaded. It also runs the local bridge relay that the DCCs and Unreal use to exchange events.
Start and finish an artist session
- Open DousenDesktop from the tray, sign in to your studio, and select the project. In Settings, check the project’s source root, workspace, and Unreal project.
- In My tasks, select the Jira issue you’re working on. Check its key and linked changelist before you open files for edit.
- Launch your DCC from the apps bar. If it isn’t there, set its executable under Settings → DCC Apps. Open your Unreal project as usual.
- Check that the apps show as connected. Then work in the source scene and publish as described in Publishing assets.
- On the Publish history tab, check the result. Before you submit, check the saved assets in Unreal and the files in your changelist.
- When you switch tasks or projects, check the new context in each running app. Relaunch an app under the new project if its launch paths or credentials need to change.
Run the setup wizard
The first time DousenDesktop runs on a machine, a full-window setup wizard opens before the tray icon and main window appear. After a welcome page, it has six steps:
- Server: Dousen Cloud or a self-hosted URL.
- Jira: base URL, email, and API token.
- Version Control: Perforce, or Git / Skip for now.
- Workspace: the Perforce depot path and client mapping. Desktop skips this step if you choose Git.
- Unreal Project: browse for a
.uprojectfile or let Dousen find one. - DCC Applications: scan for installed DCCs to register.
The Quick start walks through each step, including how Desktop creates the Perforce workspace. The wizard doesn’t open again by itself. To run it again, for example to point a machine at a different server or Perforce workspace, click Re-run Setup on the sign-in screen.
Signing in
If DousenDesktop has no valid cached session, it shows the sign-in screen. What you enter depends on the deployment mode:
- Cloud: sign in with your studio account email and password, or click Sign in with Browser. If your account belongs to more than one studio, the Choose Studio dialog lists each studio and your role in it before the sign-in completes.
- Self-hosted: enter your email and password. Desktop checks them against your studio’s DousenCore.
Sign in with Browser opens the Dousen Cloud sign-in page in your default browser and waits for it to return to Desktop. If you close the tab or abandon the sign-in, the button resets after 5 minutes.
Desktop refreshes tokens in the background, so an expired token doesn’t interrupt you. Dousen allows one active device per account. If you sign in on another machine, this machine notices at its next 60-second heartbeat or token refresh, shows Session active on another device. Please log in again., and returns to the sign-in screen. See Sessions, tokens, and single-device enforcement.
For admins: a person who signs in with their own account on a shared machine, such as a review station or a render box, is signed out of their own workstation. Give a shared machine its own Dousen account and license seat.
The main window
The main window opens after you sign in. To open it later, click the tray icon.
| Region | What it does |
|---|---|
| Header | The project picker, the Settings button, and the Sign Out button. The project you pick decides which conventions, validators, and pipeline settings your DCCs load. |
| Apps bar | One tile for each configured application, plus Add app, which opens Settings on the DCC Apps tab. A tile shows a green dot while that app is registered on the bridge. See Launching DCCs. |
| Publish summary | The latest publish with its destination and status. Review N needing attention opens the failed and unconfirmed results in Publish history. When nothing needs attention, the button says View publish history. |
| My tasks tab | Your assigned Jira issues, with a detail pane and changelist buttons. See My tasks and Jira tasks. |
| Publish history tab | Connected apps and the result of each publish. See Publish history and Follow a publish in Publish history. |
| Logs tab | The app’s own log, with a Clear button. |
| Status bar | On the left, the Perforce state: P4: <stream>, P4: <client> (classic),
P4: not connected, or P4: connection unavailable. On the right, the app version. See
Perforce. |
Closing the window hides it to the tray, and the bridge relay and background polling keep running. To exit, choose Quit in the tray menu.
My tasks
Search by Jira key or title, and use the status filter to narrow the list. Click Clear filters to reset them. My tasks loads your open issues 50 at a time. Click Load more tasks for the next page; automatic refresh pauses until you click Refresh. For the Jira query and the task details, see The My tasks tab.
When you select a task, Desktop shows its description on the right and sends the task to the connected DCCs, so select the project and task before you launch your application. The detail pane has these buttons:
- Open in Jira opens the issue in your browser.
- Open changelist opens a Perforce changelist for the task. It is disabled when one already exists.
- Submit changes opens a dialog for the submit message, then submits the task’s changelist.
- Restore shelved changes restores the most recent shelved changelist for the task into your workspace, if there is one.
The tab polls Jira every Task poll interval (Settings → Connection, 30 seconds by default) and reloads the shelved-changelist row on every poll. If Jira is unreachable, Desktop polls less often:
| Backoff level | Poll interval | When it applies |
|---|---|---|
| 0 (normal) | The configured interval | The default. Desktop returns to it as soon as a fetch succeeds. |
| 1 | The longer of the configured interval and 60 seconds | The first network failure, when Jira sends no HTTP response at all. A rejected sign-in stops polling instead (see below). |
| 2 (maximum) | The longer of the configured interval and 5 minutes | Another failure while Desktop is already backed off. |
While Desktop is backed off, one banner reads Offline — can’t reach Jira (reason). Retrying automatically. instead of an error for each poll. When the connection returns, the banner clears and Desktop shows Connection restored.
If Jira rejects your credentials, polling stops and the message Jira sign-in failed — check your Jira email and API token in Settings. appears. Fix the token in Settings → Jira to resume.
At startup, Desktop shows the last task list it saved to disk until the first fetch finishes, so your tasks appear even if Jira is briefly unreachable.
Publish history
The Publish history tab shows a chip for each connected application, followed by the result of each publish. For what each status line means, see Follow a publish in Publish history and Recover from a failed publish. Click Show connection events to list the last 20 events that the bridge relay handled, with their time, event type, and source and target application.
Logs
The Logs tab shows the app’s own log, up to 2000 blocks, with a Clear button. Look here first when a launch or a bridge event doesn’t do what you expect, for example to tell a connection problem from an import error.
The tray icon
| Menu item | What it does |
|---|---|
| Open Dousen | Shows and focuses the main window. Clicking the icon does the same. |
| Manage Account… | Opens <server>/portal/account in your browser. If no server is configured yet, it shows a
notification instead. |
| Check for Updates | Checks for an update now. See Automatic updates. |
| Quit | Exits the app. Closing the window only hides it. |
While apps are connected to the bridge, including Unreal, the icon shows a green badge with their number, or
9+ for ten or more. The badge updates every 3 seconds, and the tooltip lists the connected apps.
Notifications
Desktop shows a notification for two kinds of bridge event:
- Mesh exported or Texture exported, with the file name and source app.
- Opening in DCC, when another app such as Unreal asks Desktop to open a file.
Desktop collects events for 2 seconds after the first one, then shows one summary, such as 3 asset(s) exported, 1 DCC open request(s). A large publish doesn’t produce a notification for every file.
Launching DCCs
Launch DCCs from the apps bar. A DCC that you start another way has no Dousen addon.
Desktop passes the addon its project, task, sign-in, and bridge details in environment variables, which studio
scripts can also read. See Loading studio tools. Desktop
also sets P4PORT, P4USER, and P4CLIENT for the source repository’s Perforce
connection, DOUSEN_P4_ROUTES for the project’s Perforce routes, and DOUSEN_FBX_ROOT when the
project has a separate FBX location. See Source repositories.
Executable paths come from Settings → DCC Apps. Use Discover DCCs to fill them in automatically or enter them by hand. If a launch fails with Executable not found, correct the path there.
Desktop doesn’t open your Unreal project. Open it as usual while Desktop is running and signed in. If you add Unreal Editor to the apps bar, its tile shows a green dot while Unreal is connected.
When another app publishes a dcc.open event, Desktop opens the file in a DCC. Most of these events come
from Unreal’s Open in DCC command in the Content Browser. Desktop looks up the asset’s source record
in DousenCore and finds the local path from where the file is stored:
- Perforce: Desktop runs
p4 syncand thenp4 whereto get the path in your workspace. For an asset from a separate source repository, Desktop syncs the file through the source route. - Google Drive or OneDrive: Desktop joins the mount path from Settings → Connection with the stored relative path.
- Local: Desktop uses the last known path.
Desktop then finds the application whose ID matches the event’s preferred DCC in Settings → DCC Apps and launches it with the file.
If a DCC doesn’t open
If a DCC doesn’t open after a dcc.open event, check the Logs tab first. It records why
Desktop stopped:
- Could not resolve local path for source asset: the mount path or the Perforce workspace isn’t configured.
- Source file not found on disk: the resolved path doesn’t exist yet. This is common while Google Drive or OneDrive is still syncing.
- No registered DCC found for id: no application in Settings → DCC Apps matches the ID the event asked for.
Then click Show connection events on the Publish history tab. If the event isn’t listed, the source app didn’t publish it, or it uses a different relay port.
Settings dialog
Click Settings in the header to open the Settings dialog, which holds this machine’s settings. Project-wide conventions, validator rules, and pipeline settings are in the web portal. See Settings reference.
| Tab | Fields |
|---|---|
| Connection | Server URL (read-only for Dousen Cloud accounts); Request timeout (1–120 seconds, default 10); Task poll interval (5 seconds to 1 hour, default 30); Bridge relay port in the Bridge group (1024–65535, default 8766); the Google Drive and OneDrive mount paths; and Test Connection. The relay port sets the port of the RPyC bridge relay. |
| Support | Export Support Bundle… saves a small JSON status snapshot on your machine. The snapshot excludes credentials, account details, configuration, logs, file paths, asset data, and raw error messages. Review the file before you share it with support. |
| DCC Apps | The list of configured applications, with Add, Edit, and Remove (ID, name, executable, icon, launch arguments, and environment variables). Also Discover DCCs, which adds installs it finds, and Pulse connected indicator for the apps-bar dots. If your installer includes it, Install DousenClips — Maya animation clip exporter appears too. |
| Projects | Your local settings for each project. They are stored per user and not synced to the server: the
.uproject path, the source root and its location type (local disk, Perforce, Google Drive, or
OneDrive), and the Perforce server and workspace. For a project with a separate source repository, the
Source Repository group also has your P4 user, workspace, and local root, and a
Sign in to source Perforce button. The source server comes from DousenCore. See
Source repositories. You can also create a new project on DousenCore from
here. |
| Unreal | A fallback .uproject path. Install into .uproject in the Install
Plugin group copies the bundled DousenUE plugin into the project’s Plugins folder and
registers it in the .uproject. The Headless Import (UE Closed) group has a checkbox
to import with UnrealEditor-Cmd when Unreal isn’t running, and a path to that executable. |
| Jira | Base URL, Email, API Token, and Test Connection. See Jira tasks. |
Automatic updates
Desktop checks for updates 5 seconds after launch, unless it checked within the last 4 hours, and then every 4 hours. To check right away, choose Check for Updates in the tray menu. Each check fetches a signed JSON manifest over HTTPS that lists the version, download URL, size, SHA-256 hash, and signatures for each platform.
If there’s a newer version, the update dialog shows the version change and the release notes:
- Skip Version hides that version from later automatic checks. A manual check still reports it.
- Remind Later closes the dialog.
- Download & Install downloads the installer. The button then becomes Install & Restart.
Desktop trusts a download only if all three checks pass:
- The SHA-256 of the downloaded file matches the manifest.
- The Ed25519 signature on the manifest entry (version, platform, and hash) verifies against the public key built into the app.
- The Ed25519 signature on the installer verifies against the same key.
Desktop also refuses the update if the manifest URL or the download URL isn’t HTTPS, the hash is missing, or the build has no signing key.
Desktop saves the installer in an updates folder in the app’s local data folder. When you click
Install & Restart, it checks the file again, runs the installer, and quits. On Windows, the
installer runs silently from a hidden PowerShell script, asks for administrator approval unless the app is installed
for the current user, and starts Desktop again afterward. On Linux and macOS, Desktop opens the file with the system
handler.
Working offline
If Jira is unreachable, Desktop shows the saved task list and polls less often, as described in My tasks. If DousenCore is unreachable, Desktop saves two kinds of calls on disk and sends them later:
| Queued operation | When Desktop queues it |
|---|---|
upsertSourceAsset |
The call that records a mesh or texture export can’t reach DousenCore. |
openChangelist |
Opening a Perforce changelist for a task can’t reach DousenCore. |
Both calls are safe to send more than once. Desktop removes a queued call when the server accepts it or rejects it with a 4xx error, so a refused call isn’t retried forever. Desktop resends the queue after you sign in, after a token refresh, and after another of these calls succeeds. It drops a queued call that was saved for a different server or studio.
Desktop doesn’t queue submitChangelist, because it needs the changelist ID that the server assigned
when the changelist opened. Submitting always needs a connection.
If Desktop last reached a licensed DousenCore more than 14 days ago, which matches DousenCore’s license grace period, it refuses new operations instead of queuing them. Reconnect to a licensed server to use pipeline actions again.
Pre-configure machines (admin)
On a cloud studio, you can fill in the setup wizard’s server settings for artists with a
config bundle: a small JSON file with the keys org_id, control_plane_url,
and server_url. The rest of the wizard still runs. You can deliver the bundle in two ways:
--config-url <https-url>: pass a link on the command line, or build it into an installer shortcut. Desktop fetches the bundle and applies it on startup.- Drop
dousen-config.jsonin the working directory, the Downloads folder, the home folder, or the app’s configuration folder. Desktop uses the first file it finds and asks you to confirm before it applies it.
The bundle URL, and the control_plane_url and server_url inside it, must use
HTTPS. Plain HTTP is accepted
only for localhost and 127.0.0.1, for development. Applying a bundle switches the app to
cloud deployment mode.