Skip to content

Repository files navigation

Kitsu Task Panel

A lightweight task viewer and status manager for artists, integrated with Kitsu via gazu.

Runs inside Nuke, Maya, Houdini and standalone Python — a single file, one config.

Author: Eduardo Brandao — eduardo@bosonpost.com.br

License: MIT Python: 2.7 / 3.x


Features

  • View assigned tasks grouped into configurable tabs (TODO, RETAKE, PUBLISH…)
  • Sequence name on each card — identify shots across multiple sequences
  • Change task status directly from the panel with an optional comment
  • Due-date badge per card: OVERDUE / TODAY / TOMORROW / Xd
  • Days-open counter showing how long a task has been in its current status
  • Comment history with author name and date
  • Click any task to open it in the Kitsu web interface
  • Auto-login via environment variables
  • Fully configurable via a JSON file — no code changes needed

Requirements

Dependency How to get it
gazu pip install gazu or copy the gazu/ folder next to the scripts
requests usually bundled with gazu; pip install requests otherwise
PySide2, PySide6 or PySide (Nuke 10) provided by your DCC; install PySide2 for standalone

Installation

1 — Copy the files

your_pipeline_folder/
├── kitsu_task_panel.py
├── kitsu_task_launch.py
├── kitsu_task_panel_config.json        ← copy from .example and edit
├── kitsu_task_panel_config.json.example
├── kitsu_task_context_detection.py
├── gazu/                               ← gazu library folder (or installed via pip)
└── requests/                           ← requests library folder (or installed via pip)

Tip: if gazu and requests are installed system-wide via pip, you can leave out those folders and remove them from sys_paths in the config.


2 — Edit kitsu_task_panel_config.json

Copy kitsu_task_panel_config.json.example to kitsu_task_panel_config.json and fill in your values:

{
    "kitsu_host":     "https://your-kitsu-server.com/api",
    "kitsu_base_url": "https://your-kitsu-server.com",

    "env_user_var": "KITSU_USER",
    "env_pass_var": "KITSU_PASS",

    "sys_paths": [
        "/path/to/your_pipeline_folder",
        "/path/to/your_pipeline_folder/gazu",
        "/path/to/your_pipeline_folder/requests"
    ],

    "tabs": {
        "TODO": {
            "label":          "TODO",
            "statuses":       ["todo", "work in progress", "wip"],
            "allowed_status": ["Work In Progress"],
            "badge": "#4CAF50", "border": "#2E5E2E", "bg": "#1A221A"
        },
        "RETAKE": {
            "label":          "RETAKE",
            "statuses":       ["retake"],
            "allowed_status": ["Work In Progress"],
            "badge": "#E53935", "border": "#5E2E2E", "bg": "#221A1A"
        },
        "PUBLISH": {
            "label":          "PUBLISH",
            "statuses":       ["to publish", "publish"],
            "allowed_status": ["Published"],
            "badge": "#2196F3", "border": "#1A3055", "bg": "#1A1E28"
        }
    }
}

statuses — Kitsu status names (case-insensitive) that should appear in this tab.
allowed_status — status names shown in the change-status dropdown. Must match your Kitsu server exactly (check Settings → Task Statuses in Kitsu).


3 — Set environment variables for auto-login

Variable Value
KITSU_USER your Kitsu email
KITSU_PASS your Kitsu password

Set them in your OS, render farm or DCC launch script. If they are not set, the panel shows a login dialog on startup.


4 — Add a shelf button in your DCC

The snippet below works in Nuke, Maya, Houdini without modification. Only the first sys.path.insert line needs to point to your pipeline folder.

import sys
sys.path.insert(0, "/path/to/your_pipeline_folder")
import kitsu_task_launch, importlib
importlib.reload(kitsu_task_launch)
kitsu_task_launch.launch()

Nuke — paste into a Python Toolbar button.
Maya — paste into a Shelf button (Python tab).
Houdini — create a Shelf tool, paste into the Script tab.


Adding support for a new DCC

Step 1 — Detect the DCC in kitsu_task_context_detection.py

Add a detection block before return "standalone":

try:
    import your_dcc_module
    return "your_dcc"
except ImportError:
    pass

Step 2 — Get the main window in kitsu_task_panel.py

Find _get_main_dcc_window() and add a branch:

elif _DCC == "your_dcc":
    try:
        import your_dcc_module
        return your_dcc_module.qt.mainWindow()
    except Exception as e:
        print("KitsuTaskPanel: could not get your_dcc main window: " + str(e))

The panel will parent itself to that window, or float freely if you return None.

Common patterns for getting the main window

DCC Code
Houdini hou.qt.mainWindow()
Maya shiboken2.wrapInstance(int(OpenMayaUI.MQtUtil.mainWindow()), QWidget)
Nuke iterate app.topLevelWidgets() for Foundry::UI::DockMainWindow
Standalone None

Event loop: never call app.exec() inside a DCC. The panel only calls it when _DCC == "standalone".


Configuration reference

Key Type Description
kitsu_host string Full API URL, e.g. https://your-server.com/api
kitsu_base_url string Base URL without /api, used for browser links
env_user_var string OS env var name for the login email (default: KITSU_USER)
env_pass_var string OS env var name for the password (default: KITSU_PASS)
sys_paths list Paths prepended to sys.path before importing gazu
tabs object Tab definitions — see below

Tab definition

Key Type Description
label string Text shown on the tab button
statuses list Kitsu status names (case-insensitive) that belong to this tab
allowed_status list Status names shown in the change-status dropdown
badge hex color Accent color (left bar + tab indicator)
border hex color Card border color
bg hex color Card background color

File overview

File Purpose
kitsu_task_panel.py Main UI and logic
kitsu_task_launch.py Entry point — use this in your shelf button
kitsu_task_context_detection.py Detects active DCC — shared with Kitsu Publisher
kitsu_task_panel_config.json Your studio config (excluded from git)
kitsu_task_panel_config.json.example Template to copy and edit

License

MIT — free to use, modify and distribute.

About

Kitsu task viewer and status manager for artists — works in Nuke, Maya, Houdini

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages