Skip to content

Instantly share code, notes, and snippets.

@gibilli111
Last active August 26, 2026 09:23
Show Gist options
  • Select an option

  • Save gibilli111/eed521cfa7c0be8be8032225da890daa to your computer and use it in GitHub Desktop.

Select an option

Save gibilli111/eed521cfa7c0be8be8032225da890daa to your computer and use it in GitHub Desktop.
Unlock all languages on Sony a6400/a6600 (region-locked cameras) — step-by-step guide + ready-to-use script

How to unlock all languages on Sony Alpha a6400 / a6600 (and similar)

If you have a grey-market / region-locked Sony camera where the language menu is missing languages like English or Italian, and the official PMCA-RE "tweak" tool tells you "No tweaks available", this guide is for you. No programming knowledge required — just follow the steps.

This has been tested and confirmed working on a Sony ILCE-6400. It should also work on the a6600 and possibly other cameras of the same generation, since they share the same USB service protocol.

Disclaimer: this writes directly to the camera's internal settings. It has worked reliably in testing, but you are doing this at your own risk. There is no official Sony support for this.

Why the normal method doesn't work

The standard PMCA-RE "tweak" command reads and writes your camera's entire settings file in one big transfer. On this camera generation, that big transfer crashes the USB connection, so the tweak tool gives up before it even starts.

This guide uses a different, smaller command that reads and writes one setting at a time instead of the whole file at once. That smaller command works fine on this camera, and it's exactly the command needed to unlock languages.

What you need

  • A Windows PC
  • A USB cable for your camera
  • Python installed (any recent version 3.x — during install, check "Add Python to PATH")
  • Zadig (a small tool to temporarily change your camera's USB driver)
  • The Sony-PMCA-RE tool (download the ZIP from the green "Code" button, or from the "master" branch)
  • This script: unlock_languages.py (place it in the same folder as pmca-console.py, after unzipping Sony-PMCA-RE)

Step 1 — Install Python and pyusb

After installing Python, open PowerShell (search "PowerShell" in the Start menu) and run:

pip install pyusb

Step 2 — Unzip Sony-PMCA-RE and add the script

  1. Unzip the Sony-PMCA-RE download somewhere, e.g. your Desktop.
  2. Copy unlock_languages.py into that same folder (the one containing pmca-console.py).

Step 3 — Connect the camera normally first

Turn on the camera and connect it via USB in normal Mass Storage / PC Remote mode (not any special mode). Windows should recognize it as a normal Sony camera/USB device.

Step 4 — Use Zadig to switch the USB driver

  1. Open Zadig.
  2. Go to Options → List All Devices and enable it.
  3. In the device dropdown, find your camera (it will be listed as something like "Sony DSC" or similar).
  4. Select the driver libusbK (this is the one that worked reliably in testing — if it doesn't work, libusb-win32 is the alternative).
  5. Click Replace Driver / Install Driver.

This only changes the driver for this one USB device, temporarily — it does not affect your other USB devices, and you can restore the original driver later the same way if you want the camera to work normally with other software again.

Step 5 — Open PowerShell in the Sony-PMCA-RE folder

Navigate to the folder where you unzipped Sony-PMCA-RE. The easiest way: open the folder in File Explorer, hold Shift and right-click inside it, choose "Open PowerShell window here".

Step 6 — Put the camera into service mode

Run:

python pmca-console.py serviceshell

The camera screen will go blank/change and it will re-enumerate as a different USB device (this is expected — it's now in a special diagnostic mode). Wait a few seconds.

Important: after this switch, you may need to reopen Zadig, find the new device listing (it may now show as "ILCE-XXXX" or a generic Sony device), and assign the libusbK driver to it too, the same way as Step 4. If the shell above starts up without errors and shows a > prompt, you can skip this and go straight to Step 7 in a new PowerShell window (leave the first one open, or type exit in it first).

Step 7 — Run the unlock script

In PowerShell (same folder), run:

python unlock_languages.py

The script will:

  1. Show you how many languages are currently enabled.
  2. Ask for confirmation (y / N) before changing anything.
  3. Enable all 35 languages.
  4. Save the change to the camera and verify it worked.

Type y and press Enter when it asks for confirmation.

Step 8 — Restart the camera

Turn the camera off, remove and reinsert the battery, turn it back on. Go to the language menu — you should now see all languages, including English and Italian.

Troubleshooting

  • NoBackendError: No backend available — pyusb couldn't find a USB driver library. Download libusb-1.0.dll (search for the official libusb releases) and place it in the same folder as pmca-console.py.
  • Senser adjust control error 129 — this means the camera's settings are write-protected. The script already handles unlocking this automatically; if you still see this error, try disconnecting, fully power-cycling the camera (remove the battery for a few seconds), and starting again from Step 6.
  • The connection drops / times out mid-way — this can happen, especially the first time. Power-cycle the camera (remove the battery), reconnect, and repeat from Step 6. No harm is done if a read/write fails partway — the camera keeps its previous settings until a write actually succeeds.
  • Zadig doesn't show the camera — make sure "List All Devices" is enabled in Zadig's Options menu, and that the camera is actually connected and powered on.
  • After you're done: if you want the camera to work normally with the official Sony software (Imaging Edge, etc.) again, open Zadig and restore the original driver for the camera's normal USB device, or simply uninstall the libusbK driver entry for that device from Windows Device Manager.

Why this works (short version, for the curious)

The camera's settings — including which languages are enabled — are stored as small individual values, one per setting, inside the camera's internal memory (called "Backup"). The language list uses 35 of these values (one per language), where 1 means enabled and 2 means disabled. This script reads and writes each of those 35 values directly, instead of going through the full settings file that crashes on this camera. A related, more technical write-up (aimed at the PMCA-RE developers) is here: ma1co/Sony-PMCA-RE#733.

# -----------------------------------------------------------------------
# Unlock all languages on Sony Alpha cameras (a6400 / a6600 and similar)
# where the official "tweak" command in PMCA-RE says "No tweaks available".
#
# HOW TO USE (see the guide for the full step-by-step version):
# 1. Put this file in the same folder as pmca-console.py
# 2. Connect the camera and put it in service mode (see guide)
# 3. Run: python pmca-console.py serviceshell -x unlock_languages.py
# (or just double-run it the way the guide describes)
#
# This script only touches the "language" setting. It asks for
# confirmation before writing anything to the camera.
# -----------------------------------------------------------------------
from pmca.commands.usb import senserShellCommand
from pmca.platform.backend.senser import SenserPlatformBackend
# Language slot IDs on this generation of cameras (35 languages).
BASE_ID = 0x010d008f
COUNT = 35
ENABLED = bytes([1])
DISABLED = bytes([2])
def run(camera):
backend = SenserPlatformBackend(camera)
backend.start()
try:
print("Reading current language settings...")
values = [backend.readBackup(BASE_ID + i)[0] for i in range(COUNT)]
enabled_count = sum(1 for v in values if v == 1)
print("Currently enabled languages: %d / %d" % (enabled_count, COUNT))
print("")
answer = input(
"This will ENABLE ALL %d languages on the camera. "
"Continue? [y/N]: " % COUNT
).strip().lower()
if answer != "y":
print("Cancelled. Nothing was changed.")
return
print("")
print("Unlocking backup protection...")
backend.setBackupProtection(False)
print("Writing all %d languages as enabled..." % COUNT)
ok = 0
for i in range(COUNT):
id = BASE_ID + i
try:
backend.writeBackup(id, ENABLED)
ok += 1
except Exception as e:
print(" slot %2d FAILED: %s" % (i, e))
print("%d / %d writes succeeded." % (ok, COUNT))
print("Re-locking backup protection...")
try:
backend.setBackupProtection(True)
except Exception as e:
print("Re-lock warning (usually harmless): %s" % e)
print("Saving to flash (syncBackup)...")
backend.syncBackup()
print("")
print("Verifying...")
values = [backend.readBackup(BASE_ID + i)[0] for i in range(COUNT)]
enabled_count = sum(1 for v in values if v == 1)
print("Languages now enabled: %d / %d" % (enabled_count, COUNT))
print("")
print("Done. Power-cycle the camera (remove and reinsert the battery),")
print("then check the language menu.")
finally:
backend.stop()
senserShellCommand(complete=run)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment