Skip to main content

Centre

License: MIT PyPI version Python Versions

Centre is your window position manager.

Take control of your windows by choosing where they appear, how they’re arranged, and what size they should be.

Consistency is centre's goal.

Preview

https://github.com/user-attachments/assets/d088a951-8c6b-4731-8228-80b063f1a6e5

What Centre Tries to Achieve

Centre was built for users who want consistent window placement across desktop sessions.

Install

pip install centre

Update

pip install -U centre

Start Centre Automatically

To do that, create a Windows Task Scheduler task.

Run the following command as Administrator in PowerShell/cmd to create a Task in Windows Task Scheduler.

schtasks /Create /TN "centre" /SC ONLOGON /TR "centre -s" /RL LIMITED /F

Usage

After your window configuration is ready, start the listener:

centre -s

The CLI

You can use the centre CLI to inspect open windows and read the active configuration.

Examples:

# List active windows, including their titles, sizes, and positions
centre -l

# Print the loaded configuration
centre -c

# Print the installed Centre version
centre -v

Automatic Configuration Reload

While Centre is running, it watches config.json for changes. Saving the file causes Centre to read the configuration again without restarting the process.

Window Configuration (config.json)

Your config will be created at the first startup in:

CMD

%USERPROFILE%\.centre\config.json

PowerShell

$env:USERPROFILE\.centre\config.json

The default config includes these values:

  • The resolution key is based on your display resolution.
{
    "presets": {
        "1920x1080": {}
    },
    "predefined_keybindings": {
        "enabled": true,
        "bindings": {
            "center": "ctrl+alt+d",
            "minimize": "ctrl+alt+m",
            "capture": "ctrl+alt+p",
            "ignore_preset": "ctrl+alt+i",
            "center_all": "ctrl+alt+a"
        }
    },
    "logging": false,
    "ignored_presets": []
}

Centre validates bindings against the predefined shortcut names. When Centre is updated, missing predefined shortcuts are added to config.json automatically on the next load. Unknown shortcut names are not accepted.

Window presets should be placed inside the "presets" object in config.json.

Capture a Window

Focus the window you want to capture and press ctrl+alt+p. Centre stores its current position and size under the current display resolution.

Captured windows are identified by their executable name without the .exe extension. The name is normalized to uppercase, for example:

  • notepad++.exe becomes NOTEPAD++
  • WindowsTerminal.exe becomes WINDOWSTERMINAL

Executable names remain stable when an application changes its window title, such as when switching tabs in Notepad++.

Capturing the same application again updates its existing preset.

Ignore a Window Preset

Focus the window you want Centre to ignore and press ctrl+alt+i. Centre adds the active application's executable name to ignored_presets.

Ignored applications are skipped when you press the center shortcut. Centre will not apply the application's custom preset or Default_Position.

To allow Centre to manage the application again, remove its executable name from ignored_presets in config.json.

Center All Configured Windows

Press ctrl+alt+a to apply presets to all currently open windows that have a matching entry under the current display resolution.

Centre skips open windows that do not have a named preset. Default_Position is only used by the regular center shortcut for the active window.


A window preset should look like this:

{
    "NOTEPAD++": {
        "LEFT": 224,
        "TOP": 168,
        "SIZE_X": 1473,
        "SIZE_Y": 697
    },
    "Default_Position": {
        "LEFT": 25,
        "TOP": 34,
        "SIZE_X": 1860,
        "SIZE_Y": 980
    }
}
  • Be sure to add Default_Position in your presets under the generated default resolution. When Centre does not find the active window in your presets, it uses Default_Position as the fallback size and position.

  • Default_Position is useful when you have a list of apps that you have set a custom position for, but intend to keep all other apps in one specific location.

Default Shortcuts

Action Shortcut Description
Center ctrl+alt+d Apply the active application's preset or Default_Position.
Minimize ctrl+alt+m Minimize the active window.
Capture ctrl+alt+p Save or update the active application's position and size.
Ignore ctrl+alt+i Add the active application to ignored_presets.
Center All ctrl+alt+a Apply presets to all matching open windows.

Your final config should look something like this:

{
    "presets": {
        "1920x1080": {
            "WINDOWSTERMINAL": {
                "LEFT": 224,
                "TOP": 168,
                "SIZE_X": 1473,
                "SIZE_Y": 697
            },
            "Default_Position": {
                "LEFT": 25,
                "TOP": 34,
                "SIZE_X": 1860,
                "SIZE_Y": 980
            }
        }
    },
    "predefined_keybindings": {
        "enabled": true,
        "bindings": {
            "center": "ctrl+alt+d",
            "minimize": "ctrl+alt+m",
            "capture": "ctrl+alt+p",
            "ignore_preset": "ctrl+alt+i",
            "center_all": "ctrl+alt+a"
        }
    },
    "logging": false,
    "ignored_presets": [
        "NOTEPAD++"
    ]
}

Caveats

Some windows may overlap even when they use the same configured position and size.

This is due to some apps having a bigger actual window than the rendered UI.

Window overlapping is now fixed with the Window-Capture implementation.

since version 0.2.0 with Window-Capture, it will not be an issue anymore.

Changelog

See CHANGELOG.md for release history.

License

This project is licensed under the MIT License. See LICENSE for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

centre-0.7.1.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

centre-0.7.1-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file centre-0.7.1.tar.gz.

File metadata

  • Download URL: centre-0.7.1.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for centre-0.7.1.tar.gz
Algorithm Hash digest
SHA256 2bfe62d8e3487f2b1798e31fbfb62084b286952a4bd2a6d83204861fbfc3e4f3
MD5 1db7271c9f89c6b11abe8889a635117d
BLAKE2b-256 91be3374bce379e5cfc1d24ac825e91bb459d8e08c0d85d7699c48429491cf7e

See more details on using hashes here.

File details

Details for the file centre-0.7.1-py3-none-any.whl.

File metadata

  • Download URL: centre-0.7.1-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for centre-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 69da43315628a59cbbd1e7dbdba54e5780210d2907821e3997325a8f9e1f68e7
MD5 fef1bc692c4935329c99ddb998976a0c
BLAKE2b-256 c8006e40f2d375f45d3e14044b0785840e8457ea14b8583a309b31d53491b43a

See more details on using hashes here.

Release history Release notifications | RSS feed

0.10.3

2 files

0.10.2

2 files

0.10.1

2 files

0.10.0

2 files

0.9.1

2 files

0.9.0

2 files

0.8.4

2 files

0.8.3

2 files

0.8.2

2 files

This release

0.7.1 This release

2 files

0.7.0

2 files

0.4.1

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page