Skip to content

DYNAMIC_DURATION_GUIDE

Chuck edited this page Aug 12, 2025 · 1 revision

Dynamic Duration Feature - Complete Guide

The news manager now includes intelligent dynamic duration calculation that automatically determines the exact time needed to display all your selected headlines without cutting off mid-scroll.

How It Works

Automatic Calculation

The system calculates the perfect display duration by:

  1. Measuring Text Width: Calculates the exact pixel width of all headlines combined
  2. Computing Scroll Distance: Determines how far text needs to scroll (display width + text width)
  3. Calculating Time: Uses scroll speed and delay to compute exact timing
  4. Adding Buffer: Includes configurable buffer time for smooth transitions
  5. Applying Limits: Ensures duration stays within your min/max preferences

Real-World Example

With current settings (4 feeds, 2 headlines each):

  • Total Headlines: 8 headlines per cycle
  • Estimated Duration: 57 seconds
  • Cycles per Hour: ~63 cycles
  • Result: Perfect timing, no cut-offs

Configuration Options

Core Settings

{
  "news_manager": {
    "dynamic_duration": true,        // Enable/disable feature
    "min_duration": 30,              // Minimum display time (seconds)
    "max_duration": 300,             // Maximum display time (seconds)  
    "duration_buffer": 0.1,          // Buffer time (10% extra)
    "headlines_per_feed": 2,         // Headlines from each feed
    "scroll_speed": 2,               // Pixels per frame
    "scroll_delay": 0.02             // Seconds per frame
  }
}

Duration Scenarios

Scenario Headlines Est. Duration Cycles/Hour
Light 4 headlines 30s (min) 120
Medium 6 headlines 30s (min) 120
Current 8 headlines 57s 63
Heavy 12 headlines 85s 42
Maximum 20+ headlines 300s (max) 12

Benefits

Perfect Timing

  • No Cut-offs: Headlines never cut off mid-sentence
  • Complete Cycles: Always shows full rotation of all selected content
  • Smooth Transitions: Buffer time prevents jarring switches

Intelligent Scaling

  • Adapts to Content: More feeds = longer duration automatically
  • User Control: Set your preferred min/max limits
  • Flexible: Works with any combination of feeds and headlines

Predictable Behavior

  • Consistent Experience: Same content always takes same time
  • Reliable Cycling: Know exactly when content will repeat
  • Configurable: Adjust to your viewing preferences

Usage Examples

Command Line Testing

# Test dynamic duration calculations
python3 test_dynamic_duration.py

# Check current status
python3 test_dynamic_duration.py status

Configuration Changes

# Add more feeds (increases duration)
python3 add_custom_feed_example.py add "Tennis" "https://www.atptour.com/en/rss/news"

# Check new duration
python3 test_dynamic_duration.py status

Web Interface

  1. Go to http://display-ip:5001
  2. Click "News Manager" tab
  3. Adjust "Duration Settings":
    • Min Duration: Shortest acceptable cycle time
    • Max Duration: Longest acceptable cycle time
    • Buffer: Extra time for smooth transitions

Advanced Configuration

Fine-Tuning Duration

{
  "min_duration": 45,      // Increase for longer minimum cycles
  "max_duration": 180,     // Decrease for shorter maximum cycles
  "duration_buffer": 0.15  // Increase buffer for more transition time
}

Scroll Speed Impact

{
  "scroll_speed": 3,       // Faster scroll = shorter duration
  "scroll_delay": 0.015    // Less delay = shorter duration
}

Content Control

{
  "headlines_per_feed": 3, // More headlines = longer duration
  "enabled_feeds": [       // More feeds = longer duration
    "NFL", "NBA", "MLB", "NHL", "BBC F1", "Tennis"
  ]
}

Troubleshooting

Duration Too Short

  • Increase min_duration
  • Add more feeds or headlines per feed
  • Decrease scroll_speed

Duration Too Long

  • Decrease max_duration
  • Remove some feeds
  • Reduce headlines_per_feed
  • Increase scroll_speed

Jerky Transitions

  • Increase duration_buffer
  • Adjust scroll_delay

Disable Dynamic Duration

To use fixed timing instead:

{
  "dynamic_duration": false,
  "fixed_duration": 60      // Fixed 60-second cycles
}

Technical Details

Calculation Formula

total_scroll_distance = display_width + text_width
frames_needed = total_scroll_distance / scroll_speed
base_time = frames_needed * scroll_delay
buffer_time = base_time * duration_buffer
final_duration = base_time + buffer_time (within min/max limits)

Display Integration

The display controller automatically:

  1. Calls news_manager.get_dynamic_duration()
  2. Uses returned value for display timing
  3. Switches to next mode after exact calculated time
  4. Logs duration decisions for debugging

Best Practices

  1. Start Conservative: Use default settings initially
  2. Test Changes: Use test script to preview duration changes
  3. Monitor Performance: Watch for smooth transitions
  4. Adjust Gradually: Make small changes to settings
  5. Consider Viewing: Match duration to your typical viewing patterns

The dynamic duration feature ensures your news ticker always displays complete, perfectly-timed content cycles regardless of how many feeds or headlines you configure!

Clone this wiki locally