{"id":51166185,"url":"https://github.com/dario-gms/diskforge","last_synced_at":"2026-06-26T19:01:01.087Z","repository":{"id":340873350,"uuid":"1167809615","full_name":"dario-gms/DiskForge","owner":"dario-gms","description":"Universal Virtual Disk Converter for Windows (GUI for qemu-img)","archived":false,"fork":false,"pushed_at":"2026-02-26T23:00:38.000Z","size":10633,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-27T04:53:14.835Z","etag":null,"topics":["hypervisor","kvm","qcow2","qemu","raw","vdi","vhd","vhdx","virtualbox","vmdk","vmware"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dario-gms.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-26T17:54:00.000Z","updated_at":"2026-02-26T23:00:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dario-gms/DiskForge","commit_stats":null,"previous_names":["dario-gms/diskforge"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/dario-gms/DiskForge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dario-gms%2FDiskForge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dario-gms%2FDiskForge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dario-gms%2FDiskForge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dario-gms%2FDiskForge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dario-gms","download_url":"https://codeload.github.com/dario-gms/DiskForge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dario-gms%2FDiskForge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34829415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hypervisor","kvm","qcow2","qemu","raw","vdi","vhd","vhdx","virtualbox","vmdk","vmware"],"created_at":"2026-06-26T19:00:59.603Z","updated_at":"2026-06-26T19:01:01.060Z","avatar_url":"https://github.com/dario-gms.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# ◈ DiskForge\n\n**Conversor universal de discos virtuais para Windows**\n\nConverta discos entre qualquer combinação de formatos — RAW, QCOW2, VMDK, VDI, VHDX, VHD e mais — com interface gráfica profissional, sem linha de comando.\n\n[![Python](https://img.shields.io/badge/Python-3.8%2B-4d7cfe?style=flat-square\u0026logo=python\u0026logoColor=white)](https://python.org)\n[![Windows](https://img.shields.io/badge/Windows-10%2F11-4d7cfe?style=flat-square\u0026logo=windows\u0026logoColor=white)](https://microsoft.com/windows)\n[![Licença](https://img.shields.io/badge/Licen%C3%A7a-MIT-27c87a?style=flat-square)](LICENSE)\n[![Versão](https://img.shields.io/badge/Vers%C3%A3o-1.1.0-f5a623?style=flat-square)]()\n\n\u003c/div\u003e\n\n---\n\n## Índice\n\n- [Sobre](#sobre)\n- [Formatos suportados](#formatos-suportados)\n- [Requisitos](#requisitos)\n- [Instalação e uso](#instalação-e-uso)\n- [Interface](#interface)\n- [Como usar](#como-usar)\n- [Usando os arquivos gerados](#usando-os-arquivos-gerados)\n- [Arquitetura técnica](#arquitetura-técnica)\n- [Solução de problemas](#solução-de-problemas)\n- [Glossário](#glossário)\n- [Licença](#licença)\n\n---\n\n## Sobre\n\nDiskForge é uma ferramenta desktop para Windows que simplifica a migração de máquinas virtuais entre hypervisors. Ela envolve o motor padrão da indústria `qemu-img` em uma interface gráfica limpa, com conversor universal entre todos os formatos suportados, progresso em tempo real e log detalhado.\n\nA aplicação é distribuída como **um único arquivo Python** com o `qemu-img` já embutido na pasta `tools/qemu/` — sem instalador, sem download de dependências, sem linha de comando.\n\n---\n\n## Formatos suportados\n\n| Formato | Extensão | Hypervisor / Uso | Obs |\n|---------|----------|-----------------|-----|\n| **RAW / IMG** | `.img` | Universal — QEMU, VirtualBox, dd | Imagem setor a setor, bootável |\n| **QCOW2** ⭐ | `.qcow2` | QEMU / KVM | Recomendado — suporta snapshots e compressão |\n| **VMDK** | `.vmdk` | VMware, VirtualBox, QEMU | Formato mais compatível entre hypervisors |\n| **VDI** | `.vdi` | VirtualBox | Formato nativo do Oracle VirtualBox |\n| **VHDX** | `.vhdx` | Hyper-V (geração 2) | Microsoft — Windows Server / Azure |\n| **VHD / VPC** | `.vhd` | Hyper-V legado / Virtual PC | Microsoft — sistemas mais antigos |\n| **QCOW** | `.qcow` | QEMU (legado) | Versão 1 do formato QCOW |\n| **QED** | `.qed` | QEMU (legado) | QEMU Enhanced Disk — descontinuado |\n| **Parallels HDD** | `.hdd` | Parallels Desktop (Mac) | Migração de Parallels para outros hypervisors |\n\nQualquer combinação de entrada e saída é suportada. Por exemplo: VMDK → QCOW2, VDI → VHDX, RAW → VMDK, etc.\n\n---\n\n## Requisitos\n\n| Componente | Versão |\n|-----------|--------|\n| Sistema operacional | Windows 10 ou 11 (64-bit) |\n| Python | **Não necessário** (embutido no executável) |\n| Conexão com internet | **Não necessária** |\n| Espaço em disco | ~80-150 MB para o DiskForge.exe + tamanho da imagem gerada |\n\n---\n\n## Instalação e uso\n\n### 1. Baixe o DiskForge\n\nBaixe e extraia o `DiskForge-1.1.0-Windows.zip`. Dentro dele você encontrará:\n\n```\nDiskForge-1.1.0-Windows/\n└── DiskForge.exe     ← Execute este arquivo!\n```\n\n### 2. Execute\n\nDê **duplo clique em `DiskForge.exe`**. Pronto! A janela abrirá imediatamente com a ferramenta pronta para uso.\n\nNão requer:\n- ❌ Instalar Python\n- ❌ Abrir terminal\n- ❌ Configurar nada\n- ❌ Estar conectado à internet\n\n**É só duplo clique!** 🚀\n\n---\n\n## Interface\n\n```\n┌──────────────┬─────────────────────────────────────────────────────┐\n│              │  Conversor Universal de Discos                      │\n│  ◈ DiskForge │  Converta entre qualquer combinação de formatos     │\n│  v1.2.0      ├──────────────────────────────────────────────────── │\n│              │  ┌──────────────────┐  →  ┌──────────────────────┐  │\n│  FERRAMENTAS │  │ FORMATO ENTRADA  │     │   FORMATO DE SAÍDA   │  │\n│  ● qemu-img  │  │  .vmdk  VMDK     │     │  .qcow2  QCOW2  ★    │  │\n│              │  └──────────────────┘     └──────────────────────┘  │\n│  FORMATOS    ├──────────────────────────────┬────────────────────── │\n│  .img  RAW   │  Arquivo de Origem           │  ETAPAS              │\n│  .qcow2 ★    │  Arquivo de Destino          │  ○ Validar origem    │\n│  .vmdk       │                              │  ◉ Converter         │\n│  .vdi        ├──────────────────────────────┴────────────────────── │\n│  .vhdx       │  47.3%     Decorrido: 23s          ETA: 31s         │\n│  .vhd        │  ████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░          │\n│  .qcow       ├─────────────────────────────────────────────────────│\n│  .qed        │  SAÍDA                                     limpar   │\n│  .hdd        │  [14:23:39] ℹ Iniciando: VMDK → QCOW2              │\n│              │  [14:23:54] ✓ Arquivo gerado (30.0 GB)              │\n├──────────────┴─────────────────────────────────────────────────────┤\n│  Pronto.                               ▶ Iniciar Conversão         │\n└────────────────────────────────────────────────────────────────────┘\n```\n![DiskForge](resources/images/diskforge.png)\n\n### Seletor de formato\n\nClique no card de **FORMATO DE ENTRADA** ou **FORMATO DE SAÍDA** para abrir o menu dropdown com todos os formatos disponíveis. Cada opção mostra a extensão, o nome do formato e uma breve descrição. O QCOW2 é marcado com ★ como formato recomendado para uso com QEMU/KVM.\n\n### Sidebar\n\nExibe o status do `qemu-img` (● verde = pronto, ✕ vermelho = não encontrado) e a lista de todos os formatos suportados.\n\n### Barra de progresso\n\nMostra percentual, tempo decorrido e ETA calculados a partir do throughput atual.\n\n### Log de saída\n\nCada linha tem timestamp e ícone:\n\n| Ícone | Tipo | Significado |\n|-------|------|-------------|\n| `ℹ` | info | Mensagens de status |\n| `✓` | ok | Confirmações de sucesso |\n| `⚠` | warn | Avisos não fatais |\n| `✗` | error | Erros que interromperam a operação |\n| `·` | log | Saída bruta do qemu-img |\n\n---\n\n## Como usar\n\n1. **Selecione o formato de entrada** clicando no card \"FORMATO DE ENTRADA\" e escolhendo o formato do seu arquivo de origem.\n\n2. **Selecione o formato de saída** clicando no card \"FORMATO DE SAÍDA\" e escolhendo o formato desejado.\n\n3. **Selecione o arquivo de origem** clicando em *Procurar* no campo \"Arquivo de Origem\". O tamanho do arquivo será exibido abaixo.\n\n4. **Confirme o destino** — o caminho de saída é sugerido automaticamente com o sufixo `_converted` e a extensão correta. Pode ser alterado manualmente.\n\n5. **Clique em ▶ Iniciar Conversão** e acompanhe o progresso em tempo real.\n\n\u003e **Nota:** Não é possível converter um formato para ele mesmo. Se os formatos de entrada e saída forem iguais, o DiskForge avisará antes de iniciar.\n\n---\n\n## Usando os arquivos gerados\n\n### Importar QCOW2 no QEMU/KVM\n\n```bash\nvirt-install --disk path=disco.qcow2,format=qcow2 ...\n# ou simplesmente especifique o arquivo ao criar a VM no virt-manager\n```\n\n### Importar VMDK no VMware\n\nCrie uma nova VM no VMware Workstation ou Player. Quando solicitado a selecionar um disco, escolha **\"Use an existing virtual disk\"** e selecione o `.vmdk` gerado.\n\n### Inicializar `.img` diretamente com QEMU\n\n```bash\nqemu-system-x86_64 -hda disco_converted.img -m 2048 -enable-kvm\n```\n\n### Converter RAW de volta para VDI (VirtualBox)\n\n```powershell\nVBoxManage convertfromraw \"disco.img\" \"disco.vdi\" --format VDI\n```\n\n---\n\n## Arquitetura técnica\n\n### Stack\n\n| Camada | Tecnologia |\n|--------|-----------|\n| Distribuição | `PyInstaller 6.x` — Executável Windows compilado, autocontido |\n| Interface gráfica | `tkinter` (stdlib Python) — widgets customizados com `Canvas` e `Toplevel` |\n| Motor de conversão | `qemu-img` embutido no executável |\n| Threading | `threading.Thread` — conversão em thread separada; polling via `Tk.after(80ms)` |\n| Comunicação entre threads | `queue.Queue` — passagem de mensagens thread-safe |\n| Controle de processos | `subprocess.Popen` com `CREATE_NO_WINDOW`; stdout lido linha a linha |\n| HiDPI | `SetProcessDpiAwareness(1)` via `ctypes.windll.shcore` |\n\n### Comando executado\n\nPara qualquer conversão de formato A para formato B:\n\n```\nqemu-img convert -p -f \u003cformato_entrada\u003e -O \u003cformato_saída\u003e \u003corigem\u003e \u003cdestino\u003e\n```\n\n### Parsing de progresso\n\n```python\nre.search(r\"\\((\\d+(?:\\.\\d+)?)/100%\\)\", line)\n```\n\nO ETA é calculado a partir do tempo decorrido e do percentual atual:\n\n```python\ntotal_estimado = tempo_decorrido / (pct / 100)\neta = total_estimado - tempo_decorrido\n```\n\n---\n\n## Solução de problemas\n\n### Não consigo executar o arquivo\n\n- Verifique se é realmente `DiskForge.exe` (e não `DiskForge.spec` ou outro arquivo)\n- Tente clicar com botão direito → \"Executar como administrador\"\n- Verifique se não foi bloqueado (clique direito → Propriedades → Desbloquear)\n\n### Antivírus bloqueia o arquivo\n\nPyInstaller às vezes causa falsos positivos em antivírus. Isso é normal. Você pode:\n1. Adicionar uma exclusão para `DiskForge.exe` no seu antivírus\n2. Reportar o arquivo ao fabricante do antivírus como falso positivo\n\n### Conversão falha ou não inicia\n\nVerifique se você tem espaço em disco suficiente para a imagem de saída. Uma conversão de disco de 100 GB precisa de 100+ GB livres no disco.\n\n### Arquivo de saída maior que o esperado\n\nImagens RAW sempre têm o tamanho total do disco virtual, independente do espaço realmente usado. Um disco de 100 GB com 10 GB de dados gera um `.img` de 100 GB. Use QCOW2 para obter compressão automática.\n\n---\n\n## Glossário\n\n| Termo | Definição |\n|-------|-----------|\n| **RAW / IMG** | Cópia setor a setor de um disco. Contém tabela de partições, bootloader e todos os dados. Sem compressão. Compatível universalmente. |\n| **QCOW2** | Formato nativo do QEMU com suporte a snapshots, compressão e alocação dinâmica. Recomendado para uso com QEMU/KVM. |\n| **VMDK** | Virtual Machine Disk — formato de disco usado pelo VMware e amplamente suportado. |\n| **VDI** | VirtualBox Disk Image — formato nativo do Oracle VirtualBox. |\n| **VHDX** | Virtual Hard Disk v2 — formato moderno da Microsoft para Hyper-V. |\n| **VHD / VPC** | Virtual Hard Disk legado da Microsoft — compatível com Hyper-V e Azure. |\n| **qemu-img** | Ferramenta de linha de comando do projeto QEMU para criar, converter e inspecionar imagens de disco. Suporta 40+ formatos. |\n| **Imagem inicializável** | Imagem que contém tabela de partições, MBR/GPT e bootloader — pode ser usada como disco de boot. |\n| **HiDPI** | Displays de alta densidade de pixels (ex: 4K). O DiskForge declara suporte a DPI para renderização nítida. |\n\n---\n\n## Licença\n\nEste projeto está licenciado sob a **Licença MIT** — veja o arquivo [LICENSE](LICENSE) para detalhes.\n\n\u003e **Nota sobre dependências:** O `qemu-img` é distribuído sob a [GNU General Public License v2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html). O DiskForge distribui o binário `qemu-img.exe` junto ao pacote. O código-fonte do QEMU está disponível em [qemu.org](https://www.qemu.org). O DiskForge não modifica nem incorpora o código-fonte do QEMU.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\nFeito com Python e tkinter · Motor de conversão: [QEMU](https://www.qemu.org/) · Build Windows: [Stefan Weil](https://qemu.weilnetz.de)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdario-gms%2Fdiskforge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdario-gms%2Fdiskforge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdario-gms%2Fdiskforge/lists"}