Skip to content

v1.1.0

Latest

Choose a tag to compare

@geoffroy-noel-ddh geoffroy-noel-ddh released this 15 Oct 22:54

Highlights

This new release adds:

  • seven new operators;
  • reusable filter aliases can be defined in collections.json for sampling and parallelisation purpose;
  • exclusion filters;
  • operator-specific tagging system in clip names for transparent cascade of tranforms (gh-30);
  • ability to define pipelines of operations in collections.json;
  • support for openai-compatible inference engines instead of Ollama-specific interoperability;
  • support by some operators to skip a video on failure rather than stopping

Aknowledgements

Developments supported by the ISSA research project.

Added

  • [major] run_pipeline: new operator running a series of operators in sequence,
    as defined under meta.pipelines in the collections file, with support for skip (-k) gh-36
    and a stop_before param and operation property to stop the pipeline before a given operation.
  • [major] detect_speech_vad: new operator detecting voice segments in clip sound files with silero-vad.
  • [major] transcription_vad_sub: new operator writing clip transcriptions into srt files
    filtered by the voice segments, with optional splitting of long segments into cue-sized pieces,
    re-filtering of stale srts and dropping of short-overlap and hallucinated cues.
  • [major] sub_clips_ffmpeg: new operator burning subtitles onto clips,
    with outline and shadow for legibility on bright backgrounds,
    near-lossless fast x264 re-encoding defaults and symlinks for the clips with an empty srt file.
  • [major] separate_clips_ffmpeg: new operator splitting clips around programme separators
    into -prog clips, with a smart cut mode producing second-accurate near-lossless clips in a single re-encode.
  • [major] answer_separators_vlm: new operator listing the separators between distinct programmes in a video,
    with clip chunks cached under _chunks (cache_chunks param, off by default)
    and processing issues and invalid answers recorded in the output under stats.chunks.
  • [major] clip_full_video: new operator creating a clip covering the whole video by symlinking it,
    tagged with -full.
  • [minor] extract_sound_ffmpeg, transcribe_speech_parakeet and clip_full_video:
    support for skip (-k) and end-of-run summaries.
  • [minor] clip_full_video: skips ffprobe entirely when a full clip folder already exists,
    and reports the missing items.
  • [minor] base: the -f filter argument accepts multiple values separated by |,
    and named filters defined under the filters attribute of a collection.
  • [minor] base: the -e exclude argument skips the paths matching keywords,
    usable from the command line and from pipeline operations.
  • [minor] base: all operators ignore the paths with a component starting with _.
  • [minor] base: new params for prompting with videos: video_tokens, max_fps,
    the video media type and filter_questions, to only submit specific questions to a VLM.
  • [minor] base: the duration of any request to an LLM is now recorded.
  • [minor] base: LLM answers made of paragraphs ending with a json block
    are parsed by _parse_dirty_json, with unit tests.

Changed

  • [major] answer_clips: Breaking — answers questions about clips, not videos,
    with a clip_answers.json file alongside each clip;
    the answer_videos* operators are renamed to answer_clips*.
  • [major] answer_clips: answer_videos is now a pure abstract class:
    its logic lives in answer_clips_qwen3vl (qwen 3 vl)
    and answer_clips_vlm (thinking, video and other params),
    and more operators use the shared send_prompt_to_openai_api_from_params.
  • [major] sub_clips_ffmpeg: Breaking — burns the srt file produced
    by transcription_vad_sub instead of converting transcription.json.

Fixed

  • [minor] extract_sound_ffmpeg: now works with symlinked full clips.
  • [minor] answer_clips_vlm: the params of VLM requests are now sent properly to inference engines,
    with fps and max_frames moved to media_io_kwargs so vllm can read them.
  • [minor] base: a relative path to the video is now used for the VLM requests to llama-server.
  • [minor] answer_clips: the max_new_tokens param is renamed into max_tokens.
  • [minor] answer_clips: an empty filter_questions no longer filters out any question.
  • [minor] answer_clips: used strip instead of trim on strings (trim is not a Python method).
  • [minor] answer_separators_vlm: no longer crashes due to non-numeric usage data aggregation.
  • [minor] answer_separators_vlm: the missing payload metadata is added to the response,
    and the chunks metadata is moved to stats.
  • [minor] base and answer_separators_vlm: fixed nested quotation marks in strings.
  • [minor] base: send_prompt_to_openai_api_from_params better handles truncated responses,
    max_new_tokens and context_length.
  • [minor] base: _parse_dirty_json falls back to the trailing-json parser
    when the whole answer only looks like a single json block.
  • [minor] sub_clips_ffmpeg: subtitles are burned into a temporary file renamed on completion,
    to make the operation atomic.
  • [minor] separate_clips_ffmpeg: no longer reads the separators of the filtered out clips.
  • [minor] clip_full_video: uses the framesense log instead of print.
  • [minor] annotations: uses the correct log function, with the right paths to annotations files.
  • [minor] base and answer_frames_vlm: Python 3.11 compatibility,
    using different quote types inside f-string expressions.
  • [minor] ci: the codemeta-to-citation-cff workflow was using deprecated actions.