
A Qt Widgets desktop UI for exploring Python bytecode with pycdc/pycdas, inspecting native decompilation, and using AI fallback for unsupported code objects.
A Qt Widgets desktop UI for exploring Python bytecode with pycdc / pycdas, inspecting native decompilation results, importing Pyarmor oneshot output, and retrying unsupported code objects with AI fallback.
The app supports both Windows and Linux desktop environments.


.pyc / .pyo files directlyMergedNativeAICtrl+RThe app does not send the whole .pyc by default.
It builds a prompt from the currently selected code object, including:
That keeps fallback reconstruction focused on the selected node instead of the whole file.
The app currently prefers local executables next to the application binary and will look for:
pycdc.exepycdcpycdas.exepycdasin the same directory as the pycdc-studio application binary.
You can override them with environment variables:
PYCDC_STUDIO_PYCDCPYCDC_STUDIO_PYCDASThe app can import Pyarmor-protected projects by delegating to
Lil-House/Pyarmor-Static-Unpack-1shot.
Current integration flow:
oneshot/shot.py on a selected Pyarmor project directorypyarmor-1shot generate .1shot.das and .1shot.cdc.pyRelease packages are expected to bundle the Pyarmor oneshot toolchain and the required Python package dependencies automatically.
For local development, the current code first looks for bundled files next to the application package, and also supports a local clone at:
external/Pyarmor-Static-Unpack-1shot/oneshot/shot.pyand expects pyarmor-1shot / pyarmor-1shot.exe to be available in the same
directory as shot.py.
You also need a Python environment that can run shot.py, including
pycryptodome.
If your layout is different, you can still override it with environment variables:
PYCDC_STUDIO_PYARMOR_PYTHONPYCDC_STUDIO_PYARMOR_SHOTPYCDC_STUDIO_PYARMOR_PYTHONPATHPYCDC_STUDIO_PYARMOR_OUTPUT_ROOTExample:
git clone https://github.com/Lil-House/Pyarmor-Static-Unpack-1shot external/Pyarmor-Static-Unpack-1shot
cmake -S external/Pyarmor-Static-Unpack-1shot/pycdc -B external/Pyarmor-Static-Unpack-1shot/build
cmake --build external/Pyarmor-Static-Unpack-1shot/build --config Release
cmake --install external/Pyarmor-Static-Unpack-1shot/build --config Release
python -m pip install pycryptodome
pycdc-studioFile -> Import Pyarmor Project...pyarmor_runtime.1shot.* files to be imported into the workspaceNotes:
PYCDC_STUDIO_PYARMOR_OUTPUT_ROOT is set.Before using AI fallback, open Settings and configure at least:
Base URLAPI KeyModelThe current client expects an OpenAI-compatible API endpoint.
The settings dialog stores provider configuration with QSettings and falls back to environment variables when a field is empty.
Supported environment variables:
PYCDC_STUDIO_AI_BASE_URLPYCDC_STUDIO_AI_API_KEYPYCDC_STUDIO_AI_MODELPYCDC_STUDIO_AI_SYSTEM_PROMPTRequirements:
Example:
cmake -S . -B build
cmake --build build
pycdc-studio.pyc / .pyo file, or drag a folder into the windowFile -> Import Pyarmor Project... for a Pyarmor-protected projectSettings from the top-level menu and configure your AI model if you want to use AI fallbackRetry with AI on the selected node if native decompilation is incomplete or wrongLonger test cases are included under test/:
workflow_orchestrator.pyasync_batch_runner.pyplugin_config_resolver.pyThe repository tracks the source samples only.
To generate local .pyc files for drag-and-drop testing:
python test/compile_test_samples.py
That script writes the compiled bytecode into test/__pycache__/.
This project is still experimental.
The current Merged view is an honest mixed document:
It is not yet a full inline source merger.
This project integrates with pycdc / pycdas, whose upstream project is licensed under GPL-3.0.
pycdc: GPL-3.0pycdc / pycdas should include the GPL-3.0 noticepycdc repository and commit in THIRD_PARTY_NOTICES.txtSee the upstream project for full license details: