sonilo-cli 0.14.3__tar.gz → 0.15.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sonilo-cli
3
- Version: 0.14.3
3
+ Version: 0.15.0
4
4
  Summary: Command-line interface for the Sonilo API: generate music and sound effects from text or video
5
5
  Project-URL: Repository, https://github.com/sonilo-ai/sonilo-python
6
6
  Author: Sonilo AI
@@ -8,7 +8,7 @@ License-Expression: MIT
8
8
  License-File: LICENSE
9
9
  Keywords: ai,cli,music,sfx,sonilo,text-to-music,video-to-music
10
10
  Requires-Python: >=3.9
11
- Requires-Dist: sonilo<0.16,>=0.15.0
11
+ Requires-Dist: sonilo<0.17,>=0.16.0
12
12
  Provides-Extra: dev
13
13
  Requires-Dist: pytest>=8; extra == 'dev'
14
14
  Requires-Dist: respx>=0.21; extra == 'dev'
@@ -293,6 +293,11 @@ command that produces no media file — nothing is generated:
293
293
  tr, vi, id` (`pt_br` is Brazilian Portuguese and `es_419` Latin American
294
294
  Spanish; plain `pt` and `es` stay unqualified, as does `ar`).
295
295
  - Source videos may be at most 300 seconds long.
296
+ - `--no-lipsync` leaves the picture completely untouched. By default the speaker's mouth is
297
+ re-rendered to match the dubbed speech; with this flag the video comes back at its original
298
+ resolution and frame rate and only the audio is replaced, so the mouths keep moving to the
299
+ original language. Use it for footage with no on-camera speaker, or when preserving the exact
300
+ original picture matters more than matching lip movement.
296
301
  - `--output` is a filename template, not a single destination: a dubbing task returns one video
297
302
  per language, so `--output clip.mp4` writes `clip.es.mp4`, `clip.fr.mp4`, etc.
298
303
  - Billing is per language, and dubbing has **no free trial runs** — see [Free trial](#free-trial)
@@ -277,6 +277,11 @@ command that produces no media file — nothing is generated:
277
277
  tr, vi, id` (`pt_br` is Brazilian Portuguese and `es_419` Latin American
278
278
  Spanish; plain `pt` and `es` stay unqualified, as does `ar`).
279
279
  - Source videos may be at most 300 seconds long.
280
+ - `--no-lipsync` leaves the picture completely untouched. By default the speaker's mouth is
281
+ re-rendered to match the dubbed speech; with this flag the video comes back at its original
282
+ resolution and frame rate and only the audio is replaced, so the mouths keep moving to the
283
+ original language. Use it for footage with no on-camera speaker, or when preserving the exact
284
+ original picture matters more than matching lip movement.
280
285
  - `--output` is a filename template, not a single destination: a dubbing task returns one video
281
286
  per language, so `--output clip.mp4` writes `clip.es.mp4`, `clip.fr.mp4`, etc.
282
287
  - Billing is per language, and dubbing has **no free trial runs** — see [Free trial](#free-trial)
@@ -4,13 +4,13 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "sonilo-cli"
7
- version = "0.14.3"
7
+ version = "0.15.0"
8
8
  description = "Command-line interface for the Sonilo API: generate music and sound effects from text or video"
9
9
  readme = "README.md"
10
10
  license = "MIT"
11
11
  requires-python = ">=3.9"
12
12
  authors = [{ name = "Sonilo AI" }]
13
- dependencies = ["sonilo>=0.15.0,<0.16"]
13
+ dependencies = ["sonilo>=0.16.0,<0.17"]
14
14
  keywords = ["sonilo", "cli", "music", "sfx", "text-to-music", "video-to-music", "ai"]
15
15
 
16
16
  [project.urls]
@@ -635,6 +635,9 @@ def cmd_dubbing(client: Sonilo, args: argparse.Namespace) -> None:
635
635
  video=args.video,
636
636
  video_url=args.video_url,
637
637
  languages=languages,
638
+ # Only sent when the flag is present, so the server keeps owning the
639
+ # default (lip sync on).
640
+ lipsync=False if args.no_lipsync else None,
638
641
  timeout=args.timeout,
639
642
  )
640
643
  if not result.outputs:
@@ -1010,6 +1013,16 @@ def build_parser() -> argparse.ArgumentParser:
1010
1013
  "es_419 Latin American Spanish; plain pt and es stay "
1011
1014
  "unqualified, as does ar.",
1012
1015
  )
1016
+ p_dub.add_argument(
1017
+ "--no-lipsync", dest="no_lipsync", action="store_true",
1018
+ help="Leave the picture completely untouched. By default the speaker's "
1019
+ "mouth is re-rendered to match the dubbed speech; with this the "
1020
+ "video comes back at its original resolution and frame rate and "
1021
+ "only the audio is replaced, so the mouths keep moving to the "
1022
+ "original language. Use it for footage with no on-camera speaker, "
1023
+ "or when preserving the exact original picture matters more than "
1024
+ "matching lip movement.",
1025
+ )
1013
1026
  p_dub.add_argument(
1014
1027
  "--output", default=None,
1015
1028
  help="Filename template; one file is written per language with the code "
File without changes
File without changes