Observed since 20 Oct, 18:06 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
acedata-sora-cli
CLI tool for Sora AI Video Generation via AceDataCloud API
A command-line tool for AI video generation using Sora through the AceDataCloud API.
Generate AI videos directly from your terminal — no MCP client required.
--json for pipingGet your API token from AceDataCloud Platform:
# Install with pip
pip install acedata-sora-cli
# Or with uv (recommended)
uv pip install acedata-sora-cli
# Or from source
git clone https://github.com/AceDataCloud/SoraCli.git
cd SoraCli
pip install -e .
# Set your API token
export ACEDATACLOUD_API_TOKEN=your_token_here
# Or use .env file
cp .env.example .env
# Edit .env with your token
# Generate a video
sora generate "A test video"
# Generate from reference image
sora image-to-video "Animate this scene" -i https://example.com/photo.jpg
# Check task status
sora task <task-id>
# Wait for completion
sora wait <task-id> --interval 5
# List available models
sora models
| Command | Description |
|---|---|
sora generate <prompt> | Generate a video from a text prompt |
sora image-to-video <prompt> -i <url> | Generate a video from reference image(s) |
sora task <task_id> | Query a single task status |
sora tasks <id1> <id2>... | Query multiple tasks at once |
sora wait <task_id> | Wait for task completion with polling |
sora models | List available Sora models |
sora config | Show current configuration |
sora orientations | List available orientations |
sora sizes | List available video sizes |
--token TEXT API token (or set ACEDATACLOUD_API_TOKEN env var)
--version Show version
--help Show help message
Most commands support:
--json Output raw JSON (for piping/scripting)
--model TEXT Sora model version (default: sora-2)
| Model | Version | Notes |
|---|---|---|
sora-2 | Standard | Fast generation, good quality (default) |
sora-2-pro | Pro | Highest quality, more detailed |
| Variable | Description | Default |
|---|---|---|
ACEDATACLOUD_API_TOKEN | API token from AceDataCloud | Required |
ACEDATACLOUD_API_BASE_URL | API base URL | https://api.acedata.cloud |
SORA_DEFAULT_MODEL | Default model | sora-2 |
SORA_REQUEST_TIMEOUT | Timeout in seconds | 1800 |
git clone https://github.com/AceDataCloud/SoraCli.git
cd SoraCli
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,test]"
pytest
pytest --cov=sora_cli
pytest tests/test_integration.py -m integration
ruff format .
ruff check .
mypy sora_cli
docker pull ghcr.io/acedatacloud/acedata-sora-cli:latest
docker run --rm -e ACEDATACLOUD_API_TOKEN=your_token \
ghcr.io/acedatacloud/acedata-sora-cli generate "A test video"
SoraCli/
├── sora_cli/ # Main package
│ ├── __init__.py
│ ├── __main__.py # python -m sora_cli entry point
│ ├── main.py # CLI entry point
│ ├── core/ # Core modules
│ │ ├── client.py # HTTP client for Sora API
│ │ ├── config.py # Configuration management
│ │ ├── exceptions.py # Custom exceptions
│ │ └── output.py # Rich terminal formatting
│ └── commands/ # CLI command groups
│ ├── video.py # Video generation commands
│ ├── task.py # Task management commands
│ └── info.py # Info & utility commands
├── tests/ # Test suite
├── .github/workflows/ # CI/CD (lint, test, publish to PyPI)
├── Dockerfile # Container image
├── deploy/ # Kubernetes deployment configs
├── .env.example # Environment template
├── pyproject.toml # Project configuration
└── README.md
| Feature | Sora CLI | MCP Sora |
|---|---|---|
| Interface | Terminal commands | MCP protocol |
| Usage | Direct shell, scripts, CI/CD | Claude, VS Code, MCP clients |
| Output | Rich tables / JSON | Structured MCP responses |
| Automation | Shell scripts, piping | AI agent workflows |
| Install | pip install acedata-sora-cli | pip install mcp-sora |
Both tools use the same AceDataCloud API and share the same API token.
Contributions are welcome! Please:
git checkout -b feature/amazing)git commit -m 'Add amazing feature')git push origin feature/amazing)pip install -e ".[all]"ruff check . && ruff format --check .pytestThis project is licensed under the MIT License — see the LICENSE file for details.
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
clickEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | click>=8.1.0 | runtime |
httpxEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | httpx>=0.27.0 | runtime |
pydanticEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pydantic>=2.0.0 | runtime |
python-dotenvEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | python-dotenv>=1.0.0 | runtime |
richEnvironment{
"extras": "",
"marker": null,
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | rich>=13.0.0 | runtime |
sora-cliEnvironment{
"extras": "dev,release,test",
"marker": "extra == \"all\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | sora-cli[dev,release,test]; extra == "all" | runtime |
mypyEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | mypy>=1.10.0; extra == "dev" | runtime |
pre-commitEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pre-commit>=3.7.0; extra == "dev" | runtime |
ruffEnvironment{
"extras": "",
"marker": "extra == \"dev\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | ruff>=0.4.0; extra == "dev" | runtime |
buildEnvironment{
"extras": "",
"marker": "extra == \"release\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | build>=1.2.0; extra == "release" | runtime |
twineEnvironment{
"extras": "",
"marker": "extra == \"release\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | twine>=6.1.0; extra == "release" | runtime |
pytest-asyncioEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest-asyncio>=0.23.0; extra == "test" | runtime |
pytest-covEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest-cov>=5.0.0; extra == "test" | runtime |
pytestEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | pytest>=8.0.0; extra == "test" | runtime |
respxEnvironment{
"extras": "",
"marker": "extra == \"test\"",
"requires_python": ">=3.10",
"evaluation": "NOT_EVALUATED"
} | respx>=0.21.0; extra == "test" | runtime |
bdist_wheel · 13.55 KB · Python py3
sdist · 13.23 KB · Python source
Observed since 20 Oct, 18:06 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:3a9b66cef4e741c994b26be5bcb6f61141d86e07c630f4503733ec7bf403fe22