OpenMontage/tools/analysis
Yiyabo b4bed5735a dashscope: fix multi-image download and complete idempotency keys
Address PR #240 review feedback from @calesthio:

1. dashscope_image: save EVERY returned image URL, not just the first.
   The tool advertised multiple_outputs and accepted n>1 but only read
   content[0], silently dropping paid outputs. Now collects all image
   URLs across choices/content and downloads each to a distinct indexed
   path (foo.png -> foo_1.png, foo_2.png, ...). images_generated now
   reflects the actual count downloaded.

   Per Qwen Cloud docs, a multi-output task is SUCCEEDED if at least one
   image is generated; choices with finish_reason != "stop" are skipped
   to avoid downloading partial/failed results.

2. Complete idempotency_key_fields so different requests no longer
   collide and reuse stale artifacts:
   - image: + negative_prompt, seed, prompt_extend, watermark
   - tts:   + instructions
   - asr:   + enable_words, language_hints

Adds 19 regression tests (114 total, all pass, no API keys needed):
- TestDashscopeImageMultiOutput: URL extraction across choices / within
  one choice / failed-choice skipping, path resolution for
  single/multi/no-extension, end-to-end multi-image download with a
  mocked 3-URL DashScope response verifying all 3 files land on disk,
  single-image legacy path behavior
- TestDashscopeIdempotencyKeys: field presence + key-differs-on-value
  for every newly added field across all three tools
2026-07-02 00:37:51 +08:00
..
__init__.py Initial release — OpenMontage: the first open-source agentic video production system 2026-03-29 08:25:17 -07:00
audio_energy.py Animation pipeline: AnimeScene engine, Ghibli-style compositions, audio energy tool, and README showcase 2026-03-31 17:40:50 -07:00
audio_probe.py One-key formula: AI images, TTS narration, auto music, subtitles, and self-review pipeline 2026-03-30 16:54:13 -07:00
composition_validator.py hyperframes: add HTML/CSS/GSAP as a parallel composition runtime 2026-04-18 18:37:00 -07:00
dashscope_asr.py dashscope: fix multi-image download and complete idempotency keys 2026-07-02 00:37:51 +08:00
face_tracker.py Talking-head pipeline: 8 new tools, Remotion TalkingHead composition, and skill rewrites 2026-04-01 10:00:15 -07:00
frame_sampler.py Add reference video input analysis workflow 2026-04-04 10:01:11 -07:00
scene_detect.py Initial release — OpenMontage: the first open-source agentic video production system 2026-03-29 08:25:17 -07:00
transcriber.py Initial release — OpenMontage: the first open-source agentic video production system 2026-03-29 08:25:17 -07:00
transcript_fetcher.py Add reference video input analysis workflow 2026-04-04 10:01:11 -07:00
video_analyzer.py Add per-scene motion classification to video analyzer 2026-04-04 11:33:33 -07:00
video_downloader.py Add reference video input analysis workflow 2026-04-04 10:01:11 -07:00
video_understand.py Initial release — OpenMontage: the first open-source agentic video production system 2026-03-29 08:25:17 -07:00
visual_qa.py Harden talking-head pipeline: Watch & Propose creative overlays, fix Round 1 gaps 2026-04-01 11:03:15 -07:00